数字信号处理基础:采样定理、数字滤波器设计(FIR/IIR)、FFT原理与实现
各位同学,大家好。今天我们聊聊数字信号处理的基础。说实话,这部分内容在雷达系统里太重要了。你想想看,雷达回波从天线进来,经过模拟前端,最终都要变成数字信号才能处理。所以采样定理、滤波器设计、FFT,这三板斧必须得拿稳。
3.1 采样定理:别让信号“说谎”
采样定理,也叫奈奎斯特定理。说白了就是一句话:采样频率必须大于信号最高频率的两倍。为什么?因为低于这个频率,信号就会发生混叠,高频分量会伪装成低频信号混进来。
我在项目中遇到过一件事。有一次调试某型机载雷达,回波数据里总出现一个莫名其妙的低频分量。查了半天,发现是AD采样率设置低了,目标的多普勒频率刚好超过了采样率的一半。嗯,这就是典型的混叠。后来加了抗混叠滤波器,问题才解决。
采样定理的数学表达很简单:
fs ≥ 2 * fmax
其中fs是采样频率,fmax是信号最高频率。实际工程中,我建议取fs = (2.5 ~ 5) * fmax,这样后续处理更从容。
3.2 数字滤波器设计:FIR与IIR的选择
滤波器是雷达信号处理的看家本领。我们主要用两种:FIR和IIR。很多人纠结选哪个,我直接说结论:
| 特性 | FIR滤波器 | IIR滤波器 |
|---|---|---|
| 相位特性 | 严格线性相位 | 非线性相位 |
| 稳定性 | 绝对稳定 | 可能不稳定 |
| 计算量 | 较大 | 较小 |
| 设计难度 | 简单 | 较复杂 |
我个人习惯:在雷达脉冲压缩、MTI等对相位敏感的场合,必须用FIR。如果只是做简单的带通滤波,对相位没要求,IIR更省资源。
3.2.1 FIR滤波器设计实战
设计FIR滤波器,最常用的是窗函数法。我给你们看一段MATLAB代码,这是我当年做项目时常用的模板:
% FIR低通滤波器设计
fs = 100e6; % 采样率 100MHz
fc = 10e6; % 截止频率 10MHz
N = 64; % 滤波器阶数
% 汉明窗设计
b = fir1(N, fc/(fs/2), 'low', hamming(N+1));
% 查看频率响应
freqz(b, 1, 1024, fs);
这里要注意:阶数N越大,过渡带越窄,但计算量也越大。我一般取N = 4~8倍的过渡带宽度倒数,具体看系统资源。
3.2.2 IIR滤波器设计要点
IIR滤波器设计,我推荐用巴特沃斯或切比雪夫型。巴特沃斯通带最平坦,切比雪夫过渡带更陡。怎么选?看需求。
举个例子,设计一个4阶巴特沃斯低通:
% IIR低通滤波器设计
fs = 100e6;
fc = 10e6;
n = 4; % 阶数
[b, a] = butter(n, fc/(fs/2), 'low');
% 查看频率响应
freqz(b, a, 1024, fs);
注意:IIR滤波器有反馈,搞不好会发散。我曾经在FPGA上实现IIR滤波器时,因为系数量化精度不够,滤波器直接自激了。所以,IIR的系数一定要用双精度或者定点数仔细量化。
3.3 FFT原理与实现:从时域到频域的桥梁
FFT是雷达信号处理的灵魂。没有FFT,我们根本看不到目标的距离和速度信息。FFT的本质就是快速计算DFT,把时域信号变换到频域。
DFT的公式大家应该都见过:
X(k) = Σ x(n) * e^(-j*2π*k*n/N)
直接算这个公式,复杂度是O(N²)。FFT利用旋转因子的对称性和周期性,把复杂度降到O(N log₂N)。
3.3.1 基2时间抽取FFT
最常用的FFT算法是基2时间抽取法。它的核心思想是分治:把N点序列分成奇偶两部分,分别做FFT,再合并。
我给你们画个简单的流程图(用文字描述):
- 输入序列按位倒序重排
- 进行log₂N级蝶形运算
- 每级有N/2个蝶形单元
- 旋转因子W_N^k逐级变化
代码实现(C语言风格):
void fft(complex* x, int N) {
// 位倒序
for (int i = 0; i < N; i++) {
int j = bit_reverse(i, log2(N));
if (i < j) swap(&x[i], &x[j]);
}
// 蝶形运算
for (int len = 2; len <= N; len <<= 1) {
complex w = exp(-j*2*PI/len);
for (int i = 0; i < N; i += len) {
complex wk = 1;
for (int k = 0; k < len/2; k++) {
complex u = x[i+k];
complex v = x[i+k+len/2] * wk;
x[i+k] = u + v;
x[i+k+len/2] = u - v;
wk *= w;
}
}
}
}
3.3.2 FFT在雷达中的应用
在机载雷达里,FFT主要干三件事:
- 脉冲压缩: 对发射信号和回波做FFT,频域相乘再IFFT,得到压缩后的脉冲
- MTI/MTD: 对多个脉冲做FFT,提取多普勒频率,区分动目标和静目标
- 距离-多普勒图: 二维FFT生成距离-速度二维图像
我记得有一次做地面动目标检测,用128点FFT做多普勒处理,结果发现慢速目标被地杂波淹没了。后来把FFT点数增加到256点,频率分辨率提高了一倍,目标就露出来了。所以,FFT点数不是越大越好,但太小了肯定不行。
3.4 总结与工程建议
好了,今天的内容就这些。我最后给大家几个工程建议:
- 采样率一定要留余量,别省那点资源
- FIR滤波器优先考虑,除非资源紧张才用IIR
- FFT点数选2的幂,不够就补零
- 加窗处理不能省,否则频谱分析会出问题
这些基础打牢了,后面讲脉冲压缩、MTI、SAR成像,你们才能跟得上。有什么问题,咱们下节课再聊。
公众号:蓝海资料掘金营,微信deep3321