您的当前位置:首页数字信号处理论文

数字信号处理论文

2024-08-09 来源:爱问旅游网
自适应算法变步长LMS 和RLS 的Matlab仿真分析

摘 要

在目前的移动通信领域中,克服多径干扰,提高通信质量是一个非常重要的问题,而自适应滤波器能很好的解决这个问题,自适应滤波器的核心是自适应算法。具体地讲述自适应算法的理论体系,模型及具体实施,分析两种典型的算法最小均方算法(LMS) 和递归最小二次方算法(RLS) ,并根据仿真的结果得出论。

关键词:自适应算法;均方误差;最小均方算法;递归最小二次方算法

在自适应技术中, 参考信号通过自适应滤波器改变权系数, 由此产生的误差信号对期望信号中相关分量进行最佳估计。本文中选择了两种典型的自适应算法FLMS和RSL集中算法对信号进行处理。变步长LMS 算法是一种误差信号对横向自适应滤波器权系数进行更新控制的递归算法,能够更好的逼近所希望的频率响应特性,这种方法是基于当权系数远离于最佳权系数W’,使用较大的步长,加快收敛速度;当权系数接近于最佳权系数W’,使用较小的步长,则获取较小的超量均方误差,从而提高整个算法的性能。RLS算法实际上是FIR维纳滤波器的一种时间递归算法, 它是严格以最小二乘法准则为依据的算法,主要优点是收敛速度快。因此, 其首先在快速信道均衡、实时系统辨识和时间序列分析中得到了广泛应用。

1、算法分析与描述

1.1 新的变步长LMS算法分析

新的变步长LMS算法分析基本的固定步长LMS算法的迭代公式可以表述为:

e(n)d(n)XT(n)W(n) (1) W(n1)W(n)2e(n)X(n) (2) 式中:x(n)表示时刻n时刻的输入信号矢量;w(n)表示n时刻自适应滤波器的权系数;d(n)是期望输出值;e(n)是误差;u是控制稳定性和收敛速度的参量(步长因子)。本文基于文献[6,7]建立一个步长u(n)和误差e(n)的函数关系:反正切函数是一个关于自变量的增函数,且在零附近变化平缓,而且是一个有界函数,函数值不会发散。根据W(k+1)一W(k)=W’=一最佳Wiener解,即2u(n)e(n)X(n)=0并且n,即e(n)X(n)0,求得P(n)最小值。

max根据上述讨论,可将新算法的变步长u(以)取为:(n)tan(e(n)X(n)) 初始时刻|e(n)X(n)|很大,由于反正切是一个自变量的增函数,所以u(n)较大;随着算法不断地向稳态趋近,|e(n)X(n)|不断减小,u(n)也随之不断减小;当达到稳态时,|e(n)X(n)|很小,u(n)也很小,此时的稳态失调误差也很小。

1.2 递推最小二乘(RLS) 算法

递推最小二乘(RLS)算法的递推公式如下:

ωm(n)=ωm(n- 1)+gm(n)[d(n)- xTm(n)ωm(n- 1)] ( 1)

其中, n时刻的最佳ωm(n)可由(n- 1)时刻的最佳值ωm(n)加一修正量得到, 修正量等于gm(n)[d(n)- xTm(n)ωm(n- 1)]。其中xTm(n)ωm(n- 1)为根据(n- 1)时刻的最佳加权和n时刻数据对d (n)的预测值, 因而d(n)- xTm(n)ωm(n- 1)为预测误差。gm(n)确定了根据预测误差进行修正时的比例系数, 因而称之为增益系数。比较式(1)和LMS算法的递推公式ω(n)=ω(n- 1)+2μx(n)[d(n)- xT(n)ωm(n- 1)]可看出两者的差别仅在增益系数上: LMS算法简单利用输入矢量乘上常数μ作增益系数; 而RLS算法则利用了复杂的增益系数gm(n)。

2、Matlab仿真结果与分析

变步长LM S 算法和RLS 算法的MA TLAB 语言实现

2.1 变步长LMS 算法MATLAB 语言实现

1、LMS算法 Matlab语言实现:

N=2000;

inp=randn(N,1); n=randn(N,1);

[b,a]=butter(2,0.25);

Gz=tf(b,a,-1);%得到传递函数 y=lsim(Gz,inp);%%加入噪声 n=n*std(y)/(10*std(n)); d=y+n; plot(d)

totallength=size(d,1); % sysorder=2;

%对80个点进行训练 N=2000; %算法开始 W=zeros(5,1); sysorder=5;

for n=sysorder:N

u=inp(n:-1:n-sysorder+1); y(n)=W'*u;

