脉冲噪声检测方法 在主动降噪、声音检测、语音信号处理等领域脉冲噪声对系统构建和算法设计都有着特别大的影响本文章主要总结一下目前主流的脉冲噪声检测方法为后续主动降噪学习做一些准备工作。1. 归一化功率序列的脉冲噪声检测与正常信号相比脉冲尖峰具有明显更大的幅度值。因此可以利用一定时间长度的信号功率来检测脉冲噪声。首先数字化信号可以分为多个帧每个帧包含特定时间段的几个样本。因此第 k 帧的功率计算如下公式1然后我们按块计算归一化功率每个块的长度为 L如下公式2接着计算一个块内归一化功率的方差 pv如下公式3所示最后结合设定的阈值判断是否有脉冲噪声。公式1详解第一步主要进行分帧把长信号分成一小段一小段的。N每一帧里包含的“采样点”数量。采样点是数字信号的最小单位就像电影是一帧一帧画面拼起来的数字信号是一个一个数值点拼起来的一帧里有 N 个点。k第 k 帧也就是第几个小段k0 是第一帧k1 是第二帧以此类推。x(ikN)第 k 帧里第 i 个采样点的数值可以理解成“第 k 个小段里第 i 个位置的信号大小”。第二步算每一帧的功率把这一帧里每个采样点的数值先平方再全部加起来得到的结果 p(k) 就是第 k 帧的功率。公式2详解第一步先做分块把好多帧打包成一个大组我们把 L 个帧也就是 L 个小段拼成一个更大的组叫一个块。j第 j 个块也就是第几个大组pw(j,k)第 j 个块里第 k 帧的功率就是第一步算出来的 p(k)只是归到了第 j 个块里。第二步进行归一化。归一化就是把这个块里所有帧的功率统一换算到 0 到 1 之间的数值。举个例子离麦克风近的信号整体音量就大离得远的整体音量小直接比功率不公平。归一化之后我们只看这个块里每一帧能量的相对高低不受整体音量大小的影响。公式是怎么算的分子当前这一帧的功率减去这个块里最小的功率值分母这个块里功率的总范围 这个块里最大的功率值 - 最小的功率值。算出来的 pn(j,k)就是归一化之后的功率按比例落在 0~1 之间。公式3详解该公式就是标准的无偏样本方差离散公式。2. 条件中值滤波器检测脉冲噪声首先讲解一下中值滤波器中值滤波器广泛用于消除图像和音频文件中包含的脉冲噪声。中值滤波器的输出是有序输入序列的中值如下公式所示中值滤波器消除脉冲噪声的原理就是对极端异常值完全不敏感。举个最直观的例子一个窗口里的 5 个信号点是[2.1, 2.3, 100, 2.2, 2.4]其中第三个点 100 是脉冲噪声尖峰。从小到大排序后[2.1, 2.2, 2.3, 2.4, 100]中位数是正中间的2.3条件中值检测脉冲噪声是怎么实现的呢完整的检测流程分 3 步滑动窗口取数窗口从信号开头往后滑动每次移动 1 个采样点每次取窗口内的 L 个连续信号点。计算窗口中值对窗口内的数排序取中位数 mf(k)作为正常信号的参考值。条件判断检测噪声设定一个噪声阈值 Th计算当前点原始值和中值的差值绝对值做判断3. 信号相关的阶序均值算法检测脉冲噪声SD-ROM 全称是信号依赖型排序均值算法Signal-Dependent Rank-Order Mean它是普通中值滤波 / 条件中值滤波的改进版。前面讲的中值滤波方法遇到持续时间长、密度高的强脉冲噪声时窗口里的噪声点会变多计算量会大幅上升检测准确率也会下降。SD-ROM 最早是用来给图片去除脉冲噪声比如照片的椒盐噪点的这里改成了 1 维信号版本用固定的 5 点滑动窗口计算量小对高密度脉冲噪声的检测效果比普通中值法更好。它的核心思路不直接拿当前点和中位数比大小而是先把窗口里的数按大小排序根据信号的局部分布自动选择差值的计算方式通过排序后的差值大小判断中间的点是不是异常脉冲。具体的实现过程如下步骤 1取 5 点滑动窗口窗口每次取连续的 5 个信号点记为 X1, X2, X3, X4, X5其中 X3 是窗口正中间的点也就是我们当前要检测的目标点。窗口每次向后滑动 1 个位置下一个窗口就变成 X2, X3, X4, X5, X6继续检测新的中间点 X4以此类推滑完整个信号。步骤 2排序得到把这 5 个数从小到大排序得到排序后的序列 r1, r2, r3, r4, r5。步骤 3计算排序差值 di步骤四脉冲噪声检测如果满足以下两个条件中的任何一个,则算法检测到脉冲噪声X3三种方法对比