3. 频域分析基础:傅里叶变换入门、频谱分析仪使用、功率谱密度(PSD)概念
做音频处理,时域波形你肯定天天看。但说实话,很多杂音在时域里就是一团乱麻,根本看不出门道。我刚开始处理一个电机噪声项目时,盯着波形看了三天,啥也没发现。后来把信号扔进频域一看,好家伙,几个特定频率的尖峰清清楚楚。
这就是频域分析的价值。它把信号从时间轴掰到频率轴,让你一眼看出“哪个频率在捣乱”。这一章,我们就来啃下这块硬骨头。
3.1 傅里叶变换:从时域到频域的桥梁
傅里叶变换,说白了就是一个数学变换。它告诉你:任何一个连续信号,都可以看作无数个正弦波和余弦波的叠加。每个正弦波都有自己的频率、幅度和相位。
公式长这样:
X(f) = ∫ x(t) · e^(-j2πft) dt
别被积分符号吓到。你只需要记住三件事:
- 输入: 时域信号 x(t),比如你录的一段音频。
- 输出: 频域信号 X(f),表示每个频率成分的强度和相位。
- 本质: 信号与不同频率的正弦波做“相关性计算”。匹配上了,输出值就大。
我在项目中遇到过一位同事,死活不理解傅里叶变换。我打了个比方:你面前有一碗汤,时域就是直接喝一口,知道味道。频域呢?是把汤里的盐、糖、辣椒分别挑出来,看看各放了多少。这个比喻他一下就懂了。
3.2 频谱分析仪:你的频域眼睛
频谱分析仪,就是把信号做FFT然后显示出来的工具。硬件的有,软件也有。我个人习惯用Python的matplotlib配合numpy做快速分析,调试时非常方便。
一个典型的频谱图,横轴是频率(Hz),纵轴是幅度(dB)。你会看到:
- 底噪: 一条平缓的曲线,代表系统本底噪声。
- 尖峰: 某个频率能量特别高,往往是干扰源。
- 谐波: 基频的整数倍,常见于电源噪声或机械振动。
下面是一个简单的Python代码,演示如何用FFT做频谱分析:
import numpy as np
import matplotlib.pyplot as plt
# 生成一个含噪声的1kHz正弦波
fs = 44100 # 采样率
t = np.arange(0, 1, 1/fs)
f0 = 1000
signal = np.sin(2 * np.pi * f0 * t) + 0.5 * np.random.randn(len(t))
# 做FFT
N = len(signal)
fft_vals = np.fft.fft(signal)
freqs = np.fft.fftfreq(N, 1/fs)
# 只取正频率部分
half_N = N // 2
fft_mag = np.abs(fft_vals[:half_N]) / N
fft_mag_db = 20 * np.log10(fft_mag + 1e-12) # 转成dB
# 绘图
plt.figure(figsize=(10, 4))
plt.plot(freqs[:half_N], fft_mag_db)
plt.xlabel('频率 (Hz)')
plt.ylabel('幅度 (dB)')
plt.title('频谱分析示例')
plt.grid(True)
plt.show()
这段代码我用了无数次。注意那个+ 1e-12,防止log(0)报错。嗯,这里要注意,FFT的结果是复数,取绝对值才是幅度。
3.3 功率谱密度(PSD):更科学的噪声度量
频谱分析仪显示的幅度谱,有个问题:它依赖于FFT的点数和分辨率带宽。你换个参数,尖峰高度就变了。这在实际工程中很麻烦。
功率谱密度(PSD)解决了这个问题。它表示“单位频率带宽内的功率”,单位是W/Hz或dBm/Hz。PSD不随FFT参数变化,是噪声分析的“标准尺”。
计算PSD有两种常用方法:
| 方法 | 原理 | 适用场景 |
|---|---|---|
| 周期图法 | 直接对信号做FFT,取幅度平方,再除以频率分辨率 | 信号平稳,数据量足够大 |
| Welch法 | 将信号分段,每段加窗,做FFT后平均 | 噪声非平稳,需要降低方差 |
Welch法是我最常用的。它通过分段平均,让PSD曲线更平滑,不容易被偶然的噪声尖峰带偏。Python的scipy.signal.welch函数一行代码就能搞定:
from scipy import signal
f, Pxx = signal.welch(signal, fs, nperseg=1024)
plt.semilogy(f, Pxx)
plt.xlabel('频率 (Hz)')
plt.ylabel('PSD (V^2/Hz)')
plt.title('功率谱密度 (Welch法)')
plt.grid(True)
plt.show()
你想想看,为什么PSD在工程中这么重要?因为很多标准(比如汽车电子EMC测试)都是用PSD来定义噪声限值的。你测出来的PSD曲线,直接可以和标准对比,判断是否超标。
3.4 知识体系总览
这一章的内容比较多,我画了一张图帮你理清关系。从时域信号出发,经过傅里叶变换进入频域,然后通过频谱分析仪或PSD计算来观察和分析。
从这张图你可以看到,傅里叶变换是核心枢纽。它把时域信号转换成频域信号,然后你可以选择用频谱分析仪看幅度,或者用PSD看功率密度。两者各有用途,但PSD在噪声分析中更权威。
好了,这一章的内容就到这里。频域分析是杂音定位的起点,后面的章节我们会基于这些工具,一步步把各种杂音揪出来。