DFT与FFT

一、离散傅立叶变换
  
离散傅里叶变换(Discrete Fourier Transform)一词是为适应计算机作傅里叶变换运算而引出的一个
专用名词,这是因为,对信号X(L)进行博里叶变换(FT)或逆傅里叶变换(IFT)运算时,无论在时域或在
频域都需要进行包括(-∞,+∞)区间的积分运算,若在计算机上实现这一运算,则必须做到:(l)把连
续信号(包括时域、频域)改造为离散数据;(2)把计算范围收缩到一个有限区间;(3)实现正、逆博里
叶变换运算.在这种条件下所构成的变换对称为离散傅里叶变换对.其特点是,在时域和频域中都只取有限
个离散数据,这些数据分别构成周期性的离散时间函数和频率函数.
 
  连续时间信号x(t)经过加窗截断后在区间[0,T]上经过A/D转换离散化,采样间隔Δt按采样频率确定为:
 

Δt=1/fs
    
在时间点{0,Δt,2Δt,3Δt,....}进行取样,得到长度为NN=T/Δt的时间序列{x(n)}
  
  经加窗和周期延拓处理后的信号是一个周期信号,其傅立叶积分式为:
 
6.5 <wbr>DFT与FFT
 
A/D采样离散化后的计算公式 
6.5 <wbr>DFT与FFTΔt
 
周期信号的频谱是线谱和离散谱,X(f)只能离散取值,频率取样间隔为:
 
Δf=fs/N
 
频率取样点为{0,Δf,2Δf,3Δf,....},有:
 
6.5 <wbr>DFT与FFTΔt  k=0,1,2,...N-1
 
这就是离散傅立叶变换计算公式。为便于计算,写为三角函数形式:
  6.5 <wbr>DFT与FFT
k=0,1,2......   
 
  计算出实部HR(kΔf)和虚部HR(kΔf)后,可按下式转换为信号在kΔf频率点的幅值与相位:
 
 |X(kΔf)|=Sqrt(XR2(kΔf)+XI2(kΔf))
Q(kΔf)=arctg(XI(kΔf)/XR(kΔf))
 
如不考虑计算效率,用计算机编程是很容易实现的。例如,用Signal VBScript编程计算4Δf频率点的幅值与相位的程序代码为:
pi=3.1415926
k=4
DF=Fs/N
XR=0
XI=0
For i=0 To N-1
  XR=XR+x(i)*cos(2*pi*k*i/N)
  XI=XI+x(i)*sin(2*pi*k*i/N)
Next
XR=(T/N)*XR
XI=(T/N)*XI
A=sqrt(XR*XR+XI*XI)
Q=atn(XI/XR)
将k作为变量,就可以计算出信号在整个频带上的频谱。

 
二、 快速傅立叶变换(FFT)
  快速傅立叶变换(FFT)是实施离散傅立叶变换的一种及其迅速而有效的算法。FFT算法通过仔细选择和重新排列中间结果,在速度上较之离散傅立叶变换有明显的优点。忽略数学计算中精度的影响时,无论采用的是FFT还是DFT,结果都一样。
 
  如果直接应用式计算离散傅立叶变换,将花费很多时间,因此很长的一段时间里DFT的使用受到了限制。直到1965年美国的J.W.CooleyJ.W.Turkey提出了一种离散的傅立叶变换的快速算法,即FFT(Fast Fourier Transformation),才使得DFT的计算工作量大为减少。
 
  为简化表达,且不失一般性,将离散傅立叶变换式简写成

6.5 <wbr>DFT与FFT

由于6.5 <wbr>DFT与FFT,所以

X(k+N)=X(k)

表明X(k)是以N为周期的序列和频谱
 
  若令旋转因子6.5 <wbr>DFT与FFT,则上式又可写成

6.5 <wbr>DFT与FFT

对计算的各频率点进行展开,有

6.5 <wbr>DFT与FFT

用矩阵表示可写成

6.5 <wbr>DFT与FFT

6.5 <wbr>DFT与FFT

由于6.5 <wbr>DFT与FFT是复数,x(n)也可能是复数形式,这样,要完成上面矩阵运算共需N2次复数乘法和N(N-1)复数加法。可见,计算量与N2成正比,随着的增加,总运算次数将会急剧增加。
 
N=2B,于是可将[W]分解成B个矩阵的连乘,即
 

