滑动平均滤波算法——MATLAB实现
算法原理
滑动平均滤波算法的基本思想是设定一个宽度固定的滑动窗口,该窗口沿着时间序列滑动,同时取窗内数据的算术平均值作为输出值,而由输出值组成另一个数字序列,也就是滤波后的序列。设N为滑动窗口的宽度,若N=2k+1,输入、输出分别为
x
(
n
)
x(n)
x(n)和
y
(
n
)
y(n)
y(n),则
y
(
n
)
=
1
2
k
+
1
⋅
∑
i
=
−
k
i
=
k
x
(
n
+
i
)
y(n)=\frac{1}{2k+1}\cdot\sum^{i=k}_{i=-k}{x(n+i)}
y(n)=2k+11⋅i=−k∑i=kx(n+i)
MATLAB代码实现:
function x1 = MovingAverageFilter(x,win_sz)
% x:待滑动平均的数据
% win_sz:窗宽
if nargin < 2 %默认窗宽等于7
win_sz=7;
end
L = length(x); %数据长度
x1 = zeros(L,1); %平均之后的数据
half_win = ceil(win_sz/2);
half_win_ = floor(win_sz/2);
if half_win==half_win_
half_win = half_win+1;
end
x1(1:half_win) = x(1:half_win);
x1(L-half_win:L) = x(L-half_win:L);
for i = half_win:L-half_win
k=0;
for j = i-half_win_:i+half_win_ %对第i个窗里面的数求平均
k = k+1;
temp(k) = x(j) ; %临时存储第i个窗的数据
end
x1(i) = mean(temp); %第i个窗里面的平均值给第i个数
end
end