傅里叶变换与应用
课程目标
- 理解傅里叶变换的基本概念:将非周期函数从时间域转化到频率域。
- 掌握傅里叶变换的公式和计算方法。
- 了解傅里叶变换在信号处理、图像分析等实际应用中的作用。
- 通过实例和 Python 可视化傅里叶变换的原理及应用。
一、傅里叶变换的基本概念
1. 从傅里叶级数到傅里叶变换
- 傅里叶级数:用于表示周期函数,将函数分解成一组离散的正弦波和余弦波。
- 傅里叶变换:扩展到非周期函数,将函数从时间域转换到频率域,得到连续的频率分布。
2. 傅里叶变换的公式
-
傅里叶变换:
F ( ω ) = ∫ − ∞ ∞ f ( t ) e − i ω t d t F(\omega) = \int_{-\infty}^\infty f(t) e^{-i\omega t} dt F(ω)=∫−∞∞f(t)e−iωtdt- F ( ω ) F(\omega) F(ω):频率域函数,表示频率分量。
- f ( t ) f(t) f(t):时间域函数,表示信号随时间的变化。
- ω \omega ω:频率角速度(与频率相关)。
-
逆傅里叶变换:
f ( t ) = 1 2 π ∫ − ∞ ∞ F ( ω ) e i ω t d ω f(t) = \frac{1}{2\pi} \int_{-\infty}^\infty F(\omega) e^{i\omega t} d\omega f(t)=2π1∫−∞∞F(ω)eiωtdω
它将频率域信号还原到时间域。
3. 傅里叶变换的作用
- 时间域 vs 频率域:
- 时间域:信号在时间上的变化。
- 频率域:信号中包含的不同频率的成分。
- 傅里叶变换的核心作用是帮助我们分析信号的“频率成分”。
二、傅里叶变换的性质
-
线性性:
F ( a f ( t ) + b g ( t ) ) = a F 1 ( ω ) + b F 2 ( ω ) \mathcal{F}(af(t) + bg(t)) = aF_1(\omega) + bF_2(\omega) F(af(t)+bg(t))=aF1(ω)+bF2(ω) -
时移性:
F ( f ( t − t 0 ) ) = e − i ω t 0 F ( ω ) \mathcal{F}(f(t - t_0)) = e^{-i\omega t_0} F(\omega) F(f(t−t0))=e−iωt0F(ω) -
卷积定理:
F ( f ( t ) ∗ g ( t ) ) = F ( ω ) ⋅ G ( ω ) \mathcal{F}(f(t) * g(t)) = F(\omega) \cdot G(\omega) F(f(t)∗g(t))=F(ω)⋅G(ω)
卷积在时间域变成乘积在频率域。 -
对称性:
若 f ( t ) f(t) f(t) 是实函数,则 F ( − ω ) = F ∗ ( ω ) F(-\omega) = F^*(\omega) F(−ω)=F∗(ω)。
三、傅里叶变换的应用
1. 信号处理
- 音频信号分析:分解音乐信号,提取每种音调的频率。
- 滤波:通过频率域操作去除噪声信号。
案例 1:正弦波的傅里叶变换
正弦波
f
(
t
)
=
sin
(
2
π
f
0
t
)
f(t) = \sin(2\pi f_0 t)
f(t)=sin(2πf0t) 的傅里叶变换是:
F
(
ω
)
=
π
i
[
δ
(
ω
−
2
π
f
0
)
−
δ
(
ω
+
2
π
f
0
)
]
F(\omega) = \pi i [\delta(\omega - 2\pi f_0) - \delta(\omega + 2\pi f_0)]
F(ω)=πi[δ(ω−2πf0)−δ(ω+2πf0)]
说明在频率域中,正弦波的频率分布集中在特定频率
f
0
f_0
f0 上。
2. 图像分析
- 边缘检测:通过傅里叶变换分析图像中的高频成分。
- 图像压缩:提取图像的主要频率分量,去除冗余信息。
案例 2:图像傅里叶变换
对一个灰度图像进行傅里叶变换,分析它的频率成分。
四、课堂活动
1. 信号傅里叶变换
分析一个音频信号的频率成分,理解时域和频域的关系。
Python 示例:简单信号的傅里叶变换
以下代码展示如何对正弦波和叠加信号进行傅里叶变换,并绘制频域图:
import numpy as np
import matplotlib.pyplot as plt
# 定义时间轴
t = np.linspace(0, 1, 1000, endpoint=False)
# 定义信号(两个正弦波的叠加)
f1, f2 = 5, 50 # 两个频率
signal = np.sin(2 * np.pi * f1 * t) + 0.5 * np.sin(2 * np.pi * f2 * t)
# 计算傅里叶变换
fft_result = np.fft.fft(signal)
frequencies = np.fft.fftfreq(len(t), d=(t[1] - t[0]))
# 绘制时域和频域图像
plt.figure(figsize=(12, 6))
# 时域信号
plt.subplot(1, 2, 1)
plt.plot(t, signal)
plt.title("Time Domain Signal")
plt.xlabel("Time (s)")
plt.ylabel("Amplitude")
# 频域信号
plt.subplot(1, 2, 2)
plt.plot(frequencies[:len(frequencies)//2], np.abs(fft_result)[:len(frequencies)//2])
plt.title("Frequency Domain (Fourier Transform)")
plt.xlabel("Frequency (Hz)")
plt.ylabel("Magnitude")
plt.tight_layout()
plt.show()
结果解释:
- 左图(时域):显示叠加的正弦波信号。
- 右图(频域):显示信号的频率成分,峰值对应 f 1 = 5 f_1=5 f1=5 Hz 和 f 2 = 50 f_2=50 f2=50 Hz。
2. 图像的傅里叶变换
使用 Python 对图像进行傅里叶变换,提取其频率分量。
from skimage import data, color
from skimage.transform import resize
import numpy as np
import matplotlib.pyplot as plt
# 加载示例图像
image = color.rgb2gray(data.camera())
image = resize(image, (256, 256)) # 调整图像大小
# 傅里叶变换
fft_image = np.fft.fft2(image)
fft_image_shifted = np.fft.fftshift(fft_image) # 将零频率移动到中心
# 显示原图和频率图
plt.figure(figsize=(12, 6))
# 原图像
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title("Original Image")
plt.axis("off")
# 傅里叶频谱
plt.subplot(1, 2, 2)
plt.imshow(np.log(1 + np.abs(fft_image_shifted)), cmap='gray')
plt.title("Fourier Transform (Frequency Spectrum)")
plt.axis("off")
plt.tight_layout()
plt.show()
结果解释:
- 左图(原图):显示原始灰度图像。
- 右图(频域):亮点表示图像中主要的频率分量(边缘和纹理特征)。
五、总结
- 傅里叶变换的核心:将时间域或空间域信号转换为频率域,提取信号的频率成分。
- 应用领域:
- 在信号处理中分析声音或数据。
- 在图像处理中提取纹理、压缩或去噪。
- 课堂活动建议:
- 学生可以对不同信号或图像应用傅里叶变换,观察频率域分布。
- 探讨如何通过频域操作去除噪声或增强信号。