理解傅里叶变换

从数学原理到代码实现,深入浅出地理解傅里叶变换及其应用。

傅里叶变换是数学和工程领域最重要的工具之一。它能够将复杂的信号分解为简单的正弦波组合,有着广泛的应用。

数学基础

傅里叶级数

任何周期函数 f(t)f(t) 都可以表示为正弦和余弦函数的无穷级数:

f(t)=a02+n=1[ancos(nω0t)+bnsin(nω0t)]f(t) = \frac{a_0}{2} + \sum_{n=1}^{\infty} \left[ a_n \cos(n\omega_0 t) + b_n \sin(n\omega_0 t) \right]

其中系数的计算公式为:

an=2T0Tf(t)cos(nω0t)dta_n = \frac{2}{T} \int_0^T f(t) \cos(n\omega_0 t) \, dt bn=2T0Tf(t)sin(nω0t)dtb_n = \frac{2}{T} \int_0^T f(t) \sin(n\omega_0 t) \, dt

连续傅里叶变换

对于非周期信号,我们使用傅里叶变换:

F(ω)=f(t)eiωtdtF(\omega) = \int_{-\infty}^{\infty} f(t) e^{-i\omega t} \, dt

逆变换为:

f(t)=12πF(ω)eiωtdωf(t) = \frac{1}{2\pi} \int_{-\infty}^{\infty} F(\omega) e^{i\omega t} \, d\omega

欧拉公式

理解傅里叶变换的关键是欧拉公式:

eiθ=cosθ+isinθe^{i\theta} = \cos\theta + i\sin\theta

这个优美的公式将指数函数与三角函数联系起来,是复分析的基石。

离散傅里叶变换 (DFT)

在计算机中,我们使用离散傅里叶变换:

Xk=n=0N1xnei2πkn/NX_k = \sum_{n=0}^{N-1} x_n \cdot e^{-i 2\pi k n / N}

Python 实现

import numpy as np
def dft(x: np.ndarray) -> np.ndarray:
"""
计算离散傅里叶变换
"""
N = len(x)
n = np.arange(N)
k = n.reshape((N, 1))
# 计算 DFT 矩阵
W = np.exp(-2j * np.pi * k * n / N)
return np.dot(W, x)
def fft(x: np.ndarray) -> np.ndarray:
"""
快速傅里叶变换 (Cooley-Tukey 算法)
"""
N = len(x)
if N <= 1:
return x
# 分治:偶数项和奇数项
even = fft(x[0::2])
odd = fft(x[1::2])
# 旋转因子
T = np.exp(-2j * np.pi * np.arange(N) / N)
return np.concatenate([
even + T[:N//2] * odd,
even + T[N//2:] * odd
])

复杂度分析

  • DFT 的时间复杂度:O(N2)O(N^2)
  • FFT 的时间复杂度:O(NlogN)O(N \log N)

这个改进使得傅里叶变换在实际应用中变得可行。

应用示例

信号频谱分析

import numpy as np
import matplotlib.pyplot as plt
# 生成混合信号
fs = 1000 # 采样频率
t = np.arange(0, 1, 1/fs)
# 50Hz 和 120Hz 的混合信号
signal = np.sin(2 * np.pi * 50 * t) + 0.5 * np.sin(2 * np.pi * 120 * t)
# 计算 FFT
spectrum = np.fft.fft(signal)
frequencies = np.fft.fftfreq(len(signal), 1/fs)
# 取正频率部分
positive_freq_idx = frequencies >= 0

傅里叶变换的性质

傅里叶变换具有许多优美的性质:

性质时域频域
线性af(t)+bg(t)af(t) + bg(t)aF(ω)+bG(ω)aF(\omega) + bG(\omega)
时移f(tt0)f(t - t_0)F(ω)eiωt0F(\omega)e^{-i\omega t_0}
频移f(t)eiω0tf(t)e^{i\omega_0 t}F(ωω0)F(\omega - \omega_0)
卷积fgf * gFGF \cdot G

傅里叶变换将卷积转化为乘法,这是其最重要的性质之一,也是许多高效算法的基础。


傅里叶变换不仅是数学的杰作,更是连接物理世界与数字世界的桥梁。理解它,你将获得分析和处理信号的强大工具。

评论