如何判断传感器数据里的噪声:时域、频谱与滤波

4148 字
21 分钟
如何判断传感器数据里的噪声:时域、频谱与滤波

温度读数在 25 ℃ 附近波动,增加平均次数后,显示会平稳一些,温度变化时的响应也会变慢。环境记录仪可以接受几秒延迟,温控反馈通常需要更快的响应。同样的滤波参数,放在这两种应用中,效果会很不一样。

传感器输出里既有被测对象的变化,也有测量链路加入的噪声。低通滤波根据频率选择保留和衰减的成分;当真实变化与干扰落在相近频带时,它们会一起受到影响。因此,评价滤波效果需要同时看噪声、信号幅值和响应时间。

滑动平均和一阶 IIR 都适合在线处理传感器数据。参数选择可以从三项要求出发:允许多大的稳态波动、需要保留多快的变化,以及能接受多少延迟。文中的温度曲线采用合成数据,原厂噪声图用于说明测量方法。

1. 测量需求与原始数据#

1.1 哪些变化需要保留#

确定响应要求时,需要同时考虑探头热惯性、传感器内部滤波和软件滤波。例如探头本身已有较长的热时间常数,再增加软件平均窗口,会进一步延迟温度变化的反馈。

分析数据时,应保存时间戳、输出数据率与内部滤波配置。从 SPI 读到新数值的时刻,不一定就是它的实际采样时刻;反复读取尚未更新的寄存器,也不会增加独立观测。

1.2 原始数据中常见的四类现象#

原始数据的特征可能来源第一项检查
围绕均值散布,短时间没有固定周期宽带噪声、量化及前端噪声直方图、标准差和频谱
近似固定周期起伏工频、电源、PWM、机械周期对照干扰源频率及采样率
偶发大跳变接触不良、通信错误、瞬态耦合或真实事件原始帧、状态位、时间戳与现场状态
均值在较长时间内移动环境变化、自热、温漂、低频噪声延长记录,并同步记录供电和环境

这些只是排查方向,不能仅凭波形外观定性。比如工频经混叠后可能成为慢波动,丢失一个高字节也可能表现为尖峰。先检查通信 CRC、数据就绪标志、符号扩展和量程,再决定是否把异常值交给滤波器。

ADI 原厂运放噪声密度与低频拐点
ADI 原厂运放噪声密度与低频拐点

图 1:ADI MT-048,Figure 1,PDF 第 1 页。噪声密度不是一次采样的电压标准差;它描述单位带宽内的频域特性。原文

2. 用时域统计和频谱描述噪声#

标准差描述波动大小,频谱显示波动的频率分布。相同标准差的两段数据,可能分别以宽带噪声和低频漂移为主,滤波后的变化也会不同。

2.1 均值与标准差的适用条件#

计算噪声标准差时,应选输入近似稳定的片段。温度正在变化时,直接对整段记录减去均值,会把真实变化也计入噪声。若采用去趋势处理,需要注明模型及被去除的频率成分。

2.2 从功率谱密度到噪声有效值#

对单边功率谱密度 Sx(f)S_x(f),单位若为 V2/Hz\mathrm{V^2/Hz},则某频带内的噪声方差为:

σ2=∫f1f2Sx(f) df\sigma^2=\int_{f_1}^{f_2}S_x(f)\,df

若使用幅度谱密度 en(f)e_n(f),单位为 V/Hz\mathrm{V/\sqrt{Hz}},应先平方再积分。白噪声密度近似常数时,才可写成 σ=enBeq\sigma=e_n\sqrt{B_{eq}}。

ADI 原厂等效噪声带宽图
ADI 原厂等效噪声带宽图

图 2:MT-048,Figure 4,PDF 第 5 页。一阶模拟低通对白噪声的等效噪声带宽为 πfc/2\pi f_c/2,约为 1.57fc1.57f_c,大于其 -3 dB 频率。其他滤波器需按各自频响积分。原文

FFT 的一条谱线有多高,还受窗函数、记录长度和归一化方式影响。要比较噪声密度,可以使用明确归一化的 Welch PSD,并检查积分是否与时域方差大致一致;若要测单频幅值,则要处理窗的相干增益和频率泄漏。两种用途不要共用一条未经说明的“频谱幅值”。SciPy 对 Welch 方法的参数、单位和默认设置有完整定义。

2.3 低频噪声需要足够长的观察时间#

记录长度限制了可分辨的低频范围;测试链路的高通与低通又限定了参与统计的频带。因此,低频峰峰值要连同带宽和观察时间一起报告。

