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

如题所述

通过前面的分析,我们认识到傅里叶变换本身是复数运算,地球物理获取的数据大多数是实数,对于实数的变换原则上可直接套用复序列的FFT算法,但那样是把实数序列当作虚部为零的复数对待,显然需要存储虚部的零并进行无功的运算,既浪费了一倍的计算内存,又降低了约一半的运算速度。

为了不浪费不可不设的虚部内存和必然出现的复数运算,可否将一个实序列分为两个子实序列,分别作为实部与虚部构成一个复数序列,然后用复序列的FFT算法求其频谱,对合成的复序列频谱进行分离和加工得到原实序列的频谱呢?答案是肯定的,实现这一过程思路就是实序列FFT算法的基本思想。

1.实序列的傅里叶变换性质

对于一个N个样本的实序列x(k),其频谱为X(j),用Xr(j)和Xi(j)表示X(j)的实部和虚部, 表示X(j)的共轭,则

证明:已知 则

地球物理数据处理基础

上式两端取共轭,并注意到x(k)是实序列,则

地球物理数据处理基础

这就是实序列的傅里叶变换具有复共轭性。

其同样具有周期性,即

地球物理数据处理基础

2.一维实序列的FFT算法

(1)同时计算两个实序列的FFT算法

已知两个实序列h(k),g(k)(k=0,1,…,N-1),例如重磁异常平面数据中的两条剖面,或地震勘探中的两道地震记录,可以人为地构成一个复序列:

地球物理数据处理基础

设h(k)的频谱为H(j)=Hr(j)+iHi(j)

g(k)的频谱为G(j)=Gr(j)+iGi(j)

y(k)的频谱为Y(j)=Yr(j)+i Yi(j)

利用上节的复序列FFT算法,求得Y(j),即Yr(j)和Yi(j)已知,来寻找Hr(j),Hi(j),Gr(j),Gi(j)与Yr(j),Yi(j)之间的关系。

对式(8-22)作傅里叶变换:

地球物理数据处理基础

由于H(j),G(j)本身是复序列,所以不能仅从上式分离出H(j)和G(j)。应用Y(j)的周期性,容易得到

Y(N-j)=H(-j)+iG(-j)

上式取共轭:

地球物理数据处理基础

由于h(k),g(k)为实序列,对上式右端应用复共轭定理,得

地球物理数据处理基础

对式(8-23)展开,得

地球物理数据处理基础

对式(8-24)展开,并应用共轭关系,得

地球物理数据处理基础

把式(8-25)和式(8-26)与Y(j)=Yr(j)+iYi(j)进行对比,有

地球物理数据处理基础

整理得

地球物理数据处理基础

因此,对于两个实序列,通过构造一个复序列,应用复序列的FFT算法和式(8-28)的分离加工,即可得到两个实序列的频谱。

(2)计算2 N个数据点的实序列FFT算法

设有2N点的实序列u(k)(k=0,1,…,2N-1),首先按k的偶、奇分成两个子实序列,并构成复序列,即

地球物理数据处理基础

通过调用复序列FFT算法,求得y(k)的频谱为Y(j)。另记h(k),g(k)的频谱为H(j)和G(j)。

利用前面式(8-23)和式(8-24),容易求得

地球物理数据处理基础

下面分析用H(j),G(j)形成u(k)频谱的问题。记u(k)(k=0,1,…,2 N-1)的频谱为V(j),分析V(j),H(j),G(j)之间的关系,根据定义

地球物理数据处理基础

利用式(8-31)和式(8-34)可换算出u(k)的前N个频谱V(j)(j=0,1,…,N-1),还要设法求u(k)的后N个频谱V(N+j)(j=0,1,…,N-1)。利用实序列其频谱的复共轭和周期性:

(1)H(N)=H(0),G(N)=G(0),WN1=-1,得

地球物理数据处理基础

(2)由于u(k)(k=0,1,…,2N-1)是实序列,同样利用实序列其频谱的复共轭和周期性,用已求出的前N个频谱V(j)表示出后面的N-1个频谱V(N+j):

地球物理数据处理基础

由于0<2N-j<N,所以可从V(j)(j=0,1,…,N-1)中选出V(2N-j)(j=N+1,N+2,…,2 N-1),并直接取其共轭 即可得到V(N+1)~V(2 N-1),从而完成整个实序列频谱的计算。

总结以上叙述,一维实序列u(k)(k=0,1,…,2N-1)的FFT计算编程步骤如下:

(1)按偶、奇拆分实序列u(k),并构造复序列:

地球物理数据处理基础

(2)调用复序列的FFT计算y(k)的频谱Y(j)(j=0,1,…,N-1);

(3)用下式计算形成h(k),g(k)的频谱H(j)和G(j);

地球物理数据处理基础

(4)用下式换算实序列u(k)的频谱V(j)(j=0,1,…,2 N-1):

地球物理数据处理基础

[例3]求实序列样本u(k)={1,2,1,1,3,2,1,2}(k=0,1,…,7)的频谱。

解:按偶、奇拆分实序列u(k),按式(8-37)构造复序列c(j)(j=0,1,2,3),即

c(0)=1+2i; c(1)=1+i; c(2)=3+2i; c(3)=1+2i。

(1)调用复序列FFT求c(j)(j=0,1,2,3)的频谱Z(k)(k=0,1,2,3),得

Z(0)=6+7i; Z(1)=-3; Z(2)=2+i; Z(3)=-1。

地球物理数据处理基础

(3)运用公式(8-38)计算H(j),G(j):

地球物理数据处理基础

(4)根据式(8-39)求出u(k)(k=0,1,…,7)的8个频谱V(j)(j=0,1,…,7):

地球物理数据处理基础

地球物理数据处理基础

由上例可见,完成全部2 N个实序列频谱的计算只需做N次FFT计算,相比直接用复序列的FFT算法节省了约一半的计算量。

温馨提示:答案为网友推荐,仅供参考
相似回答