6.5 <wbr>DFT与FFT
 
其中每个矩阵的各行元素都包含有两个非零项。例如,对于N=64的情况有:
 
6.5 <wbr>DFT与FFT
 
注意这里利用了关系,6.5 <wbr>DFT与FFT,因此W4=W0W6=W2,将[W]分解成

6.5 <wbr>DFT与FFT

由于式在分解时充分利用了旋转因子6.5 <wbr>DFT与FFT具有周期性及合理分解的特点,从而使总的计算次数从N2量级减少到Nlog2N量级,极大地提高了运算速度,故形成了快速傅立叶变换。

  最常见的FFT算法要求N2的幂次。假定信号分析仪中的采样点数为1024点,DFT要求一百万次以上的计算工作量,而FFT则只要求10240次计算。显然,FFT可大大节约计算量,故在信号处理中中广泛采用FFT算法。目前FFT算法已有专用硬件芯片和软件模块,使用中直接选用就可以了。
 
 
三、FFT算法的应用
1. 信号的谐波分析
    信号的频谱X(f)代表了信号在不同频率分量处信号成分的大小,在许多场合,它能够提供比信号波形更直观,丰富的信息。例如,有一受噪声干扰的多频率成分周期信号,如图,从信号波形上很难看出其特征,但从信号的功率谱上却可以判断出信号中有四个很明显的周期分量。
 

6.5 <wbr>DFT与FFT

用FFT计算信号频谱的过程是,将采样信号
 

x(k), k=0,1,2,3,...N-1
 
经FFT变换转换到频域:
 
X(k), k=0,1,2,3,...N-1
 
X(k)为复数,可按下式转换为信号的幅值与相位:
 
|X(k)|=Sqrt(XR2(k)+XI2(k))
Q(k)=arctg(XI(k)/XR(k))
得到在频率点KΔf的信号频率成分值。
 
2.快速卷积运算
    用FFT算法可以实现离散卷积运算过程.离散卷积与连续时间系统的卷积具有相同的含义,当描述离散时间系统的输出、输入关系时,输出y(n)是输入x(n)与系统单位样值响应h(n)的卷积,即
6.5 <wbr>DFT与FFT
6.5 <wbr>DFT与FFT
其运算过程包括了反折、平移、乘积、取和四个步骤。可见,卷积运算过程也是很繁琐的.当序列x(n)h(n)的样本点数分别为N1、N2时,其乘法的运算次数为N1×N2。显然,当二个样本的采样点数相同时,与DFT一样,其乘法的运算次数为N2次。
 
  同样,依据连续傅里叶交换的时域卷积定理有,两个周期为N的时域采样函数,它们的卷积的离散傅里叶变换等于它们的离散傅里叶交换的乘积,即
6.5 <wbr>DFT与FFT
  运用这一定理,可以对两个时城周期序列x(n)h(n)分别计算离散傅里叶变换,再将结果相乘,然后计算乘积的离散傅里叶逆变换,即可得到两个时城周期序列的卷积。这一定理为用快速博里叶变换计算时域卷积提供了依据.

    对于采样点数相同(设为N)的二个样本,用FFT的方法作卷积,其乘法的运算次数为N(1+log2N)次。随着N值增大,此数字比N2显著减少,因此,卷积运算可以用FFT方法实现.
 
  需要注意的是,实现快速卷积算法中,由于利用了DFT分析,即时域和频域都是周期性离散数据,当对它们作周期卷积(或称圆卷积)运算时,将出现一种周期数据之间的迭代求和的现象,这给计算结果带来一种所谓环绕误差.避免环绕误差的方法是对x(n)h(n)分别在尾部填补零值点,即使其周期加倍.如果x(n)h(n)长度相等,则都加长N点。

快速卷积过程可按如下步骤进行:
   (a)用补零的方法修正x(n)h(n),以避免环绕误差的出现;
   (b)利用FFT算法计算两个修正后的函数的DFT,得到X(k)H(k)
   (c)将X(k)H(k)相乘,得到Y(k)= X(k)H(k)
   (d)利用FFT算法,计算出Y(k)的IDFT,即:h(n) = IDFT[Y(k)]
此即为所求的 x(n)h(n) 的卷积。

  与快速卷积计算的方法相类似,也可以利用FFT作快速的相关运算。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值