ADI 原厂低频噪声测量波形与测量链路
ADI 原厂低频噪声测量波形与测量链路

图 3:MT-048,Figure 2,PDF 第 3 页。原图是 OP213 的 0.1~10 Hz 输入电压噪声测量,保留了带通、增益和示波器链路。低频噪声需要规定带宽和观察时间,不能从无限长记录里要求一个固定峰峰值。

3. 两种常用数字低通#

对已完成采样的数据,滑动平均与一阶 IIR 都容易在线实现。前者给最近一段数据相同权重,后者让旧数据的权重按指数衰减。这种权重差别决定了它们的频响与过渡过程。

3.1 滑动平均的噪声与延迟#

长度为 MM 的因果滑动平均是:

y[n]=1M∑k=0M−1x[n−k]y[n]=\frac{1}{M}\sum_{k=0}^{M-1}x[n-k]

若输入噪声独立、同分布,方差为 σx2\sigma_x^2,输出标准差为 σx/M\sigma_x/\sqrt M。有相关性的噪声不满足这个关系;低频漂移、固定偏差更不会因此消失。相邻滑动平均输出还共享大量样本,不能把它们当成相互独立的新观测。

这个 FIR 的群延迟为 (M−1)/2(M-1)/2 个样本。以 1 kS/s 采样、21 点平均为例,通带群延迟为 10 ms,阶跃完全填满窗口约需 20 ms。51 点窗口能进一步平滑,却也把群延迟增加到 25 ms。

Smith 数字信号处理教材中的移动平均原始信号与输出
Smith 数字信号处理教材中的移动平均原始信号与输出

图 4:Steven W. Smith,《The Scientist and Engineer’s Guide to Digital Signal Processing》,第 15 章 Figure 15-1,印刷页 279。窗口加长后噪声下降,脉冲边缘同时被展宽。作者发布的章节 PDF

它的幅频响应是:

∣H(f)∣=∣sin⁡(πMf/fs)Msin⁡(πf/fs)∣|H(f)|=\left|\frac{\sin(\pi M f/f_s)}{M\sin(\pi f/f_s)}\right|

滑动平均的阻带存在旁瓣。1 kS/s 下取 20 点时,第一零点恰在 50 Hz,但工频和采样时钟的偏移会改变抑制效果。若用于降采样前的抗混叠,还需逐段检查阻带衰减。

在线实现可以维护长度为 MM 的环形缓冲及累加和,每次加新值、减旧值。累加器位宽要容纳 MM 个样本的最大和;启动时使用有效样本数作分母,或者明确等待窗口填满,避免隐含的零填充拉低输出。

3.2 一阶 IIR 的递推与参数#

常见的一阶递推为:

y[n]=y[n−1]+α(x[n]−y[n−1]),0<α≤1y[n]=y[n-1]+\alpha(x[n]-y[n-1]),\qquad 0<\alpha\le1

按连续一阶系统的极点匹配,可以选择 α=1−e−2πfc/fs\alpha=1-e^{-2\pi f_c/f_s}。当 fcf_c 远小于 fsf_s 时,其离散 -3 dB 频率接近指定的 fcf_c;比例较大时应直接检查离散频率响应,不要把这个映射当成所有条件下的精确截止频率公式。

1 kS/s、10 Hz 的例子得到 α≈0.06090\alpha\approx0.06090。其时间常数约为 15.9 ms,阶跃达到 90% 约需 36.6 ms。对独立白噪声,稳态输出方差为:

σy2=α2−ασx2\sigma_y^2=\frac{\alpha}{2-\alpha}\sigma_x^2

减小系数会降低白噪声方差,同时延长阶跃响应。实现时可用第一笔有效数据初始化 yy;清零初始化会产生额外的启动过渡,需要屏蔽或标记。传感器掉线后,还需处理旧状态和重新稳定的过程。

4. 滤波参数计算#

4.1 一个同时约束噪声、幅值和响应时间的例子#

假设某温度采集链路以 1 kS/s 输出,稳态噪声可近似为独立白噪声,标准差为 0.08 ℃。设计要求是滤波后不超过 0.02 ℃、阶跃达到最终变化量的 90% 不超过 30 ms,并让 2 Hz 有用变化的幅值损失不超过 1%。这些是计算假设,实际传感器的热响应和内部滤波需另计。

滑动平均的噪声条件给出 M≥(0.08/0.02)2=16M\ge(0.08/0.02)^2=16。16 点平均在 2 Hz 的幅值约为 0.9983,损失约 0.17%;处理 15 笔变化后的新样本便超过阶跃的 90%,计入阶跃相对采样的相位,约在 15 ms 内达到。因此它满足这组三项要求。若取 21 点,噪声标准差约为 0.0175 ℃,2 Hz 幅值约为 0.9971,仍满足要求,但延迟更长。

