FFT(离散傅氏变换的快速算法)

FFT(离散傅氏变换的快速算法)

ID:37710084

大小:44.60 KB

页数:10页

时间:2019-05-29

FFT(离散傅氏变换的快速算法)_第1页
FFT(离散傅氏变换的快速算法)_第2页
FFT(离散傅氏变换的快速算法)_第3页
FFT(离散傅氏变换的快速算法)_第4页
FFT(离散傅氏变换的快速算法)_第5页
资源描述:

《FFT(离散傅氏变换的快速算法)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、FFT(离散傅氏变换的快速算法)目录1算法简介2DFT算法3源码表示4MATLAB中FFT的使用方法1算法简介编辑FFT(FastFourierTransformation),即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。它对傅氏变换的理论并没有新的FFT算法图(Bufferfly算法)发现,但是对于在计算机系统或者说数字系统中应用离散傅立叶变换,可以说是进了一大步。设x(n)为N项的复数序列,由DFT变换,任一X(m)的计算都需要N次复数乘法和N-1次复数加法,

2、而一次复数乘法等于四次实数乘法和两次实数加法,一次复数加法等于两次实数加法,即使把一次复数乘法和一次复数加法定义成一次“运算”(四次实数乘法和四次实数加法),那么求出N项复数序列的X(m),即N点DFT变换大约就需要N^2次运算。当N=1024点甚至更多的时候,需要N2=1048576次运算,在FFT中,利用WN的周期性和对称性,把一个N项序列(设N=2k,k为正整数),分为两个N/2项的子序列,每个N/2点DFT变换需要(N/2)2次运算,再用N次运算把两个N/2点的DFT变换组合成一个N点的DFT变换。这样变换以后,总的运算次数就变成N+

3、2*(N/2)^2=N+(N^2)/2。继续上面的例子,N=1024时,总的运算次数就变成了525312次,节省了大约50%的运算量。而如果我们将这种“一分为二”的思想不断进行下去,直到分成两两一组的DFT运算单元,那么N点的DFT变换就只需要Nlog2N次的运算,N在1024点时,运算量仅有10240次,是先前的直接算法的1%,点数越多,运算量的节约就越大,这就是FFT的优越性。2DFT算法编辑ForlengthNinputvectorx,theDFTisalengthNvectorX,withelementsNX(k)=sumx(n)*e

4、xp(-j*2*pi*(k-1)*(n-1)/N),1<=k<=N.n=1TheinverseDFT(computedbyIFFT)isgivenbyNx(n)=(1/N)sumX(k)*exp(j*2*pi*(k-1)*(n-1)/N),1<=n<=N.k=13源码表示编辑在C环境下的源码源码(1):注:亲测,这个版本无法运行,作者删改了重要内容[1] 请参考源码(2)//快速傅立叶变换//入口参数://l:l=0,傅立叶变换;l=1,逆傅立叶变换//il:il=0,不计算傅立叶变换或逆变换模和幅角;il=1,计算模和幅角//n:输入的点数

5、,为偶数,一般为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=

6、1时,返回逆傅立叶变换的模//pi[]:il=1,i=0时,返回傅立叶变换的辐角//il=1,i=1时,返回逆傅立叶变换的辐角voidfft(doublepr[],doublepi[],intn,intk,doublefr[],doublefi[],intl,intil){intit,m,is,i,j,nv,l0;doublep,q,s,vr,vi,poddr,poddi;for(it=0;it<=n-1;m=it++){is=0;for(i=0;i<=k-1;i++){j=m/2;is=2*is+(m-2*j);m=j;}fr[it]=pr

7、[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=2;i<=n-1;i++){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=0;it<=n-2;it+=2){vr=fr[it];vi=fi[

8、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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。