由于随机信号的未知性和随时间变化的统计特性,需要设计参数随时间变化的滤波器算法,即所谓的自适应滤波。它是利用前一时刻以获得的滤波器参数的结果,自动的调节现时刻的滤波器参数,以适应信号和噪声未知的或随时间变化的统计特性,从而实现最优滤波。 自适应滤波器的特性变化是由自适应算法通过调整滤波器系数来实现的。不同的自适应滤波器算法,具有不同的收敛速度、稳态失调和算法复杂度。
自适应滤波算法中利用了输出反馈,属于闭环算法。其优点是能在滤波器输入变化时保持最佳的输出,而且还能在某种程度上补偿滤波器元件参数的变化和误差以及运算误差。但其缺点是存在稳定性问题以及收敛速度不高。所以探讨如何提高收敛速度、增强稳定性以满足信号处理的高效性、实时性,一直是人们研究的重点和热点。本文基对比研究了两类基本的自适应算法LMS和RLS,并对它们权系数的收敛过程及学习过程进行了分析。
LMS原理分析:
LMS算法是自适应滤波器中常用的一种算法与维纳算法不同的是其系统的系数随输入序列而改变。维纳算法中截取输入序列自相关函数的一段构造系统的最佳系数。而LMS算法则是对初始化的滤波器系数依据最小均方误差准则进行不断修正来实现的。因此理论上讲LMS算法的性能在同等条件下要优于维纳算法但是LMS算法是在一个初始化值得基础上进行逐步调整得到的因此在系统进入稳定之前有一个调整的时间这个时间受到算法步长因子的控制在一定值范围内增大会减小调整时间但超过这个值范围时系统不再收敛的最大取值为R的迹。LMS采用平方误差最小的原则代替均方误差最小的原则,信号基本关系如下:
RLS算法原理分析:
参数递推估计,每取得一次新的观测数据后,就在前次估计结果的基础上,利用新引入的观测数据对前次估计的结果,根据递推算法进行修正,减少估计误差,从而递推地得出新的参数估计值。这样,随着新观测数据的逐次引入,一次接一次地进行参数估计,直到参数估计值达到满意的精确程度为止。
LMS算法程序:
clear
close all
clc
a1=-1.6;
a2=0.8;
n=1000;
P=50;
e=zeros(1,n);
ep=zeros(1,n);
ee=zeros(1,n);
x=zeros(1,n)';
w=randn(1,n)';
%算法
for p=1:P
x(1)=w(1);
x(2)=-a1*x(1)+w(2);
for i=3:n
x(i)=-a1*x(i-1)-a2*x(i-2)+w(i);
end
L=2;
u=0.0005;
wL=zeros(L,n);
for i=(L+1):n
X=x(i-L:1:(i-1));
y(i)=X'*wL(:,i); %i时刻输出信号
e(i)=x(i)-y(i); %i时刻误差信号
wL(:,(i+1))=wL(:,i)+2*u*e(i)*X; %i时刻滤波器的权值
ee(i)=e(i)^2;
end
ep=ep+ee;
end
eq=ep/P;
a1L=-wL(2,1:n); % a1在LMS算法下值的变化,wL矩阵中第一行的1到n个数
a2L=-wL(1,1:n); % a2在LMS算法下值的变化 ,wL矩阵中第二行的1到n个数
%画图
subplot(2,2,1);
plot(1:n,x);
title('高斯白噪声w');
subplot(2,2,2);
plot(1:n,a1L,'r-',1:n,a1,'k-');
title('a1的学习过程');
subplot(2,2,3);
plot(1:n,a2L,'r-',1:n,a2,'k-');
title('a2的学习过程');
subplot(2,2,4);
plot(1:n,eq);
title('50次平均后的学习过程');
LMS与RLS对比程序:
程序:
clear;
close all;
clc;
a1=-1.6;
a2=0.8;
n=1000;
x=zeros(1,n)';
w=randn(1,n)';
x(1)=w(1);
x(2)=-a1*x(1)+w(2);
for i=3:n
x(i)=-a1*x(i-1)-a2*x(i-2)+w(i);
end;
%LMS滤波
L=2;
u=0.001;
wL=zeros(L,n);
for i=(L+1):n
X=x(i-1:-1:(i-L));
y(i)=X'*wL(:,i);
e(i)=x(i)-y(i);
wL(:,(i+1))=wL(:,i)+2*u*e(i)*X;
end;
a1L=-wL(1,1:n);
a2L=-wL(2,1:n);
%RLS滤波
L=2;
namuta=0.98;
wR=zeros(L,n);
T=eye(L,L)*10;% %RLS算法下T参数的初始化,T初始值为10
for i=(L+1):n
X=x(i-1:-1:(i-L));
K=(T*X)/(namuta+X'*T*X);%i时刻增益值
e1=x(i)-wR(:,i-1)'*X;
wR(:,i)=wR(:,i-1)+K*e1; %i时刻权值
y(i)=wR(:,i)'*X;
e(i)=x(i)-y(i);
T=(T-K*X'*T)/namuta; %i时刻的维纳解
end;
a1R=-wR(1,1:n);
a2R=-wR(2,1:n);
%画图
subplot(2,1,1);
plot(1:n,a1L,'r-',1:n,a1R,'g-',1:n,a1,'k-');
title('LMS与RLS算法a1权系数收敛过程对比');
subplot(2,1,2);
plot(1:n,a2L,'r-',1:n,a2R,'g-',1:n,a2,'k-');
title('LMS与RLS算法a2权系数收敛过程对比');
结果分析:
- RLS算法在算法的稳态阶段即算法的后期收敛阶段其性能和LMS算法相差不明显但在算法的前期收敛段RLS算法的收敛速度要明显高于LMS算法。但是RLS算法复杂度高计算量比较大。
RLS算法与LMS对比:
由于LMS算法只是用以前各时刻的抽头参量等作该时刻数据块估计时的平方误差均方最小的准则,而未用现时刻的抽头参量等来对以往各时刻的数据块作重新估计后的累计平方误差最小的准则,所以LMS算法对非平稳信号的适应性差。RLS算法的基本思想是力图使在每个时刻对所有已输入信号而言重估的平方误差的加权和最小,这使得RLS算法对非平稳信号的适应性要好。与LMS算法相比,RLS算法采用时间平均,因此,所得出的最优滤波器依赖于用于计算平均值的样本数,而LMS算法是基于集平均而设计的,因此稳定环境下LMS算法在不同计算条件下的结果是一致的。在性能方面,RLS的收敛速率比LMS要快得多,因此,RLS在收敛速率方面有很大优势。
图6分别为RLS算法和LMS算法在处理过程中的误差曲线,它指出了在迭代过程中的误差减少过程。由图可见,RLS算法在迭代过程中产生的误差明显小于LMS算法。由此可见,RLS在提取信号时,收敛速度快,估计精度高而且稳定性好,可以明显抑制振动加速度收敛过程,故对非平稳信号的适应性强,而LMS算法收敛速度慢,估计精度低而且权系数估计值因瞬时梯度估计围绕精确值波动较大,权噪声大,不稳定。