对一阶 IIR,噪声条件要求 α/(2−α)≤1/16\alpha/(2-\alpha)\le1/16,即 α≤2/17\alpha\le2/17。从旧稳态开始处理阶跃,经过 kk 次更新后的剩余误差比例是 (1−α)k(1-\alpha)^k;要求 30 次更新内达到 90%,得到 α≥1−10−1/30≈0.07388\alpha\ge1-10^{-1/30}\approx0.07388。可选 α=0.09\alpha=0.09,此时输出噪声约为 0.0174 ℃,25 次更新内超过 90%。其离散幅频响应为:

∣H(ejω)∣=α1+(1−α)2−2(1−α)cos⁡ω|H(e^{j\omega})|=\frac{\alpha}{\sqrt{1+(1-\alpha)^2-2(1-\alpha)\cos\omega}}

代入 ω=2π×2/1000\omega=2\pi\times2/1000,幅值约为 0.9912,损失约 0.88%,也满足要求。两种算法在这个例子中都可用,选择还取决于存储、阻带抑制和瞬态形状。若输入含明显低频相关噪声,上面的白噪声降幅就要用实测 PSD 重新积分;若还需降采样,则必须另查新奈奎斯特频率以上的阻带衰减。

4.2 用等效噪声带宽比较不同滤波器#

对直流增益为 1 的离散滤波器,定义单边等效噪声带宽:

Beq=∫0fs/2∣H(ej2πf/fs)∣2 df=fs2∑n=0∞h2[n]B_{eq}=\int_0^{f_s/2}|H(e^{j2\pi f/f_s})|^2\,df =\frac{f_s}{2}\sum_{n=0}^{\infty}h^2[n]

最后一个等号由 Parseval 关系得到,h[n]h[n] 是实系数滤波器的冲激响应。对已经采样的独立白噪声,输入单边 PSD 是 2σx2/fs2\sigma_x^2/f_s,积分后便得到 σy2=σx2∑h2[n]\sigma_y^2=\sigma_x^2\sum h^2[n]。这里没有把模拟输入中已经混叠的噪声还原出去。冲激响应与频率响应的对应可参考 Smith,第 9 章。

因此 21 点平均的 Beq=fs/(2M)=23.81 HzB_{eq}=f_s/(2M)=23.81\ \mathrm{Hz};上述 10 Hz 极点匹配 IIR 的 Beq=fs2α2−α≈15.70 HzB_{eq}=\frac{f_s}{2}\frac{\alpha}{2-\alpha}\approx15.70\ \mathrm{Hz}。它们对白噪声的抑制程度本来就不相同。若固定 M=21M=21 并要求两者带宽相等,解得 α=2/(M+1)=0.09091\alpha=2/(M+1)=0.09091;该 IIR 的极点时间常数约为 10.49 ms,低频群延迟为 (1−α)/α=10(1-\alpha)/\alpha=10 个样本。低频延迟此时相同,仍不意味着全频带相位、阶跃形状或工频抑制相同。

实现后,可以用频响数值积分、冲激响应平方和、白噪声方差比三种方法核对结果。若相差一倍,先查单边/双边 PSD 和积分区间;若相差一个采样率,则查频率轴用的是 Hz 还是弧度/样本。

5. 温度序列的滤波结果#

5.1 明确输入与计算条件#

本文合成 6 秒、1 kS/s 的温度序列:基线 25 ℃,叠加 2 Hz、幅值 0.15 ℃ 的真实变化;3 秒时基线提高 0.5 ℃;测量中另加标准差 0.08 ℃ 的白噪声、幅值 0.06 ℃ 的 50 Hz 干扰,以及 2.1 秒处一个 0.8 ℃ 尖峰。随机种子固定为 240。

下图沿用 21 点平均和 α≈0.06090\alpha\approx0.06090 的 IIR,用于展示不同瞬态;它不是上一节 α=0.09\alpha=0.09 设计例的仿真结果。

5.2 同时观察瞬态和频谱#

合成温度数据中滑动平均与一阶 IIR 对尖峰和阶跃的响应
合成温度数据中滑动平均与一阶 IIR 对尖峰和阶跃的响应

图 5:上图为孤立尖峰的响应,下图为温度阶跃的响应。曲线按因果滤波计算,输出保留实际延迟。

合成温度残差的功率谱密度及两种滤波器的幅频响应
合成温度残差的功率谱密度及两种滤波器的幅频响应

