这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 程序:实序列快速傅里叶变换(一)

共3条 1/1 1 跳转至

程序:实序列快速傅里叶变换(一)

专家
2010-07-05 17:17:46     打赏

/**
函数名:void rfft(x,y,n)
Funtion:实序列快速傅里叶变换(一)
IntPut: x     : 双精度实型一组数据,长度为n,开始时存放要变换数据的实数据,最后存放变换结果的n/2+1的值
                 其存储顺序为[Re(0),Re(1).....Re(n/2),Im(n/2-1)....Im(1)]。其中Re(0)=X(0),Re(n/2)=X(n/2)
                 根据X(k)的共轭对称性,很容易写出后部分的值。
         n     :整型变量,数据长度,必须是2的证书次幂,n=2m?
**/

void rfft(double x[],int n)
{
    int  i,j,k,m,i1,i2,i3,i4,n1,n2,n4;
    double a,cc,e,ss,xt,t1,t2;
    for(j=1,i=1; i<16;i++)
      {
      m=i;
      j=2*j;
      if(j==n) break;
      }
    n1=n-1;

    for(j=0,i=0; i<n1; i++)
      {
       if(i<j)
         {
         xt=x[j];
         x[j]=x[i];
         x[i]=xt;
         }
       k=n/2;
       while(k<(j+1))
         {
         j=j-k;
         k=k/2;
         }
       j=j+k;
      }

    for(i=0; i<n; i+=2)
      {
      xt=x[i];
      x[i]=xt+x[i+1];
      x[i+1]=xt-x[i+1];
      }
    n2=1;
    for(k=2; k<=m; k++)
      {
      n4=n2;
      n2=2*n4;
      n1=2*n2;
      e=6.28318530718/n1;
      for(i=0; i<n; i++)
        {
        xt=x[i];
        x[i]=xt+x[i+n2];
        x[i+n2]=xt-x[i+n2];
        x[i+n2+n4]=-x[i+n2+n4];
        a=e;
        for(j=1; j<=(n4-1); j++)
          {
          i1=i+j;
          i2=i-j+n2;
          i3=i+j+n2;
          i4=i-j+n1;
          cc=cos(a);
          ss=sin(a);
          a=a+e;
          t1=cc*x[i3]+ss*x[i4];
          t2=ss*x[i3]-cc*x[i4];
          x[i4]=x[i2]-t2;
          x[i3]=-x[i2]-t2;
          x[i2]=x[i1]-t1;
          x[i1]=x[i1]+t1;
          }
        }
      }

}




关键词: 程序     序列     快速     傅里叶     变换    

菜鸟
2010-08-03 17:34:11     打赏
2楼
Symbian OS 机器比较老了

菜鸟
2011-08-22 14:12:51     打赏
3楼
想学一些关于人脸算法这块的东西 求帮助

共3条 1/1 1 跳转至

回复

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