广告招募

当前位置:全球工厂网 > 技术中心 > 所有分类

高级傅里叶公式,谁能告诉我fft(快速傅里叶变换)的原理

2023年09月13日 09:30:04      来源:安徽思成仪器技术有限公司 >> 进入该公司展台      阅读量:31

分享:

一维复数序列的快速傅里叶变换(FFT)

设x(N)为N点有限长离散序列,代入式(8-3)、式(8-4),并令 其傅里叶变换(DFT)为地球物理数据处理基础反变换(IDFT)为地球物理数据处理基础两者的差异只在于W的指数符号不同,以及差一个常数1/N,因此下面我们只讨论DFT正变换式(8-5)的运算量,其反变换式(8-6)的运算是相同的。一般来说,W是复数,因此,X(j)也是复数,对于式(8-5)的傅里叶变换(DFT),计算一个X(j)值需要N次复数乘法和N-1次复数加法。而X(j)一共有N个值(j=0,1,…,N-1),所以完成整个DFT运算总共需要N2次复数乘法和N(N-1)次复数加法。直接计算DFT,乘法次数和加法次数都是与N2成正比的,当N很大时,运算量会很大,例如,当N=8时,DFT需64次复数乘法;而当N=1024时,DFT所需乘法为1048576次,即一百多万次的复数乘法运算,对运算速度要求高。所以需要改进DFT的计算方法,以减少运算次数。分析Wjk,表面上有N2个数值,由于其周期性,实际上仅有N个不同的值W0,W1,…,WN-1。对于N=2m时,由于其对称性,只有N/2个不同的值W0,W1,…,地球物理数据处理基础因此可以把长序列的DFT分解为短序列DFT,而前面已经分析DFT与N2成正比,所以N越小越有利。

同时,利用ab+ac=a(b+c)结合律法则,可以将同一个Wr对应的系数x(k)相加后再乘以Wr,就能大大减少运算次数。这就是快速傅里叶变换(FFT)的算法思路。下面,我们来分析N=2m情况下的FFT算法。1.N=4的FFT算法对于m=2,N=4,式(8-5)傅里叶变换为地球物理数据处理基础将式(8-7)写成矩阵形式地球物理数据处理基础为了便于分析,将上式中的j,k写成二进制形式,即地球物理数据处理基础代入式(8-7),得地球物理数据处理基础分析Wjk的周期性来减少乘法次数地球物理数据处理基础则 代回式(8-9),整理得地球物理数据处理基础上式可分层计算,先计算内层,再计算外层时就利用内层计算的结果,可避免重复计算。写成分层形式地球物理数据处理基础则X(j1 j0)=X2(j1 j0)。上式表明对于N=4的FFT,利用Wr的周期关系可分为m=2步计算。实际上,利用Wr的对称性,仍可以对式(8-11)进行简化计算。考虑到地球物理数据处理基础式(8-11)可以简化为地球物理数据处理基础令j=j0;k=k0,并把上式表示为十进制,得地球物理数据处理基础可以看到,完成上式N=4的FFT计算(表8-1)需要N·(m-1)/2=2次复数乘法和N·m=8次复数加法,比N=4的DFT算法的N2=16次复数乘法和N·(N-1)=12次复数加法要少得多。