图 6:左图用阶跃前的 2 秒数据减去已知模型真值,再计算 Welch PSD;右图用离散传递函数计算响应。真实测量通常没有已知真值,必须另选稳态片段或参考测量。

这组参数的等效噪声带宽不同,残余噪声也不同。比较两种算法时,可以固定允许延迟、通带误差或等效噪声带宽中的一项,再考察其余指标。

6. 低通滤波以外的问题#

6.1 尖峰是否属于真实事件#

一个尖峰会被平均滤波摊到整个窗口里;IIR 则会留下衰减尾巴。短窗口中值滤波对孤立脉冲更有针对性,但它是非线性的,会改变窄脉冲和快速阶跃。若系统需要检测碰撞、过流或突发温升,把真实事件判成异常值会造成漏报。可以保留原始通道,用独立的异常标志记录被拒绝的样本,而不要静默覆盖。

6.2 漂移与测量模型#

慢漂移则应同步检查传感器自热、供电、板温、环境和安装条件。白噪声可因平均减少,偏置和漂移需要校准、补偿或更合适的测量模型。卡尔曼滤波可以利用状态模型,但若把漂移错误地当成零均值白噪声,调参数也不能自动纠正模型。

在反馈系统中,还应把滤波器算进环路。滤波引入的相位滞后可能降低稳定余量,相关讨论可与 PID 文章对照。显示用的慢滤波不必与控制和保护路径共用一套输出。

6.3 样本相关性与长时间稳定性#

对弱平稳噪声,记自协方差为 γ[k]\gamma[k],长度为 MM 的均值方差是:

var⁡(xˉ)=1M2[Mγ[0]+2∑k=1M−1(M−k)γ[k]]\operatorname{var}(\bar x)=\frac{1}{M^2} \left[M\gamma[0]+2\sum_{k=1}^{M-1}(M-k)\gamma[k]\right]

独立样本的非零延迟协方差为零,才退化成 σx2/M\sigma_x^2/M。传感器自身的数字滤波、模拟低通和软件滑动平均都会让相邻样本相关,所以“读取了 1000 次”不等于“获得 1000 个独立观测”。应记录原始输出速率与内部滤波配置,用稳态数据估计相关时间;估计所用记录也要足够长。NIST 对相关测量与 Allan 方差的讨论说明了普通独立样本公式失效的原因。

若关心“平均多久最划算”,可把稳定输入的长记录分成持续时间为 τ\tau 的相邻块,以 σA2(τ)=12E[(xˉk+1−xˉk)2]\sigma_A^2(\tau)=\tfrac12 E[(\bar x_{k+1}-\bar x_k)^2] 观察不同平均时间下的稳定性。对白噪声,Allan 偏差通常随 τ−1/2\tau^{-1/2} 下降;真实漂移或低频扰动存在时,继续平均未必继续改善。它测的是随时间尺度变化的稳定性,不是绝对准确度,也不能单凭某一斜率认定唯一物理噪声源。报告时应写清重叠与否、死区、采样间隔和记录长度;长 τ\tau 下可用差分数量减少,曲线的不确定度会变大。NIST SP 1065提供了估计器与报告方法,其主要对象是频率稳定性,移用于温度等传感器时需保留实际量纲和测量模型。

7. 实测与实现检查#

先用输入近似稳定的原始记录检查噪声模型,再用已知变化速度的输入测量幅值和延迟。报告至少保留采样率、滤波参数、初始化方法、噪声统计区间和阶跃响应定义。改变输出速率后,需要重新计算参数;同一个窗口长度或同一个 α\alpha 在不同采样率下对应不同时间尺度。

上线时还要覆盖断线、重复帧、启动和饱和恢复。原始数据、有效性标志和滤波输出应能互相追溯,便于区分传感器异常与算法行为。

8. 资料与复现#

原厂与教材插图保留原版权,源 PDF 位于本文 sources/,页码与裁切记录见 SOURCES.txt。合成数据、滤波和作图参数见 scripts/generate-signal-chain-figures.py。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

如何判断传感器数据里的噪声:时域、频谱与滤波
https://nekorain.xyz/posts/sensor-noise-and-filtering/
作者
NekoRain
发布于
2026-10-16
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
NekoRain
永远相信美好的事情即将发生 Always believe that wonderful things are about to happen
公告
这里是小雨的模拟小窝,白天调电路,晚上写点温柔碎碎念。希望你来的时候像低噪声运放一样稳定,走的时候带一点点开心呀。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
28
分类
11
标签
89
总字数
224,088
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.12.1
文章许可
CC BY-NC-SA 4.0

文章目录