滑动平均滤波算法——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+11i=ki=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

你可能感兴趣的:(MATLAB,算法,matlab)