第二讲:信号与噪声——读懂传感器世界的“好”与“坏”
各位同学,欢迎来到第二讲。
上一讲我们聊了传感器融合的整体框架,今天咱们深入一个最基础、也最容易被忽视的话题——信号与噪声。说实话,我见过不少工程师,算法调得飞起,结果一上硬件就崩,为什么?因为根本没搞清楚传感器送过来的数据里,哪些是“真话”,哪些是“瞎扯”。
2.1 信号特性:你拿到的数据到底是什么?
先问一个问题:一个加速度计输出的数值,真的是“加速度”吗?
嗯,严格来说,不是。它输出的是电压值,或者经过ADC转换后的数字量。我们通过标定曲线,把它映射成加速度。这个映射过程,就决定了信号的特性。
我个人习惯把信号特性拆成三块来看:
- 时域特性:信号随时间怎么变?是缓慢漂移,还是剧烈抖动?
- 频域特性:信号的主要能量集中在哪个频率范围?比如人体运动通常在0-10Hz,而振动可能到几百Hz。
- 统计特性:信号的均值、方差、分布形态。这决定了你用什么样的滤波器合适。
重要概念: 传感器的输出信号,本质上是“真实物理量 + 传感器误差 + 环境干扰”的叠加。你永远无法得到“纯”的真实值,只能无限逼近。
举个例子。我在做惯性导航项目时,发现陀螺仪的零偏稳定性是0.1°/h,但实际跑起来,半小时就飘了5°。为什么?因为温度变化引起的低频漂移,比数据手册上写的“零偏稳定性”大得多。这就是信号特性没吃透的后果。
2.2 噪声来源:谁在污染你的数据?
噪声这东西,说白了就是“你不想要的那部分信号”。但它的来源五花八门,我归纳成四大类:
2.2.1 热噪声(约翰逊噪声)
所有电阻性元件都会产生。温度越高,噪声越大。你想想看,传感器芯片内部有那么多电阻、晶体管,热噪声是逃不掉的。它的特点是白噪声,功率谱密度平坦。
2.2.2 闪烁噪声(1/f噪声)
低频段特别明显。频率越低,噪声越大。我做过一个气压计项目,采样率降到1Hz以下时,数据抖得像心电图。后来查资料才发现,这是半导体器件的1/f噪声在作怪。
2.2.3 量化噪声
ADC把模拟量转成数字量时,必然有量化误差。比如一个12位ADC,量程3.3V,那么LSB就是3.3/4096 ≈ 0.8mV。这个0.8mV就是量化噪声的“地板”。你信号再干净,也躲不过这一刀。
2.2.4 环境耦合噪声
这个最头疼。电源纹波、电磁干扰、机械振动……我在工厂调试时遇到过,传感器一靠近电机,数据直接炸了。后来发现是电机驱动产生的强电磁场,通过线缆耦合进了信号线。
避坑指南: 我曾经以为软件滤波能解决一切噪声问题,结果被现实狠狠打脸。硬件上的噪声耦合,比如地环路、电源去耦不良,软件再好的算法也救不回来。先搞定硬件,再谈软件滤波。
2.3 信噪比计算:量化你的信号质量
信噪比(SNR)是衡量信号质量最直接的指标。公式很简单:
SNR(dB) = 10 * log10( P_signal / P_noise )
其中P_signal是信号功率,P_noise是噪声功率。如果信号和噪声都用电压表示,公式变成:
SNR(dB) = 20 * log10( V_signal_rms / V_noise_rms )
注意,这里用的是有效值(RMS),不是峰值。我见过有人拿峰峰值算,结果信噪比虚高了好几个dB,一上实际场景就露馅。
实际计算步骤
假设你采集了一段加速度计数据,想算信噪比:
- 采集静止状态下的数据,作为噪声样本。计算其RMS值。
- 采集运动状态下的数据,作为信号+噪声样本。计算其RMS值。
- 信号功率 = (信号+噪声)的RMS² - 噪声的RMS²
- 代入公式计算SNR。
小技巧: 如果噪声是白噪声,你可以用FFT看频谱。信号能量集中在某个频段,噪声均匀分布。这样算出来的SNR更准确。我在做MEMS加速度计标定时,就是用这个方法区分振动噪声和电路噪声的。
2.4 一个完整的例子:从数据到信噪比
咱们来点实际的。假设你有一个温度传感器,采样率10Hz,采集了100个点。静止状态下(恒温箱)的数据如下(单位:℃):
噪声样本:25.1, 25.3, 24.9, 25.2, 25.0, 25.1, 25.4, 24.8, 25.2, 25.0, ...
计算噪声RMS:
均值 = 25.1
方差 = [(25.1-25.1)² + (25.3-25.1)² + ...] / 100 ≈ 0.04
噪声RMS = sqrt(0.04) = 0.2 ℃
然后给传感器加一个已知的阶跃信号(比如从25℃跳到35℃),采集数据:
信号+噪声样本:25.2, 25.1, 28.7, 33.2, 34.8, 35.1, 35.0, 34.9, ...
计算信号+噪声的RMS(取稳定后的10个点):
均值 ≈ 35.0
方差 ≈ 0.05
RMS = sqrt(0.05) ≈ 0.224 ℃
信号功率 = 0.224² - 0.2² = 0.050 - 0.040 = 0.010
信号RMS = sqrt(0.010) ≈ 0.1 ℃
SNR = 20 * log10(0.1 / 0.2) = 20 * log10(0.5) ≈ -6 dB
嗯,-6dB,说明噪声比信号还大。这个传感器在这个场景下基本没法用。怎么办?要么换传感器,要么加滤波。
2.5 信噪比与系统设计的关系
信噪比不是越高越好,够用就行。我个人的经验是:
| 应用场景 | 最低SNR要求 | 说明 |
|---|---|---|
| 姿态解算(IMU) | 20 dB | 低于这个值,积分漂移会失控 |
| 温度监测 | 30 dB | 工业场景,需要0.1℃分辨率 |
| 音频采集 | 60 dB | 人耳对噪声敏感 |
| 地震监测 | 40 dB | 微弱信号,需要高动态范围 |
你想想看,如果系统SNR只有10dB,你花大价钱上卡尔曼滤波,效果可能还不如一个简单的滑动平均。因为滤波器的前提假设是“信号比噪声强”,如果这个假设不成立,再高级的算法也是白搭。
核心观点: 信噪比决定了你滤波器的“天花板”。SNR低于10dB时,先别急着调算法,回头看看硬件和传感器选型。这是我用几次失败项目换来的教训。
2.6 本章小结
这一讲我们聊了:
- 信号的时域、频域、统计特性——吃透它们,你才能选对滤波器。
- 四大噪声来源:热噪声、1/f噪声、量化噪声、环境耦合。记住,硬件噪声软件救不了。
- 信噪比的计算方法,以及它在系统设计中的指导意义。
下一讲,我们会进入滤波器的世界。先预告一下:不是所有噪声都适合用低通滤掉,有些噪声,你得跟它“和平共处”。
好了,今天就到这里。有问题欢迎在课程群里讨论,或者直接来找我。咱们下节课见。