1. 程式人生 > >Matlab filter實現滑動平均濾波

Matlab filter實現滑動平均濾波

(ones(1,windowSize)/windowSize,1,x);
上述命令實際上計算的是:
y(1)=(1/a)*x(1);
y(2)=(1/a)*x(2)+(1/a)*x(1);
... ...
y(a)=(1/a)*x(a)+(1/a)*x(a-1)+...+(1/a)*x(1);
... ...
y(i)=(1/a)*x(i)+(1/a)*x(i-1)+...+(1/a)*x(i-a+1);
... ....

可以看出,計算某一位置處的平均值時,視窗的前端位於該處。有時為了將視窗中部放在所計算的位置處,這樣上述計算方式則變為(為敘述方便起見,設a為奇數):
y(1)=(1/a)*x(1)+(1/a)*x(2)+...+(1/a)*x((a+1)/2);
y(2)=(1/a)*x(1)+(1/a)*x(2)+...+(1/a)*x((a+1)/2+1);
... ...
y((a+1)/2)=(1/a)*x(1)+(1/a)*x(2)+...+(1/a)*x((a+1)/2)+...+(1/a)*x(a);
... ...
y(i)=(1/a)*x(i-(a-1)/2)+(1/a)*x(i-(a-1)/2+1)+...+(1/a)*x(i)+...+(1/a)*x(i+(a-1)/2);
... ...

這種方式的滑動平均稱為中心滑動平均,其Matlab的計算語句為:
windowSize = a;