第2章:数字信号处理基础回顾
各位同学,咱们今天聊聊数字信号处理的基础。说实话,这部分内容看起来像是数学课,但你要是真把它吃透了,后面做无线通信优化的时候会顺手很多。我当年刚入行时,总觉得这些理论离实际代码很远,直到有一次在项目里被采样率问题坑了一把……嗯,从那以后我再也不敢小看这些基础了。
2.1 采样定理——别让你的信号“说谎”
采样定理,也叫奈奎斯特采样定理。说白了就是一句话:采样频率必须大于信号最高频率的两倍。为什么?因为采样频率不够,信号就会“伪装”成另一个频率,这就是混叠。
核心公式:
fs ≥ 2 × fmax
其中 fs 是采样率,fmax 是信号最高频率分量。
我在项目中遇到过一件事:一个同事采集音频信号,信号最高频率是8kHz,他用了16kHz采样率,按理说够了。但实际回放时出现了奇怪的“嗡嗡”声。查了半天,发现是前端模拟滤波器没做好,高频噪声混进来了。你想想看,采样定理的前提是信号已经限带,如果前端没滤干净,采样率再高也没用。
避坑指南:
我曾经在调试一个无线接收机时,忽略了ADC前的抗混叠滤波器设计。结果信号频谱里出现了虚假的峰值,让我误以为收到了干扰信号。后来加上一个简单的二阶低通滤波器,问题就解决了。记住:采样定理不是ADC的事,是整个信号链的事。
2.2 傅里叶变换——从时域到频域的“翻译官”
傅里叶变换,说白了就是把信号从时间域翻译到频率域。时域里我们看到的波形,频域里就是一堆正弦波的叠加。我个人习惯把傅里叶变换理解成“信号分解机”——你给我一个复杂波形,我帮你拆成不同频率、不同幅度的正弦波。
2.2.1 DFT与FFT
DFT(离散傅里叶变换)是数字信号处理的核心工具。公式长这样:
X[k] = Σ x[n] · e^(-j·2π·k·n/N) (n=0 to N-1)
但直接算DFT太慢了——复杂度是O(N²)。比如1024点DFT,要算一百多万次乘法。所以有了FFT(快速傅里叶变换),把复杂度降到O(N·log₂N)。
| 变换类型 | 计算复杂度 | 1024点计算量 |
|---|---|---|
| DFT(直接计算) | O(N²) | 约1,048,576次 |
| FFT(基2算法) | O(N·log₂N) | 约10,240次 |
你看这个差距,差了整整两个数量级。所以实际工程里,没人会直接算DFT。我建议你记住:FFT不是另一种变换,而是DFT的高效实现。
实战技巧:
做FFT时,数据长度最好是2的幂次(如256、512、1024)。这样可以用基2FFT算法,效率最高。如果数据长度不是2的幂次,可以补零到下一个2的幂次。补零不会增加频率分辨率,但能让频谱看起来更平滑。
2.2.2 频谱泄露与窗函数
做FFT时有个坑——频谱泄露。为什么会这样?因为FFT假设信号是周期延拓的。如果你的采样窗口不是信号周期的整数倍,截断就会产生频谱泄露。
解决办法?加窗。常用的窗函数有:
- 矩形窗:相当于没加窗,主瓣窄但旁瓣高,泄露严重
- 汉宁窗:旁瓣降低明显,适合一般频谱分析
- 海明窗:类似汉宁窗,但旁瓣更低
- 布莱克曼窗:旁瓣衰减最快,但主瓣最宽
我个人的经验是:做无线通信信号分析时,优先用汉宁窗或海明窗。如果对频率分辨率要求极高,可以考虑矩形窗,但要做好泄露的心理准备。
2.3 数字滤波器设计——FIR与IIR
滤波器是数字信号处理的“看门狗”——把不要的频率成分挡在外面,让需要的信号通过。数字滤波器分两大类:FIR和IIR。
2.3.1 FIR滤波器
FIR(有限冲激响应)滤波器,特点是稳定、线性相位。公式很简单:
y[n] = b₀·x[n] + b₁·x[n-1] + ... + bₙ·x[n-N]
说白了就是加权求和。没有反馈,所以绝对稳定。线性相位意味着所有频率的延迟相同,信号波形不会畸变——这对通信系统特别重要。
我在项目中遇到过:用IIR滤波器做基带信号处理,结果信号眼图变形了。换成等阶数的FIR滤波器,眼图立马清晰了。所以,如果对相位有要求,别犹豫,用FIR。
FIR设计要点:
- 阶数越高,过渡带越陡,但计算量越大
- 常用设计方法:窗函数法、频率采样法、Parks-McClellan算法
- 在DSP上实现时,可以用对称系数减少乘法次数
2.3.2 IIR滤波器
IIR(无限冲激响应)滤波器,有反馈,效率高。同样的性能指标,IIR的阶数比FIR低得多。公式带反馈项:
y[n] = b₀·x[n] + b₁·x[n-1] + ... - a₁·y[n-1] - a₂·y[n-2] - ...
IIR的优点是计算量小,缺点是非线性相位和可能不稳定。我建议你:
- 对相位不敏感的场景(如语音、音频)用IIR
- 对相位敏感的场景(如通信调制解调)用FIR
- IIR设计时一定要检查极点是否在单位圆内
避坑指南:
我曾经用双线性变换法设计了一个IIR低通滤波器,仿真时一切正常。但移植到定点DSP上后,滤波器开始振荡。查了半天,发现是系数量化后极点移到了单位圆外。解决办法:用更高精度的系数表示,或者改用级联型结构。
2.4 本章知识体系
下面这张图是我画的本章知识结构,帮你理清脉络:
这张图把本章三个核心模块串起来了。采样定理决定了你该用多快的速度采集信号,傅里叶变换帮你分析信号的频率成分,数字滤波器则让你能按需处理这些频率。三者环环相扣,缺一不可。
好了,这一章的内容就到这里。记住:理论是死的,但应用是活的。下次你在DSP上写FFT或者滤波器代码时,想想今天聊的这些坑,能帮你省不少调试时间。
公众号:蓝海资料掘金营,微信deep3321