数组信号去噪需选准滤波逻辑、窗口大小及边界处理:滑动平均适用于缓慢变化数据的高频抖动,中位数滤波专治脉冲噪声,组合策略先中位后均值更稳健,参数需依场景调整。

直接用数组实现信号去噪,关键在于选对滤波逻辑、设好窗口大小、处理好边界。不需要额外库,纯数组操作就能应对多数传感器或业务指标的异常波动。
滑动平均:平滑连续型随机抖动
适合温度、电压、访问量这类本身变化缓慢、但有小幅高频波动的数据。核心是用局部均值替代当前点,削弱随机误差。
- 取奇数长度窗口(如3、5),从索引0开始遍历到
len(arr) - window_size + 1 - 对每个位置
i,截取arr[i:i+window_size]求平均 - 边缘可补原值(如首尾各复制
window_size//2个元素),避免数据缩水
中位数滤波:剔除突发性尖峰/毛刺
对“某次读数突然跳到1000℃”这类脉冲噪声最有效。排序取中间值,天然免疫离群点,不扭曲整体趋势。
- 窗口必须为奇数(3、5、7),确保中位数唯一
- 对每个中心位置
i,取arr[i-window//2 : i+window//2+1]子数组 - 排序后取索引为
window//2的值,赋给新数组对应位置 - 首尾不足窗口时,可用镜像填充或直接保留原值
组合策略:先抗冲击再平滑
实际数据常混合噪声——既有偶尔跳变,又有持续抖动。单独用一种易顾此失彼,两级处理更稳健。
- 第一级:用窗口3中位滤波,快速抹掉明显异常点
- 第二级:对上步结果用窗口5滑动平均,进一步压平残余波动
- 参数可调:比如工业场景用3→5,IoT低功耗设备可缩为3→3以节省计算
实战注意几个细节
数组去噪不是套公式,得看数据脾气:
- 窗口太大 → 曲线变“懒”,错过真实突变(如设备告警上升沿)
- 窗口太小 → 噪声滤不净,尤其对密集毛刺效果打折
- 原始数据含NaN或空值 → 必须先清理,否则中位/均值计算会失效
- 实时流式处理 → 改用环形缓冲区维护窗口,避免反复切片开销










