为什么使用傅里叶变换(FFT变换的基本原理)

1.1的基本原则。FFT变换。

傅立叶变换是数字信号处理领域中一种非常重要的算法,它可以将信号从时域变换到频域。傅立叶原理表明,任何连续测量的时间序列或信号都可以表示为不同频率的正弦波信号的无限叠加。

根据原始信号的不同类型,傅立叶变换可以分为四类:

(1)非周期连续信号的傅立叶变换

(2)周期连续信号的傅立叶级数

(3)非周期离散信号的离散时域傅立叶变换

(4)周期性离散信号的离散傅里叶变换。

快速傅立叶变换(FFT)是计算机对离散傅立叶变换(DFT)的高效快速计算方法的总称,但它是基于复数的,复数DFT在极坐标中的写法如下:

在复傅里叶变换中,x[n]和X[k]都是复数组,包含正频率和负频率。k的范围是0到n-1,频率0到n/2为正,n/2到N-1为负。因为离散信号的频谱是周期性的,其周期等于采样频率。所以N/2到N-1和-N/2~0的频率是一样的。0点和N/2点的频率值是正负频率的界限。

我们设变换长度N=2L,根据N的奇偶性把x(n)分成两组x1(r)=x(2r)x2(r)=x(2r 1)

其中r=0,1,n/2-1,它被带入上述复DFT变换的公式,X[k]被获得:

公式中,X1(K)和X2(K)分别是x1(n)和x2(n)的N/2点DFT,所以它只能计算前半部分的值,使用后半部分。

可以得到后一半X(k)。

结合x(n)的N点DFT就是下面的蝶形运算,也是FFT的基本运算单元。

我们以8点钟的信号为例,按奇偶性分解三次。其FFT信号流程图如下:

2.抽样定理

采样定理表明,如果一个连续信号f(t)具有fm的最高截止频率,并且如果f(t)被一个时间间隔T1/(2*fm)的开关信号在时域采样,则f(t)可以被一个采样信号唯一地表示。即保证采样频率fs2*fm,并能从采样信号fs(t)中恢复出原始信号f(t)。

一般来说,允许的最低采样频率fs=2*fm称为“奈奎斯特频率”,允许的最大采样间隔Ts=1/(2*fm)称为“奈奎斯特间隔”。

3.FFT频谱分析

因为FFT是基于复数的,所以在计算FFT的时候会出现两种情况。输入数据是实数和复数。实际上,输入信号x(n)一般是实信号,即虚部为零。

(1)输入的数据是一个实数

我们使用matlab生成一个实正弦信号,如下所示:

Sin_data包含两个频率信号,f1=50Hz,f2=200Hz,fs=1024Hz,NFFT=1024。FFT后,结果是一个n点复数。每个点对应一个频率点,这个点的模就是这个频率值下的幅度特性。达到的频率分辨率为fd=fs/N=1024/1024=1Hz,某点N表示的频率为Fn=(n-1)*fs/N=n-1,各点的模为a的N/2倍,其中a为原始信号的峰值。FFT结果如下:

在谱图中,前N/2点有两个峰,后N/2点有两个峰,是对称的。如上所述,FFT包含周期为2*pi的特性,做FFT时得到[0,2*pi],其中包含一个完整的区间。正频率分布在[0,N/2]对应[0,2*pi],N/2 ^ 1是正负频率的分界点,负频率分布在[N/2 ^ 1,N-1]对应[pi,2*pi]。

做实FFT时,往往取0~N/2点的值作为实际频谱,正负频率的幅度因为幅度分量是一半,需要扩展2倍。

(2)输入数据是一个复数

我们用matlab生成一个与上述信号频率相同的复信号,观察其FFT后的频谱,如下图所示:

做复FFT时,只会有两个峰值,对应两个频率,每个点的模是A的n倍,也就是原始信号的峰值。实际上,当我们输入一个指数信号时,它包含两个信号,实部和虚部,即x(n)=cos(n) j*sin(n)。相当于两个谱叠加,cos(n)产生一个谱,j*sin(n)产生一个谱。这两个频谱相互叠加,但负频率相互抵消,正频率的振幅加倍。

(3)实际中,FFT得到的频率信息往往与信号的频率信息不同,会有误差,这取决于频谱的分辨率。例如,当fs=1000Hz时,fd=fs/N=1000/1024=0.97Hz,因为F1=50 Hz和F2=200 Hz不是fd的整数倍,所以不包括FFT频谱。

4.频率分解

频率分辨率,也称为分离两个相邻谱峰的能力,是指区分两个不同频率信号的最小间隔。我们用matlab产生一个余弦波信号(频率分别为1MHz和1.05MHz),幅度为1,采样频率fs=100MHz,采样点数N=1000。在这1000个数据点上通过FFT获得的频谱如下:

可以发现谱点稀疏,1MHz和1.05 MHz两个频率在1MHz附近无法分开,无法区分频率成分,一般是频率分辨率不够造成的。

频率分辨率大致有两种,一种叫波形分辨率,由原始数据的时间长度决定:

另一种称为视觉分辨率或FFT分辨率,由采样频率和参与FFT的数据点数量决定:

区分不同频率分量的目的是当数据点的数量不是基于2的整数幂时,对原始数据进行“零填充”。如果原始数据直接FFT,这两个频率的分辨率是相等的。

(1)零填充

现在对原始数据进行补零,在采样点的1000个原始数据上加零达到7000个数据点,然后对其进行FFT。结果如下图所示:

可以发现谱点密集了很多,但在1MHz附近两个频率成分无法分开。所以虽然我们补了很多零,但波形分辨率仍然是1/T1=100kHz,在1MHz到1.05MHz之间超过50kHz,时域补零相当于频域插值,也就是说补零操作增加了频域插值点数,使频域曲线看起来更平滑,增加了FFT的频率分辨率。

(2)增加数据长度。

在采样频率不变的情况下,如果要区分两个频率,就必须改变波形的分辨率,即延长原始数据的时间长度。现在我们取信号的7000个点,采样频率与原始信号相同,然后对齐做FFT,结果如下:

此时,波形分辨率为1/T2=14kHz,小于50KHz。我们可以看到有两个明显的峰值,但是我们会发现1MHz对应的幅度是1,和原始信号中这个频率成分的幅度是一致的,但是1.05MHz对应的幅度明显低于1,这就是所谓的频谱泄漏。在1MHz有一条谱线,在1.05MHz没有谱线,使得测量结果偏离实际值,同时将实际频点的能量分散到其他频点。

(3)为了解决这个问题,我们可以尝试让谱线同时通过1MHz和1.05MHz两个频率点,求它们的最大公约数50kHz,通过FFT分辨率计算FFT数据点,但是我们的数据点已经达到了7000个,我们把点数扩大了4倍,达到了8000个,也就是我们补了1000个零。此时FFT的分辨率为12.5kHz,因此谱线同时通过1MHz和1.05MHz两个频率点。FFT结果如下:

从上图可以看出,两个频点的幅度与原始信号一致,这也是补零操作带来的影响。

hfy