视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Matlab滑动平均
2025-09-27 20:00:12 责编:小OO
文档
Matlab: 利用filter函数求滑动平均(zz) 

2011年06月19日 星期日 13:47

滑动平均(moving average):在地球物理异常图上,选定某一尺寸的窗口,将窗口内的所有异常值做算术平均,将平均值作为窗口中心点的异常值。按点距或线距移动窗口,重复此平均方法,直到对整幅图完成上述过程,这种过程称为滑动平均。

滑动平均相当于低通滤波,在重力勘探和测井资料处理解释中常用此方法。

如果滑动窗长为n的话,滑动平均就是让数据通过一个n点的FIR滤波器,滤波器抽头系数都是1,这样取滑动平均就是起到序列平滑的作用。

  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;下载本文

显示全文
专题