还是要做具体应用啊
MegaCore里面有FFT模块
非常完善了已经
如果要是做实际应用 尽量用那个
但是 如果练习编程
FFT就大了去了 大工程 嗯嗯
我们再研究 讨论
C语言算法!!// 快速傅立叶变换
// 入口参数:
// l: l=0, 傅立叶变换l=1, 逆傅立叶变换
// il: il=0,不计算傅立叶变换或逆变换模和幅角;il=1,计算模和幅角
// n: 输入的点数,为偶数,一般为32,64,128,...,1024等
// k: 满足n=2^k(k>0),实质上k是n个采样数据可以分解为偶次幂和奇次幂的次数
// pr[]: l=0时,存放N点采样数据的实部
// l=1时, 存放傅立叶变换的N个实部
// pi[]: l=0时,存放N点采样数据的虚部
// l=1时, 存放傅立叶变换的N个虚部
//
// 出口参数:
// fr[]: l=0, 返回傅立叶变换的实部
// l=1, 返回逆傅立叶变换的实部
// fi[]: l=0, 返回傅立叶变换的虚部
// l=1, 返回逆傅立叶变换的虚部
// pr[]: il=1,i=0 时,返回傅立叶变换的模
// il=1,i=1 时,返回逆傅立叶变换的模
// pi[]: il=1,i=0 时,返回傅立叶变换的辐角
// il=1,i=1 时,返回逆傅立叶变换的辐角
void fft(double pr[], double pi[], int n, int k, double fr[], double fi[], int l, int il){
int it,m,is,i,j,nv,l0
double p,q,s,vr,vi,poddr,poddi
for(it=0it<=n-1m=it++){
is=0
for(i=0i<=k-1i++){
j=m/2
is=2*is+(m-2*j)
m=j
}
fr[it]=pr[is]
fi[it]=pi[is]
}
//----------------------------
pr[0]=1.0
pi[0]=0.0
p=6.283185306/n
pr[1]=cos(p)
pi[1]=-sin(p)
if (l)
pi[1]=-pi[1]
for(i=2i<=n-1i++){
p=pr[i-1]*pr[1]
q=pi[i-1]*pi[1]
s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1])
pr=p-q
pi=s-p-q
}
for(it=0it<=n-2it+=2){
vr=fr[it]
vi=fi[it]
fr[it]=vr+fr[it+1]
fi[it]=vi+fi[it+1]
fr[it+1]=vr-fr[it+1]
fi[it+1]=vi-fi[it+1]
}
m=n/2
nv=2
for(l0=k-2l0>=0l0--){
m/=2
nv<<=1
for(it=0it<=(m-1)*nvit+=nv)
for(j=0j<=(nv/2)-1j++){
p=pr[m*j]*fr[it+j+nv/2]
q=pi[m*j]*fi[it+j+nv/2]
s=pr[m*j]+pi[m*j]
s*=(fr[it+j+nv/2]+fi[it+j+nv/2])
poddr=p-q
poddi=s-p-q
fr[it+j+nv/2]=fr[it+j]-poddr
fi[it+j+nv/2]=fi[it+j]-poddi
fr[it+j]+=poddr
fi[it+j]+=poddi
}
}
if(l)
for(i=0i<=n-1fr/=n,fi[i++]/=n)
if(il)
for(i=0i<=n-1i++){
pr=sqrt(fr*fr+fi*fi)
if(fabs(fr)<0.000001*fabs(fi))
pi=fi*fr>0?90.0-90.0
else
pi=atan(fi/fr)*360.0/6.283185306
}
return
}
试试在百度里找找!如果有光碟那最好了!
也可以把ff show下载在你自己的文件夹里!
希望可以帮助你!
祝你成功!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)