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

MSP430 FFT遇到的问题

时间:10-02 整理:3721RD 点击:
先用 AD600HZ采样100HZ正弦波,得到128个值,没有问题;
查了很多FFT的算法,也看懂了,但是算出来的值还是不对!
求高手们帮忙,看看哪里出了问题:~
//我的FFT ,已经倒位序完成。AD量给到Fft_Real【128】中
  • void FFT(void)
  • {
  • int NN=7; //这里因为128是2的7次方,如果是计算256点,则是2的8次方,N就是8,如果是512点则N=9,如此类推
  • unsigned int NUM_FFT=128; //这里要算多少点的fft就赋值多少,值只能是2的N次方
  •     for( i=1; i<=NN; i++)             /* for(1) */
  •     {
  •         b=1;
  •         b <<=(i-1);                 //蝶式运算,用于计算 隔多少行计算。例如第一级 1和2行计算,,,第二级
  •         for( j=0; j<=b-1; j++)       /* for (2) */
  •         {
  •             p=1;
  •             p <<= (NN-i);
  •             p = p*j;
  •             for( k2=j; k2<NUM_FFT; k2=k2+2*b)   /* for (3) 基二fft */
  •             {
  •                 Temp_Real = Fft_Real[k2]; Temp_Imag = Fft_Image[k2]; temp = Fft_Real[k2+b];
  •                 Fft_Real[k2] = Fft_Real[k2] + ((Fft_Real[k2+b]*COS_TAB[p])>>7) + ((Fft_Image[k2+b]*SIN_TAB[p])>>7);
  •                 Fft_Image[k2] = Fft_Image[k2] - ((Fft_Real[k2+b]*SIN_TAB[p])>>7) + ((Fft_Image[k2+b]*COS_TAB[p])>>7);
  •                 Fft_Real[k2+b] = Temp_Real - ((Fft_Real[k2+b]*COS_TAB[p])>>7) - ((Fft_Image[k2+b]*SIN_TAB[p])>>7);
  •                 Fft_Image[k2+b] = Temp_Imag + ((temp*SIN_TAB[p])>>7) - ((Fft_Image[k2+b]*COS_TAB[p])>>7);
  • //                //移位,防止溢出。结果已经是本值的1/64
  •               Fft_Real[k2] >>= 1;
  •                 Fft_Image[k2] >>= 1;
  •                Fft_Real[k2+b]  >>= 1;
  •                 Fft_Image[k2+b]  >>= 1;
  •             }
  •         }
  •     }
  •    }

[color=rgb(51, 102, 153) !important]复制代码
[color=rgb(51, 102, 153) !important]



ADC数据


实部^2+虚部^2


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

网站地图

Top