常用滤波算法总结
限幅滤波
公式:
y(k)={x(k),∣x(k)−y(k−1)∣≤Δy(k−1),∣x(k)−y(k−1)∣>Δ y(k)= \begin{cases} x(k), & |x(k) - y(k-1)| \le \Delta \\ y(k-1), & |x(k) - y(k-1)| > \Delta \end{cases}y(k)={x(k),y(k−1),∣x(k)−y(k−1)∣≤Δ∣x(k)−y(k−1)∣>Δ
限幅滤波 限定一个最大变化幅度,如果大于门限则抛弃当前值,使用上一个值。
中值滤波
公式
y(k)=median{x(k),x(k−1),…,x(k−N+1)} y(k) = \text{median}\{x(k), x(k-1), \dots, x(k-N+1)\}y(k)=median{x(k),x(k−1),…,x(k−N+1)}
中值滤波通过滑动窗口,在窗口中数据(奇数个)排序取中值
算术平均滤波与滑动平均滤波
算数平均滤波
公式
y(k)=1N∑i=0N−1x(k−i) y(k) = \frac{1}{N} \sum_{i=0}^{N-1} x(k-i)y(k)=N1i=0∑N−1x(k−i)
算数平均滤波是每取N个值,从其中找一个平均值作为输出
滑动平均滤波
公式
y(k)={1k∑i=1kx(i),k<N1N∑i=k−N+1kx(i),k≥N y(k) = \begin{cases} \dfrac{1}{k} \sum_{i=1}^{k} x(i), & k < N \\[10pt] \dfrac{1}{N} \sum_{i=k-N+1}^{k} x(i), & k \ge N \end{cases}y(k)=⎩⎨⎧k1∑i=1kx(i),N1∑i=k−N+1kx(i),k<Nk≥N
滑动平均滤波比算数平均滤波速度更快
一阶低通滤波
公式(实时递归)
y(k)=α⋅x(k)+(1−α)⋅y(k−1) y(k) = \alpha \cdot x(k) + (1 - \alpha) \cdot y(k-1)y(k)=α⋅x(k)+(1−α)⋅y(k−1)
和前面的滤波算法相似都有延迟问题 只有中值滤没有延迟
还有一种的通过转频域加窗处理会显著去除延迟问题,但是保留著够多的备选数据本质上也是一种延迟。
一阶高通滤波
公式(实时递推)
y(k)=α⋅y(k−1)+α⋅(x(k)−x(k−1)) y(k) = \alpha \cdot y(k-1) + \alpha \cdot \big( x(k) - x(k-1) \big)y(k)=α⋅y(k−1)+α⋅(x(k)−x(k−1))
带通滤波
带通滤波一般使用二阶及以上的滤波方式,一阶截至带太大,效果不明显
如何解决延迟问题
组合使用
限幅滤波+一阶低通滤波
限幅滤波+滑动平均滤波
有限脉冲响应(FIR)
有限脉冲响应只通过有效输入参数运算无输参数加权计算,比如限位滤波、算术平均滤波、滑动平均滤波等
无限脉冲响应(IIR)
无限脉冲响应需要之前的输出参数参与加权运算,比如一阶低通滤波、卡尔曼滤波等
小波变换滤波
小波变化滤波的去噪原理是设定一个门限值认为超过门限的都是有效的数据比门限低的都是噪声
流程就是
小波分解为 A尺度系数 和小波系数
通过门限控制效果系数的值来控制还原后噪声的抑制效果