CFFT
时间:10-02
整理:3721RD
点击:
此例程使用的是复数FFT,使用的DSP库函数为arm_cfft_radix4_f32。
此函数的输入数据为复数形式,即要有实部与虚部,但对于时域信号,只有实部没有虚部,所以在生成的FFT数据中,虚部全是0,实部是由arm_sin_f32函数生成的正弦波。
- for(i=0;i<FFT_LENGTH;i++)//éú3éD?o?DòáD
- {
- fft_inputbuf[2*i]=100+
- 10*arm_sin_f32(2*PI*i/FFT_LENGTH)+
- 30*arm_sin_f32(2*PI*i*4/FFT_LENGTH)+
- 50*arm_cos_f32(2*PI*i*8/FFT_LENGTH);
- fft_inputbuf[2*i+1]=0;
- }
在使用DSP库的FFT前,要对FFT数据结构进行初始化,以计算旋转因子与配置数据指针等等。这里使用的函数是arm_cfft_radix4_init_f32();
FFT运算函数arm_cfft_radix4_f32计算后的结果还保存在输入数据序列中,而计算结果是有实部与虚部的,如下是FFT的结果
要使用arm_cmplx_mag_f32函数,求取FFT计算结果频域中的幅值。
结果存储在fft_outputbuf中
对比于以上计算结果与生成正弦波形的函数,结果是正确的。
而计算时间,可以通过LCD屏时行显示,可以看到1024点的复数FFT使用的时间是0.375ms,如果在一般的应用中,计算6路采集量,理想情况下使用时间为2.25ms,在电力上,还没有到半个周期
速度与C2000的DSP库所使用的时间相差不大。如下是C2000的DSP库的CFFT所使用的周期。如果是150MHz的主频,时间大约也是355us左右吧。