MATLAB仿真实现LMS和RLS算法的二阶AR模型
及仿真结果分析
一、题目概述:二阶AR模型如图1a所示,可以如下差分方程表示:
x(n)v(n)a1x(n1)a2x(n2)v(n)d(n) (1)
图1a
其中,v(n)是均值为0、方差为0.965的高斯白噪声序列。𝑎1,𝑎2为描述性参数,
a10.195,a20,95.设x(-1)=x(-2)=0,权值𝑤1(0)=𝑤2(0)=0,μ=0.04①推导最优
滤波权值(理论分析一下)。②按此参数设置,由计算机仿真模拟权值收敛曲线并画出,改变步长在此模拟权值变化规律。③对仿真结果进行说明。④应用RLS算法再次模拟最优滤波权值。
解答思路:
(1)高斯白噪声用normrnd函数产生均值为0、方差为0.965的正态分布随机1*N矩阵来实现。随后的产生的信号用题目中的二阶AR模型根据公式(1)产生,激励源是之前产生的高斯白噪声。
(2)信号长度N取为2000点,用以观察滤波器权值变化从而估计滤波器系数,得到其收敛值。
(3)仿真时分别仿真了单次LMS算法和RLS算法下的收敛性能以及100次取平均后的LMS和RLS算法的收敛性能,以便更好的比较观察二者的特性。
(4)在用不同的分别取3个不同的μ值仿真LMS算法时,μ值分别取为
文档大全
实用标准文案
0.001,0.003,0.006;用3个不同的λ值仿真RLS算法时λ值分别取为1,0.98,0.94,从而分析不同步长因子、不同遗忘因子对相应算法收敛效果的影响。
二、 算法简介
1.自适应算法的基本原理
自适应算法的基本信号关系如下图所示:
x(n)参数可调数字滤波器y(n)+Σ-e(n)d(n)自适应算法
图 1b 自适应滤波器框图
输入信号x(n)通过参数可调的数字滤波器后产生输出信号y(n),将其与参考信号d(n)进行比较,形成误差信号e(n)。e(n)通过某种自适应算法对滤波器参数进行调整,最终是e(n)的均方值最小。当误差信号e(n)的均方误差达到最小的时候,可以证明信号y(n)是信号d(n)的最佳估计。 2. LMS算法简介
LMS算法采用平方误差最小的原则代替最小均方误差最小的原则,信号基本关系如下:
y(n)wi(n)x(ni)0N1e(n)d(n)y(n) (2)
wi(n1)wi(n)2e(n)x(ni)i(0,1,2,....N1)写成矩阵型式为:
y(n)WT(n)X(n)e(n)d(n)y(n)W(n1)W(n)2e(n)X(n) (3)
W(n)[w0(n),w1(n),....wN1(n)],式(3)中,W(n) 为n 时刻自适应滤波器的权值,
N为自适应滤波器的阶数,本设计中取为2000;X( n) 为n 时刻自适应滤波器的参考输入矢量,由最近N 个信号采样值构成,X(n)[x(n),x(n1),....x(nN1)];d ( n) 是期望的输出值;e ( n) 为自适应滤波器的输出误差调节信号(简称失调信号) ;μ是控制自适应速度与稳定性的增益常数,又叫收敛因子或步长因子。
文档大全
TT实用标准文案
3. RLS算法简介
RLS算法是用二乘方的时间平均的最小化准则取代最小均方准则,并按时间进行迭代计算。其基本原理如下所示:
:遗忘因子,它是小于等于1的正数。
dn:参考信号,也可称为期望信号。
w(n):第n次迭代的权值。
n:均方误差。
RLS算法的准则为:
nnnke2kmin
k0 (4)
上式越旧的数据对n的影响越小。通过计算推导得到系数的迭代方程为:
w(n)=w(n−1)+k(n)𝑒∗(𝑛) (5) 式(5)中,增量k(n)和误差𝑒∗(𝑛)计算公式如下:
k(n)T(n1)x(n) (6) Tx(n)T(n1)x(n) 𝑒∗(𝑛)=𝑑∗(𝑛)−𝑥𝑇(𝑛)∗𝑤(𝑛−1) (7) ̂−1(𝑛),也就是当前时刻自相关矩阵的逆。 式(6)中T(n)= 𝑅
T(n)按如下方式更新:
T(n) = (T(n1)-k(n)*x(n)* T(n1))/ (8) 由上边分析可知,RLS算法递推的步骤如下:
1. 在时刻n,w(n1),T(n1)和d(n),x(n)也已经存储在滤波器的相应器件中 2. 利用公式(5)、(6)、(7)和(8)计算T(n)、w(n)、k(n)、𝑒∗(𝑛),并得到滤波器的
输出相应y(n)和误差e(n)即:
Ty(n)wT(n)x(n) (9) e(n)d(n)y(n) (10)
3. 进入第n1次迭代
这样做的优点是收敛速度快,而且适用于非平稳信号的自适应处理 缺点是每次迭代时都要知道输入信号和参考信号,计算量比较大
文档大全
实用标准文案
三、 仿真过程
仿真过程按照如下过程进行
(1)信号产生:首先产生高斯白噪声序列w(n),然后将此通过一个参数为𝑎1=-0.195,𝑎2=0.95简单的二阶自回归滤波器生成信号x(n)。
(2)将step(1)生成的信号通过LMS和RLS自适应滤波器进行处理
(3)通过改变μ值对𝑤1,𝑤2收敛速度的影响来分析LMS算法的性能以及通过改变λ值对𝑤1,𝑤2收敛速度的影响来分析RLS算法的性能。 (4)绘制相应图形曲线
四、 仿真以及结果分析
信号和高斯白噪声波形如图2所示:
图2 信号和高斯白噪声波形
图2中,上边的图形为信号波形,下边的为加性高斯白噪声。
文档大全
实用标准文案
图3(a)LMS算法下单次收敛曲线
图3(b) LMS算法下百次平均收敛曲线
分析1:
文档大全
实用标准文案
图3中,a、b两幅图分别为单次实现的LMS算法下最优权值变化过程和100次仿真实现后取平均值做的图,两个权值初始值由已知条件设置为0,之后收敛到两个定值。 a图展现了滤波器权系数迭代更新的过程,可以发现其并不是平滑的变化,而是随机起伏的,跟最陡下降法不一样,这充分说明了其权向量是一个随机过程向量,梯度噪声对其产生了一定的影响。
ˆ(n)]的估计,即b图给出了100次独立实验得到的平均权向量E[w
1Tˆt(n)是第t次独立实验中第n次迭代得到的权向量,T是独立实ˆ(n)wˆt(n),其中wwTt1ˆ(n)]的估计平滑了随机梯度引入的验次数。可以发现,多次独立实验得到的平均权向量E[w梯度噪声,十分接近理论最优权向量wopt[0.195,0.95],曲线足够平滑,噪声影响很小。
图3中a、b两图皆有较好的收敛特性,即使1次实现也能很好的逼近最优权值。
T
图4(a)RLS算法下单次收敛曲线
文档大全
实用标准文案
图4(b)RLS算法下百次平均收敛曲线
分析2: 图4中,a、b两幅图分别为单次实现的RLS算法下最优权值变化过程和100次仿真实现后取平均值做的图,a图中可看出权值已有较好收敛特性,两个权值初始值由已知条件设置为0,之后收敛到两个定值:-a1=0.195和-a2=-0.95,,但是曲线不够平滑、噪声较大,b图经过取平均后噪声影响已经很小。单次实现和多次实现的联系与区别也与LMS算法基本相同。
但是可以清晰地看出RLS算法收敛极。将两种算法整合于一个图中可以看出鲜明的对比。
文档大全
实用标准文案
图5 LMS算法和RLS算法收敛曲线对比
分析3:
从图5可以看出,在和一定的情况下,RLS比LMS具有更快的收敛速度。在算法的前期收敛段,RLS算法的收敛速度要明显高于LMS算法。
总的来说,LMS算法的收敛性和步长有关,受协方差矩阵的特征根影响,然而RLS算法一定是收敛的,且收敛速度很快,不过其迭代过程由于要求增益因子和逆矩阵等,使得其算法复杂度高,计算量比较大。
接下来修改步长μ值,观察曲线的收敛情况。图6给出了μ=0.01, μ=0.03和μ=0.06三种情况下的最优权值变化曲线,由此分析不同步长对曲线收敛性产生的影响。
文档大全
实用标准文案
图6 μ对LMS收敛速度的影响
分析4:
可以看出LMS算法中的步长参数μ决定抽头权向量在每步迭代中的更新量,是影响算法收敛速度的关键参数,其决定了LMS算法学习过程的快慢。
图6展示了当收敛步长μ值变小时,其均方误差的收敛速度也相应减慢,降低对实变系统的跟踪速度,不能及时调整至最优权值。 由前面的理论推导我们可以知道01,在这个范围内,μ越大,均方误差
max()收敛速度越快,收敛速度和步长因子成正比。可是如果μ大于这个范围会造成不稳定,较大步长会造成较大的稳态误差,带来算法的发散。
文档大全
实用标准文案
图7 λ对RLS收敛速度的影响
分析5: RLS算法中遗忘因子的作用是对离n时刻越近的误差加比较大的权重,而对离n时刻越远的误差加比较小的比重。遗忘因子的选择对RLS算法的性能起决定性的作用。λ是个小于等于1的数,如果λ越小,能量信号就越接近最新的误差平方,对前面的误差遗忘的越快,跟踪效果就越好。但是,递推RLS算法中的误差是由期望信号决定的,如果λ很小则误差信号对期望信号的依赖性就会很大,所以,输出信号就很接近期望信号。
从图7可以看出,遗忘因子λ越小,系统的跟踪能力越强,收敛的越快(即变平稳得越快),但是收敛值比较大;λ越大,系统跟踪能力减弱,收敛时均方误差也越小,学习曲线收敛值越小。所以,我们在用普通递推RLS算法时,一定要对λ有个准确的取值,才能保证系统性能的最佳状态。 总结:
LMS算法其优点是结构简单,算法复杂度低,易于实现,稳定性高,便于硬件实现,但是这种算法收敛速度慢,对快速变化的信号不适合。RLS算法是基于最小二乘准则的精确方法,它的收敛速度快,稳定性强, 因此常被应用于实时系统识别和快速启动的信道均衡。
文档大全
实用标准文案
附件(程序代码):
%(1)信号序列与高斯白噪声的产生 %参数初始化
a1=-0.195; %生成信号所用AR(2)滤波器的参数 a2=0.95;
N=2000; %信号长度
%信号及白噪声信号序列的初始化 x=zeros(1,N)'; %信号的初始化 sigmasqu=0.0965;%噪声方差
sigma=sqrt(sigmasqu);%噪声标准差
w=normrnd(0,sigma,N)'; %高斯白噪声的初始化,均值为0,方差为0.0965
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);%信号由AR(2)产生 end
%绘制信号和高斯白噪声波形 figure(1)
subplot(2,1,1), plot(1:N,x,'b-') axis([0,2000,-5,5])
title('基于AR(2)模型产生的信号x'); xlabel('信号长度n'); ylabel('x(n)'); subplot(2,1,2), plot(1:N,w,'r-'); axis([0,2000,-5,5])
title('基于AR(2)模型产生的高斯白噪声w(n)'); xlabel('信号长度n'); ylabel('w(n)');
%%%%%%%%%%%%%%%%%%%%%%%---LMS100次叠
加%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=2000;
文档大全
实用标准文案
M=100;%计算的次数
w1=zeros(N,M);w2=zeros(N,M);I1=eye(2);E1=zeros(N,M); wa1=zeros(N,1);wa2=zeros(N,1);en=zeros(N,1);
for k=1:M
e=zeros(1,N)';%定义误差向量
%根据RLS算法进行递推
x=zeros(1,N)'; %信号的初始化 sigmasqu=0.0965;%噪声方差
sigma=sqrt(sigmasqu);%噪声标准差
w=normrnd(0,sigma,N)'; %高斯白噪声的初始化,均值为0,方差为0.0965
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);%信号由AR(2)产生 end
L=2; %滤波器长度
u=0.04; %LMS算法下自适应增益常数初始化 wL=zeros(L,N);%LMS滤波器的权值初始化 for i=(L+1):N
X=x(i-1:-1:(i-L));
y(i)=X'*wL(:,i); %i时刻输出信号 e(i)=x(i)-y(i); %i时刻误差信号
wL(:,(i+1))=wL(:,i)+2*u*e(i)*X; %i时刻滤波器的权值 end;
% a1R=wR(1,1:n); % a1在RLS算法下值的变化 % a2R=wR(2,1:n); % a2在RLS算法下值的变化
w1(:,k)=wL(1,1:N)'; w2(:,k)=wL(2,1:N)';%将每次计算得到的权矢量值储存
E1(:,k)=e(:,1);%将每次计算得到的误差储存
%求权矢量和误差的M次的平均值 wa1(:,1)=wa1(:,1)+w1(:,k); wa2(:,1)=wa2(:,1)+w2(:,k); en(:,1)=en(:,1)+E1(:,k);
文档大全
实用标准文案
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%---止LMS100次叠
加%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%绘制LMS算法下a1、a2单次及100次平均收敛曲线 figure(2)
plot(1:N,w1(1:N,M)','r-',1:N,w2(1:N,M)','b--',1:N,-a2,'k-',1:N,-a1,'k-');
legend('LMS-W1变化','LMS-W2变化','W1收敛值','W2收敛值',0); % 图例 title('LMS单次实现的权值收敛曲线'); xlabel('信号长度n'); ylabel('权值W');
figure(3)
plot(1:N,wa1(1:N,1)./M,'r-',1:N,wa2(1:N,1)./M,'b--',1:N,-a2,'k-',1:N,-a1,'k-');%作出100次计算权矢量的平均变化曲线
xlabel('N');ylabel('W(N)');title('LMS算法下100次仿真W1(n)和W2(n)的平均变化曲线') % %RLS滤波
%%%%%%%%%%%%%%%%%%%%%%%---RLS100次叠
加%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% N=2000;
M=100;%计算的次数
w3=zeros(N,M);w4=zeros(N,M);I2=eye(2);E2=zeros(N,M); wa3=zeros(N,1);wa4=zeros(N,1);en2=zeros(N,1);
for k=1:M
e=zeros(1,N)';%定义误差向量
%根据RLS算法进行递推
x=zeros(1,N)'; %信号的初始化 sigmasqu=0.0965;%噪声方差
sigma=sqrt(sigmasqu);%噪声标准差
w=normrnd(0,sigma,N)'; %高斯白噪声的初始化,均值为0,方差为0.0965
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);%信号由AR(2)产生 end
L=2; %滤波器长度
lam=0.98; %RLS算法下lambda取值 wR=zeros(L,N);%权系数,初值为0
T=eye(L,L)*10;% %RLS算法下T参数的初始化,T初始值为10 for i=(L+1):N
X=x(i-1:-1:(i-L)); K=(T*X)/(lam+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)/lam; %i时刻的维纳解 end;
w3(:,k)=wR(1,:)'; w4(:,k)=wR(2,:)';%将每次计算得到的权矢量值储存
E2(:,k)=e(:,1);%将每次计算得到的误差储存
%求权矢量和误差的M次的平均值 wa3(:,1)=wa3(:,1)+w3(:,k); wa4(:,1)=wa4(:,1)+w4(:,k); en2(:,1)=en2(:,1)+E2(:,k); end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%---止RLS100次叠
加%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% figure(4)
plot(1:N,w3(1:N,M)','r-',1:N,w4(1:N,M)','b--',1:N,-a2,'k-',1:N,-a1,'k-');
legend('RLS-W1变化','RLS-W2变化','W1收敛值','W2收敛值',0); % 图例 title('RLS单次实现权值收敛曲线'); xlabel('信号长度n'); ylabel('权值W');
figure(5)
plot(1:N,wa3(1:N,1)./M,'r-',1:N,wa4(1:N,1)./M,'b--',1:N,-a2,'k-',1:N,-a1,'k-');%作出100次计算权矢量的平均变化曲线
xlabel('N');ylabel('W(N)');title('RLS算法下100次仿真W1(n)和W2(n)的平均变化曲线线')
文档大全
实用标准文案
%绘制LMS与RLS算法下a1、a2收敛曲线 figure(6)
plot(1:N,w1(1:N,1)','r-.',1:N,w2(1:N,1)','b:',1:N,w3(1:N,1)','g--',1:N,w4(1:N,1)','m-',1:N,-a2,'k-',1:N,-a1,'k-');
legend('LMS-W1变化','LMS-W2变化','RLS-W1变化','RLS-W2变化','W1收敛值','W2收敛值',0); % 图例
title('LMS与RLS算法单次实现的对比'); xlabel('信号长度n'); ylabel('权值W');
%(3)LMS算法下不同u值的参数收敛曲线 wL=zeros(L,N,3);
eL=zeros(N,3); % LMS算法下误差初始化
yL=zeros(N,3); % LMS算法下滤波器输出初始化 u=[0.01,0.03,0.06]; %不同的u值 for j=1:3
for i=(L+1):N
yL(i,j)=x(i-1:-1:i-2)'*wL(1:L,i-1,j); eL(i,j)=x(i)-yL(i,j);
wL(1:L,i,j)=wL(1:L,i-1,j)+2*u(j)*eL(i,j)*x(i-1:-1:i-L); end end
a1L1=wL(1,1:N,1); a1L2=wL(1,1:N,2); a1L3=wL(1,1:N,3); a2L1=wL(2,1:N,1); a2L2=wL(2,1:N,2); a2L3=wL(2,1:N,3);
figure(7)
plot(1:N,a1L1,'b-',1:N,a1L2,'r:',1:N,a1L3,'g-.',1:N,-a1,'k',1:N,a2L1,'b-',1:N,a2L2,'r:',1:N,a2L3,'g-.',1:N,-a2,'k') % 画图显示不同u值下LMS算法性能差别
legend('u=0.01','u=0.03','u=0.06','W收敛值',0) % 图例 title('LMS算法下不同的u值对W收敛速度影响') xlabel('信号长度n') ylabel('权值W')
%(4)RLS算法下不同lambda值的参数收敛曲线
wR=zeros(2,N,3); % RLS算法下自适应滤波器参数初始化 eR=zeros(N,3); % RLS算法下误差项初始化
yR=zeros(N,3); % RLS算法下滤波器输出初始化 lam=[1,0.98,0.94];
文档大全
实用标准文案
for j=1:3
for i=(L+1):N
xR=x(i-1:-1:i-2);
k=(T*xR)/(lam(j)+xR'*T*xR); T=(T-k*xR'*T)/lam(j);
eR=x(i)-xR'*wR(1:2,i-1,j); yR(i,j)=xR'*wR(1:2,i-1,j);
wR(1:2,i,j)=wR(1:2,i-1,j)+k*eR; end end
a1R1=wR(1,1:N,1); a1R2=wR(1,1:N,2); a1R3=wR(1,1:N,3); a2R1=wR(2,1:N,1); a2R2=wR(2,1:N,2); a2R3=wR(2,1:N,3);
figure(8)
plot(1:N,a1R1,'b-',1:N,a1R2,'r:',1:N,a1R3,'g-.',1:N,-a1,'k',1:N,a2R1,'b-',1:N,a2R2,'r:',1:N,a2R3,'g-.',1:N,-a2,'k') % 画图显示不同lamda值下RLS算法性能差别
legend('lam=1','lam=0.98','lam=0.94','W收敛值',0) title('RLS算法下不同的lam值对W收敛速度影响') xlabel('信号长度 n') ylabel('权值W')
文档大全
因篇幅问题不能全部显示,请点此查看更多更全内容