用fftw做三维快速离散傅里叶变换

用fftw做三维快速离散傅里叶变换,第1张

MATLAB傅里叶变换:傅立叶变换的分类:傅立叶级数:将周期性连续函数变换为离散频率点上的函数(连续)傅立叶变换:将连续函数变换为连续频率的函数离散时间傅立叶变换:将离散函数变换为连续频率的函数离散傅立叶变换:将有限长离散函数变换为离散频率点上的函数其中FFT是离散傅立叶变换的快速计算方法,适用于离散信号,并且注意变换后的点数与信号的采样点数一致。尽管可以将信号补0,但补0不能提高频域的分辨率。matlab中提供了函数fft做一维的FFT。时域谱和频域谱是相互对应;时域的信号长度,决定频域的采样间隔,它们成导数关系;时域中信号有N点,每点间隔dt,所以时域信号长度为Ndt;那么频谱每点的间隔就是1/(Ndt)。傅立叶变换结果和原来信号有相同的点数,所以m=N,又第一点一定对应0频率,所以频域信号的很坐标就是(0:m-1)/(Ndt),这句就是根据这个很坐标和频谱c,画出频谱plot((0:m-1)/(Ndt),c),所以在频谱图上,可以根据峰值的位置的横坐标读出对应的频率。clearall;N=256;dt=002;n=0:N-1;t=ndt;x=sin(2pit);m=N;a=zeros(1,m);b=zeros(1,m);fork=0:m-1 forii=0:N-1 a(k+1)=a(k+1)+2/Nx(ii+1)cos(2pikii/N); b(k+1)=b(k+1)+2/Nx(ii+1)sin(2pikii/N); endc(k+1)=sqrt(a(k+1)^2+b(k+1)^2);endsubplot(211);plot(t,x);title('原始信号'),xlabel('时间/t');f=(0:m-1)/(Ndt);subplot(212);plot(f,c);holdontitle('Fourier');xlabel('频率/HZ');ylabel('振幅');ind=find(c==max(c),1,'first');%寻找最到值的位置x0=f(ind);%根据位置得到横坐标(频率)y0=c(ind);%根据位置得到纵坐标(幅度)plot(x0,y0,'ro');holdofftext(x0+1,y0-01,num2str(x0,'频率=%f'));

y=[18 2 22 32 35 37]

y1=fft(y)

结果:

y =

18000 20000 22000 32000 35000 37000

y1 =164000 -14000 + 25981i -07000 + 03464i -14000 -07000 - 03464i -14000 - 25981i

设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算法。

1N=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样本序列

2N=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),即为所求。

以上就是关于用fftw做三维快速离散傅里叶变换全部的内容,包括:用fftw做三维快速离散傅里叶变换、在matlab中怎样用快速傅里叶变换求相位图 例如y=[1.8,2,2.2,3.2,3.5,3.7] 求程序、一维复数序列的快速傅里叶变换(FFT)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9449130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存