C语言实现FFT
哪位大虾知道在DSP平台上能实现的有C语言编的FFT谢谢! C语言编的FFT,代码网上有很多啊,你可以搜搜,可以移植到DSP上啊,记得TI有这方面的库吧。
我给你个网上收集的C语言FFT代码,不过本人没有亲自验证,仅供参考把
[ 本帖最后由 eight 于 2008-5-8 22:00 编辑 ] //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;
}
}
自己以前花了不少时间编出来的,可以正确运行 赞楼上,
向你学习,
呵呵。 if(j<n&&2*j>n)
&&没看懂是"或"吗 本帖最后由 wdhd 于 2016-9-10 14:10 编辑
原帖由 jxby022089 于 2008-5-16 01:39 发表
if(jn)
&&没看懂是"或"吗
“!”是逻辑非运算符
“&&”是逻辑与运算符
“||”是逻辑或运算符
上面这是C语言的逻辑运算符,和Matlab语言的不同(下面)
“~”是逻辑非运算符
“&”是逻辑与运算符
“|”是逻辑或运算符
页:
[1]