科研菜鸟分享 http://blog.sciencenet.cn/u/sanshiphy 聚沙成塔,集腋成裘 leilphy@gmail.com

博文

Matlab: 利用filter函数求滑动平均

已有 29648 次阅读 2009-10-29 16:28 |个人分类:技术备忘录|系统分类:科研笔记| filter, 滑动平均

    Matlab有多种计算滑动平均的方法,现介绍基于filter函数的计算方法。设原始数据为x,平均窗口设为a(a为正整数),那么无权重滑动平均后的数据y为:
windowSize = a;

y=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;

y1=filter
(ones(1,a/2+1)/windowSize,1,x);
y2=filter(ones(1,a/2+1)/windowSize,1,fliplr(x));
y=y1+fliplr(y2)-(1/a)*x;

如利用1-2-1 滤波器计算有权重的中心滑动平均,其Matlab语句为:
y1=filter([0.5 0.25],1,x);
y2=filter([0.5 0.25],1,fliplr(x));
y=y1+fliplr(y2)-0.5*x;


https://blog.sciencenet.cn/blog-200199-265965.html

上一篇:Matlab:数据的排列
下一篇:大气边界层风速增量的概率密度函数(Probability Density Functi
收藏 IP: .*| 热度|

0

发表评论 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-7-28 18:14

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部