如何从非周期性变化信号中去除杂散尖峰?
以下是几种适配你场景的可行方法,避开中值滤波、带通滤波的局限性:
自适应斜率阈值法
计算信号的局部差分(相邻点的差值),杂散尖峰的差分绝对值会远大于目标信号边缘的差分。设置自适应阈值:以滑动窗口内信号的标准差为基准,乘以一个经验系数(比如3-5)作为差分阈值。标记所有超过阈值的点为尖峰,然后用尖峰前后的正常点做线性或三次样条插值替换。这种方法不依赖尖峰间距,且目标信号的边缘差分连续变化,不会被误判为尖峰。多尺度形态学顶帽变换
顶帽变换的核心是提取信号中高于局部背景的亮尖峰。针对无固定尺寸的尖峰,采用多尺度结构元素(比如宽度从最小尖峰的1/2到目标信号边缘宽度的范围)分别进行顶帽变换,提取出不同尺度的尖峰分量。将这些分量取交集(只保留所有尺度都识别为尖峰的点),再用原始信号减去该交集分量,即可得到去尖峰后的信号。这种方式能避免误将目标边缘当作尖峰去除。趋势拟合残差过滤
用滑动窗口对信号做分段多项式拟合(比如二次或三次多项式,窗口大小根据目标信号的平滑程度调整),得到信号的趋势曲线。计算原始信号与趋势曲线的残差,尖峰对应的残差会显著偏离正常范围。设置残差阈值(比如滑动窗口内残差的3倍标准差),将超过阈值的点替换为趋势曲线上的对应值。该方法能精准跟随目标信号的边缘变化,不会造成边缘失真。L1正则化稀疏分离
将信号建模为「目标信号分量 + 稀疏尖峰分量」,用L1正则化的线性回归求解。L1正则化会迫使尖峰分量的系数尽可能稀疏,从而精准分离出无规律的杂散尖峰。求解后直接取目标信号分量即可,无需预设尖峰的频率或间距特征,适配性极强。
内容的提问来源于stack exchange,提问作者user2551700

