matlab实现滑动平均滤波(二)
来源:互联网 发布:网络群众路线 编辑:程序博客网 时间:2024/05/22 15:43
滑动平均(moving average):在地球物理异常图上,选定某一尺寸的窗口,将窗口内的所有异常值做算术平均,将平均值作为窗口中心点的异常值。按点距或线距移动窗口,重复此平均方法,直到对整幅图完成上述过程,这种过程称为滑动平均。
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.50.25],1,x);
y2=filter([0.5 0.25],1,fliplr(x));
y=y1+fliplr(y2)-0.5*x;
滑动平均相当于低通滤波,在重力勘探和测井资料处理解释中常用此方法。 如果滑动窗长为n的话,滑动平均就是让数据通过一个n点的FIR滤波器,滤波器抽头系数都是1,这样取滑动平均就是起到序列平滑的作用。
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.50.25],1,x);
y2=filter([0.5 0.25],1,fliplr(x));
y=y1+fliplr(y2)-0.5*x;
0 0
- matlab实现滑动平均滤波(二)
- matlab实现滑动平均滤波(一)
- C语言实现的滑动平均滤波算法
- 移动平均滤波的原理---matlab函数的实现smooth
- 滑动均值滤波的matlab实现和Java实现
- 递推平均滤波法(又称滑动平均滤波法)demo code
- // 递推平均滤波法(又称滑动平均滤波法)
- 中值滤波 matlab实现
- 算法学习笔记之滑动平均滤波算法
- 算法学习笔记之滑动平均滤波算法
- 图像平滑-平均滤波、高斯滤波、中值滤波——MATLAB
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- CCF权限查询
- 200. Number of Islands
- C++11 lambda函数
- SQL查询
- 51单片机定时计数器
- matlab实现滑动平均滤波(二)
- 虚析构函数的作用
- 使用Android studio问题,工程路径含中文字报错
- C语言也有大学问——详解交换两个数
- 面试问题总结
- Android动画--布局动画 LayoutAnimation
- 重构基于Yeoman脚手架生成的Express项目
- 关于node安装bower问题
- 1