如何使用均值和中值滤波器去除噪声?

信息处理 matlab 过滤器 DSP核心
2022-01-29 20:15:04

我可以使用移动平均滤波器去除噪声。MATLAB 代码如下所示。

但是如何使用均值和中值滤波器去除噪声?

在此处输入图像描述

1个回答

您不需要循环。这实现了一个移动平均滤波器、一个中值滤波器和一个中值滤波器,然后是一个移动平均值:

%x = noise1;
x = randn(1,2000)+1;
lengthMean = 5;
lengthMedian = 7;
xFiltMedian = medfilt1(x,lengthMedian);
xFiltMean = filter(ones(lengthMean,1)/lengthMean,1,x);
xFiltMedianMean = filter(ones(lengthMean,1)/lengthMean,1,xFiltMedian);
figure(1);clf;hold on
plot(x(500:1500),'b');
plot(xFiltMedian(500:1500),'r');
plot(xFiltMean(500:1500),'g');
plot(xFiltMedianMean(500:1500),'c');

正如@jojek 所说,对于尖峰和异常值,中值滤波器通常比平均滤波器更有效。如果您选择同时应用这两个过滤器,通常首先应用中值更有用(如上面的代码中所做的那样)。

滤波器长度的选择通常应与信号和噪声的特性(频谱、分布)以及分配的目标有关。但是信号的长度通常不是一个标准。对于对称特性,奇数长度滤波器是实用的。

如果没有进一步的细节,您可以从较长的滤波器开始(例如lengthMedian= 37),看看它们的性能(它们如何降低噪声但也会降低信号的特性),然后逐渐将长度减小到平衡点,此时较短的滤波器不会产生更好的结果.

但是,山谷中的噪声表明它不是静止的,因此您可能需要更多的自适应滤波器(例如,具有不同的长度),或者像加权中值滤波器那样更多地参与,以限制您在长中值时遇到的位置和展平问题过滤器。它在SE 交叉验证上进行了讨论。