4. 信号处理与特征提取:时域分析、频域分析与时频分析
各位同学,咱们今天聊点硬核的。信号处理这块,说白了就是给雷达、通信信号“做体检”。你拿到一段波形,怎么判断它有没有问题?是干扰信号?还是设备自激?这就要靠时域、频域、时频域这三板斧了。我个人习惯,拿到信号先看时域,再看频域,最后才上时频分析——这个顺序能帮你少走很多弯路。
4.1 时域分析:最直观的“心电图”
时域分析,就是看信号随时间怎么变化。你想想看,一个脉冲信号来了,它的幅度、宽度、周期,这些都是最原始的信息。
4.1.1 均值与方差
均值反映信号的直流分量。在嵌入式系统里,ADC采回来的数据如果均值不为零,说明可能有直流偏置。我在项目中遇到过,某型接收机中频输出总有个小尾巴,查了半天发现是电源纹波耦合进来的。
方差反映信号的波动程度。说白了,方差大说明信号能量分散,方差小说明信号集中。对于噪声信号,方差就是它的功率。
核心公式:
均值: μ = (1/N) * Σ x[i]
方差: σ² = (1/N) * Σ (x[i] - μ)²
4.1.2 峰值与峰均比
峰值就是信号的最大幅度。在电子战里,峰值往往对应着威胁信号的强度。但光看峰值不够,还得看峰均比(PAPR)。
峰均比太高,说明信号有尖峰,容易让放大器饱和。我曾经调试某型干扰机,输出功率死活上不去,一测峰均比高达15dB——原来是波形设计有问题,脉冲压缩后产生了过冲。
实战技巧: 在嵌入式平台计算峰值时,建议用滑动窗口法,每来一个采样点就更新一次最大值,避免全数据缓存。我习惯用双缓冲,一个窗口处理,一个窗口采集,效率很高。
4.2 频域分析:看穿信号的“频谱指纹”
时域看不出来的东西,频域一眼就能看穿。比如两个频率接近的信号,时域上混在一起分不清,但频谱上一目了然。
4.2.1 FFT(快速傅里叶变换)
FFT是频域分析的基础。在嵌入式系统里,我们通常用基2-FFT,点数选1024或2048。为什么?因为计算量刚好合适,实时性有保障。
// 嵌入式C语言FFT示例(简化版)
void fft(complex *data, int n) {
// 位反转
for (int i = 1, j = 0; i < n; i++) {
int bit = n >> 1;
for (; j & bit; bit >>= 1)
j ^= bit;
j ^= bit;
if (i < j)
swap(&data[i], &data[j]);
}
// 蝶形运算
for (int len = 2; len <= n; len <<= 1) {
// ... 具体实现略
}
}
注意: FFT的频率分辨率 = 采样率 / FFT点数。比如采样率100MHz,FFT点数1024,分辨率约97.7kHz。如果你想分辨两个间隔10kHz的信号,这个分辨率就不够。我曾经在这上面吃过亏,以为信号是单频,结果FFT一看是个宽谱——其实是分辨率不够,把两个信号混在一起了。
4.2.2 功率谱估计
功率谱比幅度谱更有用。它告诉你信号能量在频率上的分布。常用的方法有周期图法和Welch法。
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 周期图法 | 计算简单,直接FFT后取模平方 | 方差大,谱线不平滑 | 快速粗测 |
| Welch法 | 方差小,谱线平滑 | 计算量大,频率分辨率降低 | 精细分析 |
我个人习惯,在嵌入式系统里先用周期图法快速扫描,发现可疑信号后再用Welch法精细分析。这样既保证了实时性,又不漏掉细节。
4.3 时频分析:捕捉信号的“动态变化”
为什么需要时频分析?因为很多信号是非平稳的。比如跳频信号、线性调频信号,它们的频率随时间变化。单纯的FFT只能看到“某个时刻有哪些频率”,但看不到“频率怎么随时间变化”。
4.3.1 短时傅里叶变换(STFT)
STFT的思路很简单:把信号切成一段一段,对每一段做FFT。这样你就得到了一个“时间-频率”二维图。
关键参数有两个:窗长和重叠率。窗长决定了时间分辨率和频率分辨率的权衡。窗越长,频率分辨率越高,但时间分辨率越低。反之亦然。
经验值: 对于雷达脉冲信号,我通常用256点窗长,75%重叠率。这样既能看清脉冲的起止时间,又能分辨出脉内调制特征。
4.3.2 小波变换
小波变换比STFT更灵活。它用不同尺度的“小波”去匹配信号。低频部分用长窗口,高频部分用短窗口——这正好符合信号分析的直觉:低频信号变化慢,需要长观察时间;高频信号变化快,需要短观察时间。
在嵌入式系统里实现小波变换,我建议用Mallat算法。它通过滤波器组实现,计算量可控。我曾经在某型电子侦察设备上用过,用Daubechies-4小波,3层分解,就能很好地分离出脉冲信号和噪声。
选型建议:
- 信号平稳 → 用FFT就够了,别折腾
- 信号缓变(如扫频) → 用STFT,窗长选256~512
- 信号突变(如脉冲、跳频) → 用小波变换,母小波选db4或db6
4.4 实战:一个完整的诊断流程
好了,理论讲完了,咱们来点实际的。假设你拿到一段疑似干扰信号,怎么一步步分析?
- 第一步:时域粗看。计算均值和方差。如果均值偏离零,先检查直流偏置。看峰值,判断信号强度是否在接收机动态范围内。
- 第二步:频域细看。做FFT,看频谱。如果发现多个谱峰,判断是谐波还是多信号。用功率谱估计信号带宽。
- 第三步:时频精看。如果信号是非平稳的,上STFT或小波。看频率随时间的变化规律,判断是跳频、线性调频还是其他调制方式。
- 第四步:特征提取。把时域、频域、时频域的特征整合起来,形成特征向量。比如:均值、方差、峰值、中心频率、3dB带宽、脉冲宽度、重复周期等。
避坑指南: 我曾经在分析某型雷达信号时,只用了FFT,发现频谱很干净,以为没问题。后来上了STFT才发现,信号是脉内调频的,FFT把时间信息平均掉了。所以记住:非平稳信号,一定要用时频分析。
嗯,今天就聊到这儿。信号处理这块,说白了就是“用不同的镜子看同一个东西”。时域是普通镜子,频域是哈哈镜,时频分析是显微镜——各有各的用处。你们在实际项目中,多试几次就找到感觉了。