微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > CFFT

CFFT

时间:10-02 整理:3721RD 点击:

此例程使用的是复数FFT,使用的DSP库函数为arm_cfft_radix4_f32。

此函数的输入数据为复数形式,即要有实部与虚部,但对于时域信号,只有实部没有虚部,所以在生成的FFT数据中,虚部全是0,实部是由arm_sin_f32函数生成的正弦波。


  1. for(i=0;i<FFT_LENGTH;i++)//éú3éD?o?DòáD
  2. {
  3.                                  fft_inputbuf[2*i]=100+
  4.                                                    10*arm_sin_f32(2*PI*i/FFT_LENGTH)+
  5.                                                                    30*arm_sin_f32(2*PI*i*4/FFT_LENGTH)+
  6.                                                    50*arm_cos_f32(2*PI*i*8/FFT_LENGTH);       
  7.                                  fft_inputbuf[2*i+1]=0;                       
  8. }

复制代码



在使用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左右吧。




Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top