您的位置首页百科问答

matlab中的移动平均滤波和中值滤波

matlab中的移动平均滤波和中值滤波

的有关信息介绍如下:

matlab中的移动平均滤波和中值滤波

matlab进行数值分析时,可能要使用滤波,除去数据中的噪声,这里首先介绍移动平均滤波(smooth)和中值滤波(medfilt1)。

首先介绍移动平均滤波,该滤波方法比较简单实用,我经常会用到,因为是一维滤波,所以命令的使用也非常简单。

smooth命令。

aa = sin(0:pi/100:pi);>> bb = randn(101,1);>> aa = aa'>> cc = aa+bb/10;

我们先新建一个一维数组,然后人为的加入一些噪声。

然后可以使用smooth命令:

dd = smooth(cc);

hold on; plot(dd);

但是可以看到滤波效果比较差,这是因为默认的smooth只是对数据周围的5个数据进行移动平均(默认值),我们可以给他指定20个数据进行滤波。

ee = smooth(cc,20);

hold on; plot(ee);

可以看到滤波效果明显较好,但是也不是说数值越高越好,太高的话容易造成数据失真。

当然,移动平均滤波也有滤波方法,比如默认的方法是低通滤波

('moving'),还有线性最小二乘滤波('lowess'),加权的线性最小二乘滤波('loess'),Savitzky-Golay 滤波('sgolay'),'rlowess','rloess'等方法。

下面看看其区别:

ff = smooth(cc,20,'lowess');

figure;plot(ee);hold on; plot(ff);

可以看到lowess滤波方法比单纯的moving方法稍好。

大家可以根据自己的数据调节不同的滤波。

下面介绍中值滤波,medfilt1:

举例来说,输入:Y:1,2,3,4,5,6,7,8,9,10. 取区间2k = 4,所以k=2;

执行中值滤波 K=中值滤波(Y)

由x-k+1>=1,所以当k=2时,x>=2

滤波时:

K=Y

K=(Y、Y、Y、Y)的中间值,即为2或3

107matlab如何实现中值滤波

还是举例介绍吧,同样是上面的cc,aa为原始数据。

xx = medfilt1(cc);

yy = medfilt1(cc,20);

plot(cc);hold on;plot(xx);hold on;plot(yy);

legend('噪声数据','默认中值滤波','20阶中值滤波')

滤波秩序(n,这里是20):

Example:Ifn=11, theny(k)is the median ofx(k-5:k+5).

Example:Ifn=12, theny(k)is the median ofx(k-6:k+5).

如果数据中有NaN值时,可以考虑使用'omitnan','includenan'命令,忽略或者加入NaN值进行滤波。

中值滤波与移动平均滤波对比:

figure;plot(ff);hold on;plot(yy);

legend('移动平均滤波','中值滤波');

可以看到二者区别不大,如果数据不是太复杂的话,二者都可以用。