1.4 时频分析
核心问题: 如何同时看到信号的时间和频率信息?
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
问题:时域和频域的权衡
傅里叶变换的局限
傅里叶变换告诉我们信号包含哪些频率,但不告诉我们这些频率什么时候出现。
例子:
信号1:10 Hz正弦波(全程)
信号2:前5秒是10 Hz,后5秒是20 Hz
频域看起来不同,但如果只看频谱,
我们看不出频率是什么时候变化的。不确定性原理
时间分辨率和频率分辨率不能同时很高。
- 窗口很小 → 时间分辨率高,频率分辨率低
- 窗口很大 → 频率分辨率高,时间分辨率低
这是信号处理的基本限制,不是算法问题。
短时傅里叶变换(STFT)
思想
把信号分成小段,对每段做傅里叶变换。
数学表达
其中:
:原始信号 :窗函数(决定每段的长度) :时间 :频率
步骤
- 选择窗函数(如Hann窗)
- 把信号分成重叠的小段
- 对每段做FFT
- 把结果排列成时频图
窗函数的选择
常见窗函数:
- Hann窗:平衡的时频分辨率
- Hamming窗:类似Hann,但边界不为0
- Blackman窗:更好的频率分辨率,但时间分辨率差
时频图(Spectrogram)
什么是时频图
一个二维图像,显示信号在不同时刻的频率成分。
- 横轴:时间
- 纵轴:频率
- 颜色深度:幅度大小
例子
下图展示了同一段音乐信号的三种视角:时域波形、频谱(FFT)和时频图(语谱图)。

图1.4a:同一段音乐信号的三种视角。上:时域波形,可以看到音符的幅度包络;中:频谱(FFT),可以看到各音符的基频和谐波,但无法区分哪个音符在哪个时刻出现;下:语谱图(STFT),同时展示了时间和频率信息,可以清晰看到每个音符的出现时刻和频率成分。
代码文件: code/ch01_dsp/time_freq_analysis.py
运行方式: python code/ch01_dsp/time_freq_analysis.py
优点
- 既保留时间信息,又保留频率信息
- 直观看出频率如何随时间变化
- 适合分析非平稳信号
小波变换(Wavelet Transform)
问题
STFT的窗大小固定,不适合分析多尺度信号。
例子:
- 低频成分变化慢,需要大窗口
- 高频成分变化快,需要小窗口
解决方案
小波变换用不同大小的窗分析不同频率。
数学表达
其中:
:尺度(对应频率) :位置(对应时间) :母小波
优点
- 自适应的时频分辨率
- 多尺度分析
- 适合分析突变和奇异点
实际应用
音乐分析
- 识别乐器:不同乐器的频率特征不同
- 节拍检测:看时频图中的能量峰值
- 音高估计:找主频率成分
医学诊断
- 脑电图(EEG):看脑波的频率变化
- 心电图(ECG):检测异常心律
- 肌电图(EMG):分析肌肉活动
地震学
- 地震波分析:不同类型地震波的频率不同
- 震源定位:用时频信息确定震源
语音处理
- 语音识别:提取语音的时频特征
- 说话人识别:不同人的频率特征不同
- 语音增强:去掉噪音的频率成分
本节小结
时频分析解决了傅里叶变换的局限:
- STFT:简单有效,固定时频分辨率
- 小波变换:自适应分辨率,适合多尺度分析
- 时频图:直观展示信号的时频特性
下图进一步对比了不同窗口大小的 STFT、小波变换,以及平稳信号与非平稳信号的时频图差异:

图1.4b:时频分析方法对比。上行:短窗 STFT(时间分辨率高)vs 长窗 STFT(频率分辨率高),体现不确定性原理;中行左:小波变换(CWT),低频用宽窗、高频用窄窗,自适应分辨率;中行右:时频分辨率权衡示意图,STFT 使用固定大小的时频格,小波使用自适应大小的时频格;下行:平稳信号(固定频率)vs 非平稳信号(频率随时间变化)的语谱图对比。
代码文件: code/ch01_dsp/time_freq_analysis.py
运行方式: python code/ch01_dsp/time_freq_analysis.py
与后续章节的联系
时频分析强调“局部窗口”和“多尺度”的权衡,这会在后续序列建模中继续出现:
局部窗口
- STFT 用窗口限制分析范围,后续局部注意力和滑动窗口模型也会使用类似的范围约束。
多尺度结构
- 小波变换用不同尺度分析信号,后续深度网络也会逐层形成从局部到全局的表示。
分辨率权衡
- 时间分辨率和频率分辨率不能同时无限提高,这对应到长上下文建模中的信息保留、计算成本和局部细节之间的取舍。
这里保留的是结构直觉,不把时频图和注意力图视为严格等价。
下一节: 1.5 随机信号理论
