文档介绍:滑动平均滤波详解
(573308146@)
2014-8-25
滑动平均滤波法又称递推平均滤波法,对于离散系统而言,
实现方法:
连续取 N 个采样值看成一个循环队列,队列的长度固定为 N,每次采样到一个新数据
放入队尾,并扔掉原来队首的一个数据(先进先出原则),滤波器每次输出的数据总是当前队列
中的 N 个数据的算术平均值。
优点:
1. 对周期性干扰有良好的抑制作用,平滑度高;
2. 适用于高频振荡的系统。
缺点:
1. 灵敏度低;
2. 对偶然出现的脉冲性干扰的抑制作用较差;
3. 不易消除由于脉冲干扰所引起的采样值偏差;
4. 不适用于脉冲干扰比较严重的场合;
5. 比较占用 RAM 资源。
matlab 代码:
function [ output_A ] = fifo_filter( input_A,fifo_size )
%求数组的 fifo_size 个数据的滑动平均滤波值
% 对 input_A 的每一列进行滑动平均滤波
fifo_size=floor(fifo_size);
if(fifo_size<=1)
output_A=input_A;
return ;
end
fifo_p=1;
sa=size(input_A);
line=sa(1);
col=sa(2);
fifo=zeros(fifo_size,col);
fifo_sum=zeros(1,col);
for n=1:line;
fifo_sum=fifo_sum-fifo(fifo_p,:)+input_A(n,:);
fifo(fifo_p,:)=input_A(n,:);
fifo_p=fifo_p+1;
if(fifo_p>fifo_size)
fifo_p=1;
end
temp_A(n,:)=fifo_sum/fifo_size;
end
output_A=temp_A;
end
对于连续系统而言,滤波器输出的表达式如下:
1 t
y( t ) f ( x ) dx (1)
t T0
T0
式(1)中,y(t)是滤波器的输出,f(x)是滤波器的输入,T0 是滑动滤波长度。
在 matlab 的 simulink 中有一个 mean 模块就是这种滤波器。
以下将讨论滑动平均滤波器的幅频响应曲线。
设输入信号表达式是:
2
f( t ) cos( t) (2)
T
设滤波器的周期为 T0,并令:
T0 kT R;( k 0,1,2...;0 R T ) (3)
那么滤波器输出信号的幅值如下式计算得到:
2R 2
A 2 cos( t) dt (4)
0
T0 T
整理得到:
T T
Asin(0 k) (5)
T0 T
令:
f T0
fn