Fourier Series, Fourier Transform, DFT, FFT
Table of Contents
1. 傅里叶级数和变换简介
法国数字家傅里叶(Jean-Baptiste Joseph Fourier)被世人铭记的最大贡献记载在他于 1807 年发表的传记中和 1822 年出版“Théorie analytique de la chaleur(热分析理论)”的一书中。傅里叶在这个领域的贡献是, 他指出任何“周期函数”都可以表示为不同频率的正弦和(或)余弦之和的形式,每个正弦项和(或)余弦项乘以不同的系数。现在,该和称为傅里叶级数(Fourier series)。 这个概念出现后,在当时遭到了怀疑,因为它不直观。
甚至,非周期函数(但该曲线下的面积是有限的)也可以用“正弦和(或)余弦乘以加权函数”的积分来表示。这种情况下的公式就是傅里叶变换(Fourier transform),其作用在多数理论和应用学科中甚至远大于傅里叶级数。
参考:信号与系统(第二版,郑君里)
1.1. 数学基础知识回顾——复数
后文会用到复数,这里回顾一下关于复数的基本知识。
复数
一个复数
有时,在极坐标下表示复数很有用:
利用欧拉公式(Euler’s formula):
例如,复数
前面的公式还可以用于复函数。例如,变量
2. 傅里叶级数
2.1. 傅里叶级数基本定义
法国数字家傅里叶发现, 具有周期
其中,各个系数可按以下各式计算。
直流分量:
余弦分量的幅度:
正弦分量的幅度:
为方便起见,通常积分区间
说明:并非任意周期信号都能进行傅里叶级数展开,需要满足一定的条件才能进行傅里叶级数展开。不过,在实践中,这些条件一般都会满足,这点不介绍这些条件。
2.1.1. 实例:求周期锯齿脉冲信号的傅里叶级数展开
求周期函数
Figure 1: Sawtooth wave,
函数
把上面系数代入到傅里叶级数展开式中,可得:
由上式知,傅里叶级数展开后,要无限多项才能完全逼近原函数。实际应用中,经常采用有限项级数来代替无限项级数。如,取前 1 到 5 个正弦项,如图 2 所示。
Figure 2: 取前 1 到 5 个正弦项来近似 Sawtooth wave
2.1.1.1. 函数对称性与傅里叶系数的关系
通过前面例子,可知周期锯齿脉冲信号(如图 1 所示,它是奇函数)仅含正弦分量。这不是巧合,利用“正弦函数为奇函数,余弦函数为偶函数”以及奇偶函数的性质,我们容易推导出更一般的结论:
奇函数的傅里叶级数展开后,直流分量和余弦分量为零,只含正弦分量。
偶函数的傅里叶级数展开后,正弦分量为零,只含直流分量和余弦分量。
2.2. 傅里叶级数的另一种常见三角形式(幅度谱,相位谱)
如果将前面介绍的傅里叶级数中“同频率项合并”,傅里叶级数还可以写为另一种形式:
或者写为:
各个系数为(
通常把频率为
显然,各分量幅度(
我们把幅度
Figure 3: 某周期函数的傅里叶“幅度谱”和“相位谱”
不过,很多时候,相位谱不是很重要,常常直接忽略它。
2.3. 傅里叶级数的指数形式
设周期函数
由欧拉公式可知
令
令
一般我们把
其中,
通常积分区间
显然,如果给出
注:
傅里叶级数的指数形式中系数
2.3.1. 复数频谱(复数幅度谱,复数相位谱)
我们可以画出傅里叶级数指数形式表示的信号频谱。因为
Figure 4: 周期函数的复数频谱示例
由于,
需要说明的是, 在复数频谱中出现的负频率是由于将
在
2.4. 实例:求周期矩形脉冲信号的傅里叶频谱
设周期矩形脉冲信号(又称为方波信号)
Figure 5: 周期矩形脉冲信号
直流分量
从而可求得
其指数形式傅里叶级数幅度和相位如图 6 所示。
Figure 6: 方波信号指数形式傅里叶级数幅度谱和相位谱
由于,
Figure 7: 方波信号指数形式傅里叶级数幅度谱和相位谱(合画图)
3. 傅里叶变换
前面介绍了连续“周期信号”的傅里叶级数,并得到了它的离散频谱。对于连续“非周期信号”,没有傅里叶级数,但可以推导出“傅里叶变换”。
由傅里叶级数的定义可知,对于周期为
Figure 8: 当周期信号的周期
3.1. 傅里叶变换定义
由前面的分析知,通过极限的方法,我们可以从周期信号的傅里叶级数导出非周期信号频谱的表示式,这称为傅里叶变换(Fourier transform)。在这里,不严格推导,直接给出非周期信号傅里叶变换的公式。
非周期信号
对应的傅里叶逆变换为:
式中,
其中
3.2. 实例:求单边指数信号的傅里叶变换
3.3. 卷积定理(Convolution theorem)
对于任意两个信号
时域卷积定理:
设函数
证明如下:
它说明: 时域中两信号的卷积等效于在频域中频谱相乘。
频域卷积定理:
频域卷积定理的证明过程和时域卷积定理的证明过程类似,这里不再重复。
4. 离散傅里叶变换
设有限长序列
离散傅里叶变换为:
离散傅里叶逆变换为:
其中,
4.1. 矩阵形式的离散傅里叶变换
前面介绍的离散傅里叶变换及逆变换的公式可以写为矩阵形式。
离散傅里叶变换的矩阵形式:
离散傅里叶逆变换的矩阵形式:
上面两个公式简写为:
和
此处,
4.2. 实例:求有限序列的离散傅里叶变换
例:求
由
离散傅里叶逆变换为:
显然,通过离散傅里叶逆变换可求得原始信号。
Figure 10: 离散傅里叶变换实例
说明:在这个例子中,离散傅里叶变换得到的序列恰好都为实数。不过,离散傅里叶变换得到的序列一般为复数,比如
4.3. 快速傅里叶变换(FFT)
快速傅里叶变换(Fast Fourier transform, FFT)是一种计算离散傅里叶变换的快速算法。
4.3.1. DFT 的计算量
我们先来了解一下 DFT 的计算量。
由 DFT 定义知,将
例如,当
显然,求每个
随着
4.3.2. Cooley–Tukey FFT algorithm
从 FFT 算法诞生至今,有很多改进和派生的离散傅里叶变换快速算法。最基本的 FFT 是库利-图基 FFT 算法(Cooley–Tukey FFT algorithm)。
库利-图基 FFT 算法描述(这里不证明它的正确性,直接给出结论)如下:
设序列
记
这样,只要求得 0 到
Figure 11: FFT 算法,蝶形信号流图(支路上没有系数时表示该支路传输系数为 1)
参考:
《信号与系统(郑君里,第二版,下册)》9.6 节 快速傅里叶变换
《数字信号处理教程(第三版,程佩青)》第四章 快速傅里叶变换
4.3.3. 实例:用 FFT 算法计算 DFT
4.3.4. FFT 的计算量
FFT 把一个
显然,对于分解的两个
直接计算 DFT 与 FFT 算法的计算量(只考虑了复数乘法)与序列点数
Figure 13: 直接计算 DFT 与 FFT 算法的计算量(只考虑了复数乘法)的比较
4.3.5. FFT 逆变换(快速计算离散傅里叶逆变换)
如何快速地求解离散傅里叶逆变换(IDFT)呢?
我们观察一下离散傅里叶逆变换(IDFT)的公式:
与离散傅里叶变换(DFT)公式:
比较两个公式可知,只要把 DFT 运算中的每一个系数
下面讨论一种完全不用改变 FFT 的程序就可以快速计算 IDFT 的方法。对 IDFT 公式取共轭:
从而:
这说明, 只要先将