表8-1 N=4的FFT算法计算过程注:W0=1;W1=-i。[例1]求N=4样本序列1,3,3,1的频谱(表8-2)。表8-2 N=4样本序列2.N=8的FFT算法类似N=4的情况,用二进制形式表示,有地球物理数据处理基础写成分层计算的形式:地球物理数据处理基础则X(j2 j1 j0)=X3(j2 j1 j0)。对式(8-14)的X1(k1 k0 j0)进行展开,有地球物理数据处理基础还原成十进制,并令k=2k1+k0,即k=0,1,2,3,有地球物理数据处理基础用类似的方法对式(8-14)的X2(k0 j1 j0),X3(j2 j1 j0)进行展开,整理得地球物理数据处理基础用式(8-16)、式(8-17)逐次计算到X3(j)=X(j)(j=0,1,…,7),即完成N=23=8的FFT计算,其详细过程见表8-3。表8-3 N=8的FFT算法计算过程注:对于正变换 对于反变换 所 [例2]求N=8样本序列(表8-4)x(k)=1,2,1,1,3,2,1,2的频谱。表8-4 N=8样本序列3.任意N=2m的FFT算法列出N=4,N=8的FFT计算公式,进行对比地球物理数据处理基础观察式(8-18)、式(8-19),不难看出,遵循如下规律:(1)等式左边的下标由1递增到m,可用q=1,2,…,m代替,则等式右边为q-1;(2)k的上限为奇数且随q的增大而减小,至q=m时为0,所以其取值范围为k=0,1,2,…,(2m-q-1);(3)j的上限为奇数且随q的增大而增大,且q=1时为0,其取值范围为j=0,1,2,…,(2q-1-1);(4)k的系数,在等式左边为2q,等式右边为2q-1(包括W的幂指数);(5)等式左边序号中的常数是2的乘方形式,且幂指数比下标q小1,即2q-1;等式右边m对式子序号中的常数都是定值2m-1。

归纳上述规则,写出对于任意正整数m,N=2m的FFT算法如下:由X0(p)=x(p)(p=0,1,…,N-1)开始:(1)对q=1,2,…,m,执行(2)~(3)步;(2)对k=0,1,2,…,(2m-q-1)及j=0,1,2,…,(2q-1-1),执行地球物理数据处理基础(3)j,k循环结束;(4)q循环结束;由Xm(p)(p=0,1,…,N-1)输出原始序列x(p)的频谱X(p)。在计算机上很容易实现上述FFT算法程序,仅需要三个复数数组高级傅里叶公式,编程步骤如下:(1)设置复数数组X1(N-1),X2(N-1)和 (数组下界都从0开始);(2)把样本序列x赋给X1,即X1(k)=x(k)(k=0,1,…,N-1);(3)计算W,即正变换 反变换 (4)q=1,2,…,m,若q为偶数高级傅里叶公式,执行(6),否则执行第(5)步;(5)k=0,1,2,…,(2m-q-1)和j=0,1,2,…,(2q-1-1)循环,作X2(2qk+j)=X1(2q-1k+j)+X1(2q-1k+j+2m-1)X2(2qk+j+2q-1)=[X1(2q-1k+j)-X1(2q-1k+j+2m-1)]W(2q-1k)至k,j循环结束;(6)k=0,1,2,…,(2m-q-1)和j=0,1,2,…,(2q-1-1)循环,作X1(2qk+j)=X2(2q-1k+j)+X2(2q-1k+j+2m-1)X1(2qk+j+2q-1)=[X2(2q-1k+j)-X2(2q-1k+j+2m-1)]W(2q-1k)至k,j循环结束;(7)q循环结束,若m为偶数,输出X1(j),否则输出X2(j)(j=0,1,…,N-1),即为所求。

谁能告诉我fft(快速傅里叶变换)的原理请教关于“实序列快速傅里叶变换”程序

自数字信号处理C语言程序集,但运算结果与书中给的结果不符合,估计书中给的这个程序代码有些错误~哪位高手能帮忙看看错误在哪呢?实序列快速傅里叶变换:#includ

谁能告诉我快速傅里叶变换(FFT)是做什么用的?

简单来讲,可以讲信号从时域变换到频域进行分析

如何在MATLAB里实现信号的快速傅里叶变换FFT

代码:

1 N=8;%原离散信号有8点

2 n=[0:1:N-1]%原信号是1行8列的矩阵

3 xn=0.5.^n;%构建原始信号,为指数信号

4

5 w=[-800:1:800]*4*pi/800;%频域共-800----+800 的长度(本应是无穷,高频分量很少,故省去)

6 X=xn*exp(-j*(n'*w));%求dtft变换,采用原始定义的方法,对复指数分量求和而得

7 subplot(311)

8 stem(n,xn);

9 title('原始信号(指数信号)');

10 subplot(312);

11 plot(w/pi,abs(X));

12 title('DTFT变换')

版权与免责声明:
1.凡本网注明"来源:全球工厂网"的所有作品,版权均属于兴旺宝装备总站,转载请必须注明兴旺宝装备总站。违反者本网将追究相关法律责任。
2.企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
3.本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。 4.如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系。