自适应滤波器的MATLAB实现
2009级
1引言
滤波是信号与信息处理领域的一种最基本而又重要的技术。在信号的传输过程中,通常会受到噪声或干扰的污染,而滤波器就是用来从含有噪声或干扰信号的数据中提取人们感兴趣的、接近规定质量的信息。滤波器实际上是一种选频系统,它对某些频率的信号予以很小的衰减,让该部分信号顺利通过;而对其他不需要的频率信号则予以很大的衰减,尽可能阻止这些信号通过。通信与信息系统李晓燕
2自适应滤波器简介
在设计维纳和卡尔曼滤波器时,要求已知所要处理的数据统计方面的先验知识。只有当输入数据的统计特性与滤波器设计所依赖的某一先验知识匹配时,该滤波器才是最优的。但在很多情况下人们对此并不知道或知道甚少,某些情况下这些统计特性还是时变的。为了处理上述的这种情况,可采用自适应滤波器。采用这样的系统,意味着滤波器是自设计的,即自适应滤波器依靠递归算法进行计算,这使其有可能在无法获得有关信号特征完整知识的环境下,完满的完成滤波运算。
3自适应滤波器的应用
自适应滤波器具有在未知环境下良好运行并跟踪时变输入统计量的能力,使得自适应滤波器成为信号处理和自动控制应用的有力手段。实际上,自适应滤波器已经成功的应用与雷达、通信、声纳、地震学和生物医学工程等领域。这些应用在特性方面千变万化,但有一个共同的基本特征,即用输入向量和期望响应来计算估计误差,并用该误差依次控制一组可调滤波器系数。然而自适应滤波器各种应用之间的本质不同在于其期望响应的获取方式不同,根据这一原则,可将自适应滤波器应用分为四种类型,如下:自适应滤波的类型
辨识
逆模型应用系统辨识分层地球建模
均衡用途给定一个未知的动态系统,设计一个自适应滤波器以逼近该动态系统在地震探测中,开发研究地球的分层模型给一个未知脉冲的信道,自适应均衡器通过操作信道输出,使得信道与均衡器
的级联提供理想传输媒介的一个良好逼近
预测预测编码自适应预测用来对感兴趣的信号建模,而不是直接对信号编码。在该编码中,
预测误差被编码以便于传输和存储。
谱分析
消除干扰噪声消除
波束形成预测模型用于估计某一感兴趣信号的功率谱从接收信号中去除噪声以改善信噪比,如心电图学中的应用自适应波束形成器用于控制加权系数以便消除与未知方向阵列密切有关的干扰
信号,并对感兴趣的目标信号提供保护
4自适应滤波器的原理
自适应滤波器是相对固定滤波器而言的。固定滤波器属于经典滤波器,它滤波的频率是固定的。而自适应滤波器滤波的频率则是自动适应输入信号而变化的,所以其适用范围更广。在没有任何关于信号和噪声的先验知识的条件下,自适应滤波器利用前一时刻已获得的滤波器参数等结果来自动调节现时刻的滤波器参数,以适应信号和噪声未知或随机变化的统计特性,从而实现最优滤波。自适应滤波器实质上就是一种能调节其自身传输特性以达到最优化的维纳滤波器。
自适应滤波器一般由两部分组成:滤波器结构和调整滤波器系数的自适应算法。自适应滤波器的结构
采用FIR或IIR结构均可,但由于IIR滤波器存在稳定性问题,因此一般采用FIR滤波器作为自适应
滤波器的结构。
自适应滤波器
上图为自适应滤波器结构的一般形式,图中x(n)为输入信号,通过参数可调的数字滤波器后产生输出信号y(n),再将y(n)与期望信号(或为标准信号)d(n)进行比较后,得到了误差信号e(n)。e(n)和x(n)通过自适应算法对滤波器的参数进行调整,最终使得误差信号e(n)最小。
自适应滤波器设计中最常用的是FIR
横向型结构。
横向型滤波器
上图是横向型滤波器的结构示意图。其中:x(n)为自适应滤波器的输入;w(n)为自适应滤波器的冲激响应;w(n)={w(0),w(1),…,w(N-1)};y(n)为自适应滤波器的输出;y(n)=x(n)*w(n)。即y(n)=WT(n)X(n)=∑wi(n)x(n−i)
i=0N−1。
5自适应滤波算法
自适应滤波器主要是根据其输入的统计特性进行设计的。自适应滤波器的算法则以各种判据条件作为推算基础。通常有两种判据条件:最小均方误差判据和最小二乘方判据。LMS算法是以最小均方误差为判据的最典型的算法,也是一种易于实现、性能稳健、应用广泛的算法。LMS算法最显著的特点是它的简单性,此外它不需要计算有关的相关函数,也不需要矩阵求逆运算。
LMS算法是一种有用的估计梯度的方法,其目的是通过调整系数,使输出误差序列e(n)=d(n)-y(n)的均方值最小化,并且根据这个判据来修改权系数。其中误差序列的均方值又叫“均方误差”(MeanSqluareError,MSE)。一般来说,此算法包含两个基本过程:一是滤波过程,包括计算滤波器输出对输入信号的响应和通过比较输出结果与期望响应产生估计误差。二是自适应过程,即根据估计误差自动调整滤波器参数。这两个过程一起工作组成一个反馈环。
LMS算法最核心的思想是用平方误差代替均方误差。即
∂e2(n)∂e2(n)∂e2(n)∂e2(n)T∇(n)≈∇(n)==[......]∂w∂ω0∂ω1∂ωl∧∆
∴∇(n)=2e(n)∂e(n)=−2e(n)x(n)∧
∂w
将上式带入最陡下降法迭代计算权矢量的公式,得
w(n+1)=w(n)−µ∇(n)
LMS算法的基本公式是:∧
w(n+1)=w(n)+2µe(n)x(n)
其中µ是收敛因子,又称为步长参数,决定了收敛速度和稳定性,µ满足:0〈µ〈1
λmax,λmax是Rxx的最
大特征值,Rxx=E{X(n)XT(n)}。
使用MATLAB这个工具可以较好的观察和分析各种LMS的收敛性能。
基本LMS算法的M程序:
clearall
closeall
clc
a1=-0.195;
a2=0.95;
u=0.03;%步长因子
N=2;%滤波器阶数
N1=1000;%数据总长
N2=512;%截取长度
K=100;%独立实验次数
var_v=0.0961;%噪声方差
M1=0;%理论失调参数
M2=0;%计算失调参数
p1=0.9;
p2=1.1;
u1=zeros(1,N1);
u2=zeros(1,N2);
Jn_aver=zeros(1,N2);
W=zeros(1,N);
J=0;
fori=1:K
v=sqrt(var_v)*randn(1,N1);
form=1:N1-2
u1(m+2)=-a1*u1(m+1)-a2*u1(m)+v(m);
end
u2=u1(N1-N2+1:N1);%取后N2个稳定值
w=zeros(1,N);%初始化权向量w(0)=w(1)=0
err=0;%估计误差
d=0;%期望信号
u3=zeros(1,N);%输入向量初始化
u4=[zeros(1,N)u2];
Jn=zeros(1,N2);
forn=1:N2
w=w+u*u3*conj(err);%权向量的更新
u3=u4(n+N-1:-1:n);%更新输入向量u3=[u4(n+1)u4(n)]
d=conj(w)*(u3.');%期望信号估计
err=u4(n+2)-d;%估计误差
Jn(n)=(abs(err)).^2;%均方误差
end
Jn_aver=Jn_aver+Jn;
W=W+w;
end
EJex_inf=u*var_v*(p1+p2)/(2-u*(p1+p2))%剩余均方误差统计平均值E[Jex(inf)]
M1=EJex_inf/var_v%计算理论失调
W=W./K%权向量
Jn_aver=Jn_aver./K;
Jex_n=Jn_aver(N2)-var_v%n次迭代后的剩余均方误差值
M2=Jex_n/var_v%n次迭代后的失调
plot(Jn_aver);
title(['LP(2)LMS学习曲线u=0.05,w=',num2str(W)])
gridon
xlabel('n/迭代次数');
ylabel('E[Jn(n)]');
axis([15120
1.5]);
6自适应滤波算法的理论仿真
采用自适应滤波器技术可以实现信噪分离,也就是去噪。用Matlab工具编程如下:
samples_per_period=40;%周期采样频率
N=10*samples_per_period-1;%总采样次数
signal=sin(2*pi*0.02*[0:N-1]);%初始输入信号
figure;%作图1的第一子图
subplot(2,1,1);
plot(signal);
grid;
title('自适应滤波器的理想输入');
nvar=0.5;%噪声方差
noise=nvar*randn(1,N);%噪声信号
X=signal+noise;%带加性噪声的输入信号
delayX=[0X];%输入信号延时
SIGNAL=[signal0];
M=32;%滤波器长度
mu=0.035;%迭代步长
subplot(2,1,2);%作图1的第二子图
plot(delayX);
grid;
title('自适应滤波器的噪声输入');
initial_status=initlms(zeros(1,M),mu);%滤波器设初值
[Y,e,initial_status]=adaptlms(X,SIGNAL,initial_status);%LMS自适应滤波器输出
figure;
plot(0:N-1,Y,'.',0:N,SIGNAL,'k');
grid;
title('预测信号与实际信号的比较');
legend('预测信号','实际信号');
当signal=sin(2*pi*0.02*[0:N-1])
①M=32
②
M=16
③M=64
当signal=sin(2*pi*0.01*[0:N-1])
①
M=32
②M=16
③
M=64
可以看出,LMS自适应滤波器在噪声消除方面具有很好的效果,且在信噪比较小的情况下也可以完成一定条件下的数字滤波任务,但此法仍然有许多需要改进的地方,如在信噪比较小的时候,需要滤波器的长度比较大,这样滤波器在实时处理方面受到很大限制。
自适应滤波器的MATLAB实现
2009级
1引言
滤波是信号与信息处理领域的一种最基本而又重要的技术。在信号的传输过程中,通常会受到噪声或干扰的污染,而滤波器就是用来从含有噪声或干扰信号的数据中提取人们感兴趣的、接近规定质量的信息。滤波器实际上是一种选频系统,它对某些频率的信号予以很小的衰减,让该部分信号顺利通过;而对其他不需要的频率信号则予以很大的衰减,尽可能阻止这些信号通过。通信与信息系统李晓燕
2自适应滤波器简介
在设计维纳和卡尔曼滤波器时,要求已知所要处理的数据统计方面的先验知识。只有当输入数据的统计特性与滤波器设计所依赖的某一先验知识匹配时,该滤波器才是最优的。但在很多情况下人们对此并不知道或知道甚少,某些情况下这些统计特性还是时变的。为了处理上述的这种情况,可采用自适应滤波器。采用这样的系统,意味着滤波器是自设计的,即自适应滤波器依靠递归算法进行计算,这使其有可能在无法获得有关信号特征完整知识的环境下,完满的完成滤波运算。
3自适应滤波器的应用
自适应滤波器具有在未知环境下良好运行并跟踪时变输入统计量的能力,使得自适应滤波器成为信号处理和自动控制应用的有力手段。实际上,自适应滤波器已经成功的应用与雷达、通信、声纳、地震学和生物医学工程等领域。这些应用在特性方面千变万化,但有一个共同的基本特征,即用输入向量和期望响应来计算估计误差,并用该误差依次控制一组可调滤波器系数。然而自适应滤波器各种应用之间的本质不同在于其期望响应的获取方式不同,根据这一原则,可将自适应滤波器应用分为四种类型,如下:自适应滤波的类型
辨识
逆模型应用系统辨识分层地球建模
均衡用途给定一个未知的动态系统,设计一个自适应滤波器以逼近该动态系统在地震探测中,开发研究地球的分层模型给一个未知脉冲的信道,自适应均衡器通过操作信道输出,使得信道与均衡器
的级联提供理想传输媒介的一个良好逼近
预测预测编码自适应预测用来对感兴趣的信号建模,而不是直接对信号编码。在该编码中,
预测误差被编码以便于传输和存储。
谱分析
消除干扰噪声消除
波束形成预测模型用于估计某一感兴趣信号的功率谱从接收信号中去除噪声以改善信噪比,如心电图学中的应用自适应波束形成器用于控制加权系数以便消除与未知方向阵列密切有关的干扰
信号,并对感兴趣的目标信号提供保护
4自适应滤波器的原理
自适应滤波器是相对固定滤波器而言的。固定滤波器属于经典滤波器,它滤波的频率是固定的。而自适应滤波器滤波的频率则是自动适应输入信号而变化的,所以其适用范围更广。在没有任何关于信号和噪声的先验知识的条件下,自适应滤波器利用前一时刻已获得的滤波器参数等结果来自动调节现时刻的滤波器参数,以适应信号和噪声未知或随机变化的统计特性,从而实现最优滤波。自适应滤波器实质上就是一种能调节其自身传输特性以达到最优化的维纳滤波器。
自适应滤波器一般由两部分组成:滤波器结构和调整滤波器系数的自适应算法。自适应滤波器的结构
采用FIR或IIR结构均可,但由于IIR滤波器存在稳定性问题,因此一般采用FIR滤波器作为自适应
滤波器的结构。
自适应滤波器
上图为自适应滤波器结构的一般形式,图中x(n)为输入信号,通过参数可调的数字滤波器后产生输出信号y(n),再将y(n)与期望信号(或为标准信号)d(n)进行比较后,得到了误差信号e(n)。e(n)和x(n)通过自适应算法对滤波器的参数进行调整,最终使得误差信号e(n)最小。
自适应滤波器设计中最常用的是FIR
横向型结构。
横向型滤波器
上图是横向型滤波器的结构示意图。其中:x(n)为自适应滤波器的输入;w(n)为自适应滤波器的冲激响应;w(n)={w(0),w(1),…,w(N-1)};y(n)为自适应滤波器的输出;y(n)=x(n)*w(n)。即y(n)=WT(n)X(n)=∑wi(n)x(n−i)
i=0N−1。
5自适应滤波算法
自适应滤波器主要是根据其输入的统计特性进行设计的。自适应滤波器的算法则以各种判据条件作为推算基础。通常有两种判据条件:最小均方误差判据和最小二乘方判据。LMS算法是以最小均方误差为判据的最典型的算法,也是一种易于实现、性能稳健、应用广泛的算法。LMS算法最显著的特点是它的简单性,此外它不需要计算有关的相关函数,也不需要矩阵求逆运算。
LMS算法是一种有用的估计梯度的方法,其目的是通过调整系数,使输出误差序列e(n)=d(n)-y(n)的均方值最小化,并且根据这个判据来修改权系数。其中误差序列的均方值又叫“均方误差”(MeanSqluareError,MSE)。一般来说,此算法包含两个基本过程:一是滤波过程,包括计算滤波器输出对输入信号的响应和通过比较输出结果与期望响应产生估计误差。二是自适应过程,即根据估计误差自动调整滤波器参数。这两个过程一起工作组成一个反馈环。
LMS算法最核心的思想是用平方误差代替均方误差。即
∂e2(n)∂e2(n)∂e2(n)∂e2(n)T∇(n)≈∇(n)==[......]∂w∂ω0∂ω1∂ωl∧∆
∴∇(n)=2e(n)∂e(n)=−2e(n)x(n)∧
∂w
将上式带入最陡下降法迭代计算权矢量的公式,得
w(n+1)=w(n)−µ∇(n)
LMS算法的基本公式是:∧
w(n+1)=w(n)+2µe(n)x(n)
其中µ是收敛因子,又称为步长参数,决定了收敛速度和稳定性,µ满足:0〈µ〈1
λmax,λmax是Rxx的最
大特征值,Rxx=E{X(n)XT(n)}。
使用MATLAB这个工具可以较好的观察和分析各种LMS的收敛性能。
基本LMS算法的M程序:
clearall
closeall
clc
a1=-0.195;
a2=0.95;
u=0.03;%步长因子
N=2;%滤波器阶数
N1=1000;%数据总长
N2=512;%截取长度
K=100;%独立实验次数
var_v=0.0961;%噪声方差
M1=0;%理论失调参数
M2=0;%计算失调参数
p1=0.9;
p2=1.1;
u1=zeros(1,N1);
u2=zeros(1,N2);
Jn_aver=zeros(1,N2);
W=zeros(1,N);
J=0;
fori=1:K
v=sqrt(var_v)*randn(1,N1);
form=1:N1-2
u1(m+2)=-a1*u1(m+1)-a2*u1(m)+v(m);
end
u2=u1(N1-N2+1:N1);%取后N2个稳定值
w=zeros(1,N);%初始化权向量w(0)=w(1)=0
err=0;%估计误差
d=0;%期望信号
u3=zeros(1,N);%输入向量初始化
u4=[zeros(1,N)u2];
Jn=zeros(1,N2);
forn=1:N2
w=w+u*u3*conj(err);%权向量的更新
u3=u4(n+N-1:-1:n);%更新输入向量u3=[u4(n+1)u4(n)]
d=conj(w)*(u3.');%期望信号估计
err=u4(n+2)-d;%估计误差
Jn(n)=(abs(err)).^2;%均方误差
end
Jn_aver=Jn_aver+Jn;
W=W+w;
end
EJex_inf=u*var_v*(p1+p2)/(2-u*(p1+p2))%剩余均方误差统计平均值E[Jex(inf)]
M1=EJex_inf/var_v%计算理论失调
W=W./K%权向量
Jn_aver=Jn_aver./K;
Jex_n=Jn_aver(N2)-var_v%n次迭代后的剩余均方误差值
M2=Jex_n/var_v%n次迭代后的失调
plot(Jn_aver);
title(['LP(2)LMS学习曲线u=0.05,w=',num2str(W)])
gridon
xlabel('n/迭代次数');
ylabel('E[Jn(n)]');
axis([15120
1.5]);
6自适应滤波算法的理论仿真
采用自适应滤波器技术可以实现信噪分离,也就是去噪。用Matlab工具编程如下:
samples_per_period=40;%周期采样频率
N=10*samples_per_period-1;%总采样次数
signal=sin(2*pi*0.02*[0:N-1]);%初始输入信号
figure;%作图1的第一子图
subplot(2,1,1);
plot(signal);
grid;
title('自适应滤波器的理想输入');
nvar=0.5;%噪声方差
noise=nvar*randn(1,N);%噪声信号
X=signal+noise;%带加性噪声的输入信号
delayX=[0X];%输入信号延时
SIGNAL=[signal0];
M=32;%滤波器长度
mu=0.035;%迭代步长
subplot(2,1,2);%作图1的第二子图
plot(delayX);
grid;
title('自适应滤波器的噪声输入');
initial_status=initlms(zeros(1,M),mu);%滤波器设初值
[Y,e,initial_status]=adaptlms(X,SIGNAL,initial_status);%LMS自适应滤波器输出
figure;
plot(0:N-1,Y,'.',0:N,SIGNAL,'k');
grid;
title('预测信号与实际信号的比较');
legend('预测信号','实际信号');
当signal=sin(2*pi*0.02*[0:N-1])
①M=32
②
M=16
③M=64
当signal=sin(2*pi*0.01*[0:N-1])
①
M=32
②M=16
③
M=64
可以看出,LMS自适应滤波器在噪声消除方面具有很好的效果,且在信噪比较小的情况下也可以完成一定条件下的数字滤波任务,但此法仍然有许多需要改进的地方,如在信噪比较小的时候,需要滤波器的长度比较大,这样滤波器在实时处理方面受到很大限制。