这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » FFT64 单片机中用的FFT64点算法

共2条 1/1 1 跳转至

FFT64 单片机中用的FFT64点算法

院士
2006-09-17 18:14:16     打赏
FFT64 单片机中用的FFT64点算法



关键词: FFT64     单片     机中     用的     算法    

院士
2006-12-22 22:43:00     打赏
2楼
问 改后
void FFT(float dataR[],float dataI[])
{
    U16 x0,x1,x2,x3,x4,x5,x6,xx;
    U16 L,j,k,b,p;
    float TR,TI,temp,w[32];

    float sin_tab[64],cos_tab[64];
    U8 i;

    for(i=0;i<64;i++)
    {
        float t =PI2*i/64;
        sin_tab[i]=sin(t);
        cos_tab[i]=cos(t);
    }
    /********** following code invert sequence ************/
    for(i=0;i<64;i++)
    {  
        x0=x1=x2=x3=x4=x5=0;
        x0=i&0x01; x1=(i/2)&0x01; x2=(i/4)&0x01; x3=(i/8)&0x01;x4=(i/16)&0x01; x5=(i/32)&0x01;    
      //  x6=(i/64)&0x01;
         xx=x0*32+x1*16+x2*8+x3*4+x4*2+x5;
        dataI[xx]=dataR[i];
     }
    for(i=0;i<64;i++)
    {  dataR[i]=dataI[i]; dataI[i]=0;  }
    /************** following code FFT *******************/
    for(L=1;L<=6;L++)
    {  
        /* for(1) */
        b=1; i=L-1;
        while(i>0)  {b=b*2; i--;}   /* b= 2^(L-1) */
        for(j=0;j<=b-1;j++)          /* for (2) */
        {
            p=1; i=6-L;
              while(i>0)     /* p=pow(2,7-L)*j; */
              {p=p*2; i--;}
              p=p*j;
              for(k=j;k<64;k=k+2*b)   /* for (3) */
              {
                  TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b];
                  dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];
                  dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];
                  dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];
                  dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];
              }   /* END for (3) */
        }    /* END for (2) */
    }     /* END for (1) */
    for(i=0;i<32;i++)
    {   /* 只需要32次以下的谐波进行分析 */
        w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
        w[i]=w[i]/64;
    }
    w[0]=w[0]/2;

    return (w);
}



这个程序我现在测试下来,所有的数据与源送过来的值符合,而且没有规律,我采样是用锁相环倍频到3.2kHz的,在任意时刻采64点,送到fft计算,请问这样对吗?请gg们帮帮忙!zzx7969@sina.com
1: 有人知道我程序错在哪儿了吗? 2: 我正想学习一下FFT!目前还没有任何资料,先帮你顶顶还能帮忙吧你受上的资料给一份给我吗?谢谢!
lhkjg@163.com 3: 建议你还是看一下数字信号处理教程(第二版)这种贴子发到这是得不到实质上的帮助的。

建议你还是看一下数字信号处理教程(第二版) 4: 这程序是你从网上下的吧?这程序是你从网上下的吧?

变量的定义就有问题或者不是很好,

这种东西就不要指望能够从网上得到了。

还是自己动手看信号处理吧,要不就外包。

5: 本来是128点的吧?字节改数字肯定有问题的.
我也刚好用了这个程序,128点的. 不过改成定点数了 6: fft我在VC6.0试了一下此程序,可能是正常的,我们可讨论,不正常是什么情况.

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]