用RLS算法实现自适应均衡器的MATLAB程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用RLS算法实现自适应均衡器的MATLAB程序

考虑一个线性自适应均衡器的原理方框图如《现代数字信号处理导论》p.275自适应均衡器应用示意图。随机数据产生双极性的随机序列x[n],它随机地取+1和-1。随机信号通过一个信道传输,信道性质可由一个三系数FIR滤波器刻画,滤波器系数分别是0.3,0.9,0.3。在信道输出加入方差为σ平方高斯白噪声,设计一个有11个权系数的FIR结构的自适应均衡器,令均衡器的期望响应为x[n-7],选择几个合理的白噪声方差σ平方(不同信噪比),进行实验。

用RLS算法实现这个自适应均衡器,画出一次实验的误差平方的收敛曲线,给出最后设计滤波器系数。一次实验的训练序列长度为500。进行20次独立实验,画出误差平方的收敛曲线。给出3个步长值的比较。

仿真结果:

用RLS算法设计的自适应均衡器系数

1 2 3 4 5 6 7 8 9 10 11 号

20

0.0051 -0.0118 0.0290 -0.0792 0.2077 -0.5458 1.4606 -0.5405 0.1926 -0.0663 0.0173 次

1

0.0069-0.01570.0265-0.07420.1966-0.5349 1.4514-0.53930.1987-0.07560.0251次

结果分析:

可以看到,RLS算法的收敛速度明显比LMS算法快,并且误差也比LMS算法

小,但是当用更小的忘却因子时,单次实验结果明显变坏,当忘却因子趋于0

时,LS算法也就是LMS算法。

附程序:

1. RLS法1次实验

% written in 2005.1.13

% written by li***

clear;

N=500;

db=25;

sh1=sqrt(10^(-db/10));

u=1;

m=0.0001*sh1^2;

error_s=0;

for loop=1:1

w=zeros(1,11)';

p=1/m*eye(11,11);

V=sh1*randn(1,N );

Z=randn(1,N)-0.5;

x=sign(Z);

for n=3:N;

M(n)=0.3*x(n)+0.9*x(n-1)+0.3*x(n-2);

end

z=M+V;

for n=8:N;

d(n)=x(n-7);

end

for n=11:N;

z1=[z(n) z(n-1) z(n-2) z(n-3) z(n-4) z(n-5) z(n-6) z(n-7) z(n-8) z(n-9) z(n-10)]';

k=u^(-1).*p*z1./(1+u^(-1).*z1'*p*z1);

e(n)=d(n)-w'*z1;

w=w+k.*conj(e(n));

p=u^(-1).*p-u^(-1).*k*z1'*p;

y(n)=w'*z1;

e1(n)=d(n)-w'*z1;

end

error_s=error_s+e.^2;

end

w

error_s=error_s./1;

n=1:N;

plot(n,error_s);

xlabel('n (忘却因子u=1;DB=25时)');

ylabel('误差');

title('RLS法1次实验误差平方的均值曲线');

2. RLS法20次实验

% written in 2005.1.13

% written by li***

clear;

N=500;

db=25;

sh1=sqrt(10^(-db/10));

u=1;

m=0.0001*sh1^2;

error_s=0;

for loop=1:20

w=zeros(1,11)';

p=1/m*eye(11,11);

V=sh1*randn(1,N );

Z=randn(1,N)-0.5;

x=sign(Z);

for n=3:N;

M(n)=0.3*x(n)+0.9*x(n-1)+0.3*x(n-2);

end

z=M+V;

for n=8:N;

d(n)=x(n-7);

end

for n=11:N;

z1=[z(n) z(n-1) z(n-2) z(n-3) z(n-4) z(n-5) z(n-6) z(n-7) z(n-8) z(n-9) z(n-10)]';

k=u^(-1).*p*z1./(1+u^(-1).*z1'*p*z1);

e(n)=d(n)-w'*z1;

w=w+k.*conj(e(n));

p=u^(-1).*p-u^(-1).*k*z1'*p;

y(n)=w'*z1;

e1(n)=d(n)-w'*z1;

end

error_s=error_s+e.^2;

end

w

error_s=error_s./20;

n=1:N;

plot(n,error_s);

xlabel('n (忘却因子u=1;DB=25时)');

ylabel('误差');

title('RLS法20次实验误差平方的均值曲线');

相关文档
最新文档