Hallo, ich experimentiere mit der ARM-DSP-Lib für die M4 (hier für einen XMC4500) unter DAVE. Ich habe untenstehenden Testcode geschrieben um die RFFT-Funktion zu testen. Der Code läuft, ich wundere mich aber über das Ergbnis. In dem Array das das Spektrum speichert (testout) sollte an Index 0 der Gleichanteil stehen und an Index 8 & 32 erwarte ich die Peaks aus dem Testsignal. Der Gleichanteil ist korrekt, wenn ich die Skalierung mit der FFT-Länge in Betracht zieht, gleiches gilt für die Amplitudenhöhe der Peaks; nur sind die Peaks nicht an den Indices 8 & 32 zu finden, sondern an 9 & 33. Egal wie das Testsignal aussieht, ich habe immer einen Shift von 1. Liegt das an der FFT oder mache ich einen (Denk)Fehler? LEler
1 | float32_t testInput_f32[2048]; |
2 | float32_t testout_f32[2048]; |
3 | |
4 | int main(void) |
5 | {
|
6 | DAVE_Init(); // Initialization of DAVE Apps |
7 | |
8 | uint32_t fftSize = 1024; |
9 | uint32_t ifftFlag = 0; |
10 | uint32_t testIndex = 0; |
11 | uint32_t i; |
12 | arm_status status = ARM_MATH_SUCCESS; |
13 | arm_rfft_fast_instance_f32 S; |
14 | float32_t maxValue; |
15 | //Erzeuge Testsignal
|
16 | for(i=0;i<fftSize*2;i++) |
17 | {
|
18 | testInput_f32[i]= 100 + arm_sin_f32(8*i*2*PI/(2*fftSize)) + arm_sin_f32(32*i*2*PI/(2*fftSize)); |
19 | };
|
20 | |
21 | status = arm_rfft_fast_init_f32(&S, fftSize); |
22 | arm_rfft_fast_f32(&S, testInput_f32, testout_f32, ifftFlag); |
23 | arm_abs_f32(testout_f32, testout_f32, fftSize); |
24 | arm_max_f32(testout_f32, fftSize, &maxValue, &testIndex); |
25 | |
26 | while(1); |
27 | }
|