本文链接:个人站 | 简书 | CSDN
版权声明:除特别声明外,本博客文章均采用 BY-NC-SA 许可协议。转载请注明出处。
1. 傅里叶级数 Fourier Series (FS)
傅里叶级数得名于法国数学家约瑟夫·傅里叶,他提出任何函数都可以展开为三角级数。
考虑一个在区间 上可积的函数 ,其傅里叶级数为
其中
由欧拉公式 得
代入(1)可得
令
则可以得到傅里叶级数的复数形式
其中
2. 傅里叶变换 Fourier Transform (FT)
傅里叶变换可以看作傅里叶级数的连续形式。
首先考虑定义在 上的函数的傅里叶级数展开:
其中
令
记
则
当 时,,, (14) 中的求和变为积分
相应地,(12) 变为
(16) 称为傅里叶变换,记作 ;(15) 称为傅里叶变换的逆变换,记作 。在信号分析中, 称为信号的时域表示, 称为信号的频域表示。
需要明确的是,不管是用时域还是用频域来表示一个信号,它们代表的都是同一个信号。可以从线性空间的角度理解这一点。同一个信号在不同的表象(或者说基向量)下具有不同的坐标。同一个向量在不同表象下的坐标可以通过一个线性变换联系起来。如果是有限维的空间,这个线性变换可以表示为一个矩阵。而傅里叶变换则是无限维空间不同表象之间的一种变换。举例来说,在量子力学中,一个波函数的坐标表象到动量表象间的变换就是一个傅里叶变换。
也可以将角频率 替换为自然频率 ,有 ,则
3. 离散时间傅里叶变换 Discrete-time Fourier Transform (DTFT)
一般情况下,我们处理的信号都是离散的。取 在时间上的离散采样
是采样的时间间隔。傅里叶变换只能作用在连续函数上,为此我们引入
其中
为 Dirac 函数。 称为 Dirac 梳子,亦称 Shah 分布,是一个采样函数,常用在数字信号处理和离散时间信号分析中。
对 作傅里叶变换
这里利用了 Dirac 函数的性质 。(22) 即为离散时间傅里叶变换。
下面简单介绍一下采样定理。若原信号 不包含高于 的频率,即 ,则只要采样频率 ,时域采样就能完全重建原信号。
将 在 上展开为傅里叶级数
其中
注意到 时 ,而 ,故 时 ,因此 (24) 可改写为
代入 (23),得
这里 。(26) 说明原信号的傅里叶变换可以由采样信号确定,进而可以利用傅里叶逆变换重建原信号。
此外,不难发现
是一个周期为 的周期函数。离散傅里叶变换可以看作原信号连续傅里叶变换的周期延拓,时域的离散化造成了频域的周期化。
4. 离散傅里叶变换 Discrete Fourier Transform (DFT)
离散时间傅里叶变换在频域上仍然是连续的。如果把频域也离散化,就得到了离散傅里叶变换。
也可以写成矩阵形式
其中 。
离散傅里叶变换的逆变换为
5. 快速傅里叶变换 Fast Fourier Transform (FFT)
直接根据定义计算离散傅里叶变换的复杂度是 。快速傅里叶变换是快速计算离散傅里叶变换及其逆变换的一类数值算法。FFT 通过把 DFT 矩阵分解为稀疏矩阵之积,能够将复杂度降低到 。
在 Python 中可以利用 scipy.fftpack
进行快速傅里叶变换。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.fftpack import fft, ifft
x = np.linspace(0, 2*np.pi, 200) # 采样频率为 200Hz
y = np.cos(5*x) + 0.5*np.sin(25*x) + 0.3*np.cos(75*x) # 根据采样定理,信号中不能包含超过 100Hz 的频率成分
plt.figure(figsize=(10,12))
ax1 = plt.subplot(311)
ax1.plot(x, y, 'r')
ax1.set_title('original signal in time domain')
Y = fft(y) # 快速傅里叶变换,得到频域
ax2 = plt.subplot(323)
ax2.plot(range(200), abs(Y))
ax2.set_title('original signal in frequency domain')
Y[10:-9] = 0 # 滤波
ax3 = plt.subplot(324)
ax3.plot(range(200), abs(Y))
ax3.set_title('filtered signal in frequency domain')
filtered = ifft(Y).real # 逆变换,得到滤波后的时域信号
ax4 = plt.subplot(313)
ax4.plot(x, filtered, 'g')
ax4.set_title('filtered signal in time domain')
参考文献
- 小波与傅里叶分析基础(第二版), 电子工业出版社,2017.6
- Fourier transform - Wikipeida https://en.wikipedia.org/wiki/Fourier_transform
- Discrete-time Fourier transform - Wikipedia https://en.wikipedia.org/wiki/Discrete-time_Fourier_transform
- Discrete Fourier transform - Wikipedia https://en.wikipedia.org/wiki/Discrete_Fourier_transform
- Discrete Fourier transforms (scipy.fftpack) https://docs.scipy.org/doc/scipy/reference/fftpack.html