Staram się zaimplementować 64-punktowe FFT na procesorze STM32F103RB. Korzystam z biblioteki dostarczonej przez producenta. Tablica table_fft.h wygląda tak:
reszta została wykomentowana.
Generacja przykładowego sinusa i analiza FFT:
Otrzymuję takie tablice:
Sinus wygląda dobrze, początek FFT też, ale skąd w końcowym fragmencie takie amplitudy ?
Jako argumenty dla FFT należy podać 32-bitową wartość 16bit_im_16bit_re. Jako im wszędzie z założenia mam zero.
uint16_t TableFFT[]= {0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000,
0xdd5d,0x3b21, 0x22a3,0x187e, 0x0000,0x2d41,
0xa57e,0x2d41, 0x0000,0x2d41, 0xc000,0x4000,
0xdd5d,0xe782, 0xdd5d,0x3b21, 0xa57e,0x2d41,
0x4000,0x0000, 0x4000,0x0000, 0x4000,0x0000 // N=64
};Generacja przykładowego sinusa i analiza FFT:
#define PI 3.14
#define N 64
#define STEP (2*PI/(N-1))*2
u32 in[N], out[N];
u16 i;
for(i = 0; i < N; i++){
in[i] = sin(STEP*i) * 32768 + 32768;
}
cr4_fft_64_stm32(out, in, 64);
Otrzymuję takie tablice:
Sinus wygląda dobrze, początek FFT też, ale skąd w końcowym fragmencie takie amplitudy ?
Jako argumenty dla FFT należy podać 32-bitową wartość 16bit_im_16bit_re. Jako im wszędzie z założenia mam zero.
