3. 傅里叶变换入门:从时域到频域,频谱的概念

好,咱们进入第三个话题。前面聊了采样和混叠,说白了都是在时域里打转。但信号处理真正的精髓,藏在频域里。今天我就带你推开这扇门——傅里叶变换。

你可能听过这个名字,觉得它高深莫测。其实没那么玄乎。傅里叶变换干的事,用一句话就能说清楚:把一个信号,从“随时间变化”的样子,变成“随频率变化”的样子

嗯,这里要注意:信号还是那个信号,只是换了个角度看它。

3.1 时域 vs 频域:两个不同的视角

咱们先打个比方。你听一首交响乐,耳朵听到的是各种乐器同时发出的声音,混在一起——这就是时域。但如果你看乐谱,每个音符写在不同的五线谱位置上,高音在上,低音在下——这就是频域。

时域信号,横轴是时间,纵轴是幅度。你看到的是波形上下跳动。
频域信号,横轴是频率,纵轴是幅度(或相位)。你看到的是不同频率成分有多强。

我刚开始学的时候,总觉得频域是凭空变出来的。后来在项目里调试一个音频降噪算法,才真正体会到:时域里看着乱糟糟的噪声,一转到频域,哪些是噪声、哪些是人声,清清楚楚。

核心思想:任何一个时域信号,都可以分解成若干个不同频率、不同幅度、不同相位的正弦波之和。

3.2 傅里叶变换的数学形式

公式不长,但第一次看可能会懵。别怕,咱们拆开看。

连续傅里叶变换(CTFT):
X(f) = ∫ x(t) · e^(-j2πft) dt

其中:
x(t) —— 时域信号
X(f) —— 频域信号(频谱)
f    —— 频率
j    —— 虚数单位

这个公式在干什么?说白了,就是拿一个已知频率的正弦波(e^(-j2πft)),去和原始信号做“匹配”。匹配得越好,那个频率上的幅度就越大。

我个人的习惯是:先别纠结虚数 j 和指数 e,你就把它当成一个“频率探测器”。

小技巧:如果你觉得连续傅里叶变换太抽象,可以先理解离散傅里叶变换(DFT)。实际工程中,我们处理的都是离散采样数据,DFT 才是真正用的工具。

3.3 频谱:频域里的“身份证”

频谱,就是信号在频域里的表示。它包含两部分:

  • 幅度谱:每个频率成分的强度(大小)
  • 相位谱:每个频率成分的起始位置(偏移)

大多数时候,我们更关心幅度谱。比如你看一个音频信号的频谱,低频能量高,说明声音低沉;高频能量高,说明声音尖锐。

我曾经在做一个振动监测项目时,设备老是莫名其妙报警。时域波形看不出问题,一转频谱,发现 50Hz 处有个尖峰——原来是工频干扰。加个陷波滤波器,问题就解决了。你看,频域视角多重要。

3.4 一个简单的例子:正弦波与方波

咱们用代码来感受一下。假设有一个 100Hz 的正弦波,它的频谱长什么样?

import numpy as np
import matplotlib.pyplot as plt

# 生成一个 100Hz 的正弦波
fs = 1000          # 采样率 1000Hz
t = np.arange(0, 1, 1/fs)
f0 = 100           # 信号频率 100Hz
x = np.sin(2 * np.pi * f0 * t)

# 做傅里叶变换
X = np.fft.fft(x)
freqs = np.fft.fftfreq(len(x), 1/fs)

# 只取正频率部分
half = len(X)//2
X_mag = np.abs(X[:half])
freqs = freqs[:half]

# 画图
plt.figure(figsize=(10, 4))
plt.subplot(1,2,1)
plt.plot(t[:200], x[:200])
plt.title('时域波形')
plt.xlabel('时间 (s)')
plt.ylabel('幅度')

plt.subplot(1,2,2)
plt.stem(freqs, X_mag)
plt.title('幅度谱')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅度')
plt.xlim(0, 200)
plt.show()

运行这段代码,你会看到:时域里是一条正弦波,频域里在 100Hz 处有一根竖线。干净利落。

那方波呢?方波在频域里就不是一根线了,而是一系列奇次谐波(100Hz、300Hz、500Hz...),幅度逐渐衰减。这就是为什么方波听起来比正弦波“刺耳”——因为高频成分多。

注意:实际工程中,我们处理的信号往往不是纯正弦波或方波。但无论多复杂的信号,傅里叶变换都能把它拆成一系列正弦波。这就是它的威力所在。

3.5 傅里叶变换与采样的关系

你可能会问:傅里叶变换和采样定理有什么关系?

关系大了。采样定理告诉我们:采样率必须大于信号最高频率的两倍。为什么?因为如果采样率不够,高频成分会“伪装”成低频成分,在频谱里出现虚假的峰值——这就是混叠。

换句话说,采样定理保证了频谱的正确性。没有它,你看到的频谱就是错的。

我记得有一次帮同事排查一个数据采集系统的问题。他采的信号是 1kHz 的正弦波,采样率设了 1.5kHz。结果频谱里除了 1kHz,还多了一个 500Hz 的峰。他以为是信号本身有问题。我说:你算算,1.5 - 1 = 0.5,这不就是混叠吗?把采样率提到 2.5kHz 以上,那个假峰就消失了。

一句话总结:傅里叶变换是连接时域和频域的桥梁。采样定理是保证这座桥不走样的护栏。

3.6 本章知识结构图

下面我用一张 SVG 图,把本章的核心逻辑串起来。你看完应该能有个整体印象。

傅里叶变换入门:核心知识结构 时域视角 横轴:时间 纵轴:幅度 看到波形随时间变化 傅里叶变换 (桥梁) 频域视角 横轴:频率 纵轴:幅度/相位 看到频率成分分布 频谱分析 识别信号中的频率成分 滤波设计 保留/抑制特定频率 采样定理 保证频谱不失真 时域 ↔ 频域:同一信号的两个面孔

这张图里,左边是时域,右边是频域,中间是傅里叶变换这座桥。下面三个应用——频谱分析、滤波设计、采样定理——都是这座桥上的“交通规则”。

好了,这一章就到这里。你只要记住:傅里叶变换不是魔法,它只是换了个角度看信号。下一章咱们会深入离散傅里叶变换,看看实际工程中怎么用代码算频谱。


公众号:蓝海资料掘金营,微信 deep3321