e(n)=d(n)-y(n);

%开始时使用大步长。之后改用小步长 if n<20 mu=0.32; else mu=0.15; end

W=W+mu*u*e(n);

end

figure plot(y) figure plot(e)

2、RLS Matlab语言实现:

clear all close all hold off

% Number of system points N=2000;

inp = randn(N,1); n = randn(N,1);

[b,a] = butter(2,0.25); Gz = tf(b,a,- 1);

%y(n)=b1*u(n)+b2*u(n- 1)+b3*u(n- 2)- a1*y(n- 1)- a2*y(n- 2) h=[b - a(2:length(a))];

%channel system order fixed as we have 5 elements (3 in a and 2 in b) inporder=3; outorder=2;

sysorder = inporder + outorder ; y = lsim(Gz,inp); %add some noise

n = n * std(y)/(15*std(n)); d = y + n;

totallength=size(d,1);

%Take only 50 points for training ( N - inporder 47 = 50 - 3 ) N=50 ;

%begin of the algorithm %forgetting factor lamda = 0.999 ; %initial P matrix delta = 1e2 ;

P = delta * eye (sysorder ) ; w = zeros ( sysorder , 1 ) ; for n = inporder : N %u(n),u(n- 1),u(n- 2)

u=inp(n:- 1:n- inporder+1) ; %d(n- 1),d(n- 2)

outp= d(n- 1:- 1:n- outorder) ;

u=[u ; outp]; phi = u' * P ;

k = phi' /(lamda + phi * u ); y(n)=w' * u;

e(n) = d(n) - y(n) ; w = w + k * e(n) ;

P = ( P - k * phi ) / lamda ; % Just for plotting

Recordedw(1:sysorder,n)=w; end

%check of results

for n = N+1 : totallength %u(n),u(n- 1),u(n- 2)

u = inp(n:- 1:n- inporder+1) ; %d(n- 1),d(n- 2)

outp= d(n- 1:- 1:n- outorder) ; u=[u ; outp]; y(n) = w' * u ;

e(n) = d(n) - y(n) ; end

hold on plot(d)

plot(y,' r' );

title(' 系统输出' ); xlabel(' 抽样' )

ylabel(' 实际和估计输出' ) figure

semilogy((abs(e))) ; title(' 误差曲线' ) ; xlabel(' 抽样' ); ylabel(' 误差值' ); figure

plot(h, ' r+' ) hold on

plot(w, ' .' )

legend(' 滤波器权值' ,' 估计滤波器权值' ,4); title(' 滤波器权值与估计权值的对比' ) ; figure

plot(Recordedw(1:sysorder,sysorder:N)' ); title(' 估计权值收敛' ) ; xlabel(' 抽样' ); ylabel(' 权值' );

axis([1 N- sysorder min(min(Recordedw(1:sysorder,sysorder:N) ' )) max(max(Recordedw(1:sysorder,sysorder:N)' )) ]);

hold off

2.2 计算机仿真结果

改进的FLM算法仿真:

图一 系统输出

图二 误差曲线

RLS仿真波形:

图三 系统输出

图四 误差曲线

2.3 结论

从图中可以很清楚的看出:

首先,收敛速度的比较:收敛速度越快,算法的效果越好。改进的LMS 算法的收

敛速度与RLS 算法的收敛速度是不相上下的,而以往的LMS 算法的收敛速度与RLS 算法的收敛速度是不能相比的:LMS 经过近400 次运算才收敛,而RLS 只需要几十次甚至是几次运算就已经收敛,即改进的FMS算法提高了收敛速度。 其次,稳定性的比较:稳定性越好,算法就越健壮。改进的FLM滤波器的实际输出与期望响应之间的均方误差较小,变步长的效果也比较明显。但是,较RLS算法相比,RLS算法能够更精确地表示出误差,且误差比较稳定,可以使我们更容易控制和处理。

因此,两种算法各有优势,在实际应用过程中要依实际情况而选择。

参考文献

[1] 数字信号处理[M].机械工业出版社,2005

[2] 丛玉良王宏志数字信号处理原理及其MATLAB实现[M].北京:电子工业出版社,2006

[3] 周辉,董正宏 数字信号处理基础及MATLAB实现[M]中国林业出版社,2006 [4] 高西全,丁玉美数字信号处理第三版)[M].西安:西安电子科技大学出版社,2008

[5] 刘顺兰,吴杰.数字信号处理(第二版)[M].西安:西安电子科技大学出版社,2008

[6] 蔡安妮\"多媒体通信技术基础[M].北京电子工业出版社1995

因篇幅问题不能全部显示,请点此查看更多更全内容