卜永波 发表于 2008-5-8 15:26

C语言实现FFT

哪位大虾知道在DSP平台上能实现的有C语言编的FFT
谢谢!

Jnny_CN 发表于 2008-5-8 17:26

C语言编的FFT,代码网上有很多啊,你可以搜搜,可以移植到DSP上啊,记得TI有这方面的库吧。

我给你个网上收集的C语言FFT代码,不过本人没有亲自验证,仅供参考把

[ 本帖最后由 eight 于 2008-5-8 22:00 编辑 ]

yelv123 发表于 2008-5-9 20:46

//x--双精度实型一维数组,长度的n。开始时存在要变换数据的实部,最后
//存放变换变换结果的实部
//y--双精度实型一维数组,长度的n。开始时存在要变换数据的虚部,最后
//存放变换变换结果的虚部
//n--整型变量,数据长度如果是2的整数次幂,即n=(2的m次方);
//数据长度如果不是2的整数次幂,即(2的m次方)<n<(2的m+1次方),
//取前(2的m次方)个数据进行fft
//sign--整型变量。sign=1时,子函数fft()计算离散傅立叶正变换(dft);
//sign=-1时,子函数fft()计算离散傅立叶反变换(idft)
void time2fft(float x[],float y[],int n,int sign)//时间抽样基2fft
{
    int i,j,m,k,l,n1,n2,q;
    float ui1,ur1,c1,e,ui,ur,s1,t,tr,ti;
    q=n;
      for(j=1,i=1;i<n;i++)//取m值
    {
   m=i;
   j=2*j;
   if(j<n&&2*j>n)
   {
      n=j;
   break;
    }
   if(j==n)
      break;
    }
   n1=n-1;
       for(j=0,i=0;i<n1;i++)//变换
{
if (i<j)
{
   tr=x;
               ti=y;
               x=x;
               y=y;
               x=tr;
   y=ti;
}
      k=n/2;
      while(k<=j)
   {
   j=j-k;
   k=k/2;
   }
      j=j+k;
}
n1=1;
   for(l=1;l<=m;l++)
    {
      n1=2*n1;
      n2=n1/2;
      
      ur=1;
      ui=0;
c1=cos(3.1415926/n2);
s1=-sign*sin(3.1415926/n2);
         for(j=0;j<n2;j++)
   {
       for(i=j;i<n;i=i+n1)
{
             k=i+n2;
                   tr=ur*x-ui*y;
                   ti=ur*y+ui*x;
                   x=x-tr;
                   y=y-ti;
                   x=x+tr;
                   y=y+ti;
}
            
               ur1=ur*c1-ui*s1;
               ui1=ur*s1+ui*c1;
               ur=ur1;
               ui=ui1;
      }
      }

   if(sign==-1)
   {
      for(i=0;i<n;i++)
      {
      x/=n;
         y/=n;
      }
   }

自己以前花了不少时间编出来的,可以正确运行

jytan 发表于 2008-5-10 10:04

赞楼上,
向你学习,
呵呵。

jxby022089 发表于 2008-5-16 01:39

if(j<n&&2*j>n)
&&没看懂是"或"吗

ch_j1985 发表于 2008-5-16 06:47

本帖最后由 wdhd 于 2016-9-10 14:10 编辑

原帖由 jxby022089 于 2008-5-16 01:39 发表
if(jn)
&&没看懂是"或"吗
“!”是逻辑非运算符
“&&”是逻辑与运算符
“||”是逻辑或运算符
上面这是C语言的逻辑运算符,和Matlab语言的不同(下面)
“~”是逻辑非运算符
“&”是逻辑与运算符
“|”是逻辑或运算符
页: [1]
查看完整版本: C语言实现FFT