从傅里叶级数到快速傅里叶变换

字数 1879阅读 97

在计算机上编程做信号处理时,我们通常用的是FFT, 但是开始学信号处理时,一般是从FS开始的。所以这里整理一下从FS到FFT“演变”的过程。以下是傅里叶“家族”的一些名称:

  • FS(Fourier Series) 连续时间周期信号的傅里叶级数
  • FT(Fourier Transform) 连续时间非周期信号的傅里叶变换
  • DFS(Discrete Fourier Series) 离散傅里叶级数
  • DTFT(Discrete Time Fourier Transform) 离散时间傅里叶变换
  • DFT(Discrete Fourier Transform) 离散傅里叶变换
  • FFT(Fast Fourier Transform) 快速傅里叶变换

FS

首先,要从FS说起的。假设有一个正弦信号sin(w0t),那么在频域它是什么呢?就是在w0处有一条竖线!如果有一个信号是sin(w0t)+sin(w1t),那么在频域,它是两条竖线(w0处和w1处)。如果是更为复杂的周期信号,那么相应得,在频域有好多条竖线!(好像说了一堆废话)。不过,我们可以通过这些竖线,知道这个复杂的周期信号的成分,也可以通过抹掉一些频率的方法改变周期信号的成分(滤波)。总之,FS给我们提供了一种方法,使我们可以用来分析连续时间周期信号的成分。需要提一下,在时间上连续的周期信号,在频域是离散的!

FT

但是,在实际中,大部分信号是非周期的,于是就FT就到来了。如何将周期信号推广到非周期信号呢?高人们是这么做的:先假设这个信号是周期的,周期为T,于是可以得到该周期信号的FS, 然后领T->无穷大,这时,相应的FS就变成了FT。具体在频域上的反映是,原本有间隔的竖条在T->无穷大时连在了一起,在频域变成了连续的!所以在时间上的非周期信号,在频域上是连续的!

如果我们对一个周期信号x(t)抽取它的一个周期xT(t)做FT, 那么频域是连续的,而该原始信号x(t)在频域(FS)的那些竖条相当于是对FT的采样. x(t)的周期越小,竖条的间隔越宽,x(t)的周期越大,竖条的间隔越窄,如果x(t)的周期是无穷大,那么这时竖条的间隔就趋于0了,也就是频域的波形连在了一起,FS变成了FT。

什么?为什么x(t)周期越小,竖条的间隔越宽?因为竖条的间隔其实就是周期信号的基频,周期T越小,基频越大,所以竖条的间隔就越宽。

DFS

好了,连续时间的说完了,但是对我们来说并没有什么卵用,因为我们计算机中的数据是离散的x[n],根本不是x(t)。所以,接下来说的就是离散时间的傅里叶级数DFS。

正如连续周期信号x(t)可以用一系列正弦波叠加来表示(这里只考虑收敛的情况),离散周期信号x[n]也可以用一系列“正弦序列”叠加来表示。那么在频域,这一系列“正弦序列”就对应了一堆竖线。每个竖线的高低就反应了原始序列x[n]中该频率成分的强弱。这就是DFS,时域的信号x[n],在频域是一堆竖线,如果我们想去掉一个频率成分,在频域把这条竖线抹掉就好了,然后反变换回去。这时的时域序列y[n]就没有该频率的成分了,过程如下:

时域x[n]-->计算DFS频域系数-->频域X[w]-->去掉某些频率成分(让对应系数为0)-->频域Y[w]-->从频域系数回到时域-->时域y[n]

很好!但是,现实很残酷,这是不可能的!

因为,既然x[n]是周期的,那么在时域就是无限的,从古至今一直存在的,真的有这样的信号吗?我不知道。当然,你可以造一个N点的信号x1[n],并且想当然认为这个信号是周期的,(N为周期,也就是x[n]=x1[n+kN]),这时,你认为你造的信号x1[n]就是周期信号x[n]的一个周期。因为DFS计算过程只需要一个周期,所以你可以按上述处理过程从x1[n]得到y1[n],也就是在你的想象中从x[n]的到了y[n]。当然,这样做在实际中是完全没用的,因为实际中我们处理的信号肯定是非周期的。于是,DTFT出场了。

DTFT

因为我们实际中处理的信号是非周期的,就需要得到这种非周期的离散信号的频域表示,然后进一步处理。正如连续时间信号由周期变为非周期的处理一样,我们可以先把非周期离散时间序列x[n]当成是周期为N的信号x'[n]的一个周期,然后领N->无穷大。这样,就得到了非周期离散信号的频域表示,这就是DTFT。

DFT

但是,很不幸的是,正如连续时间非周期信号一样,它在频域上是连续的!我们在计算机上怎么表示这个连续的频域?回想一下,我们的离散时间信号是哪里来的?好像也是从连续时间信号来的。怎么来的呢?采样!对了,我们可以对频域也进行采样!这样,连续的频谱被我们采样成了离散频点的频谱。时域的采样间隔相对于采样周期,由奈奎斯特定律给出,那么频域的采样间隔该选多少呢?高人们说了,为了恢复N点的离散时间间隔,频率的采样点在一个周期内(离散时间信号的频域是周期的)也应该是N!那么采样间隔就是2π/N!这样,我们就可以由N点的输入序列x[n]得到它的频域表示: N点的X[k], 其中k=0,1,...,N-1.分别对应频间隔为2π/N的N个频率,这样就可以在计算机中处理了。这就是DFT。

FFT

FFT是为了速度而生的,正如它的名字一样。为了计算更快,高人们对DFT的计算方法进行了改进,就是FFT。我们在计算机世界使用的也是FFT。

所以FS到FFT的演变,其实就是理论分析到实际应用的演变。

正负变换的公式

FS



FT



DFS



DTFT



DFT



推荐阅读更多精彩内容