logo资料库

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

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
用 RLS 算法实现自适应均衡器的 MATLAB 程序 考虑一个线性自适应均衡器的原理方框图如《现代数字信号处理导论》p.275 自适应均衡器应用示意图。随机数据产生双极性的随机序列 x[n],它随机地取+1 和-1。随机信号通过一个信道传输,信道性质可由一个三系数 FIR 滤波器刻画, 滤波器系数分别是 0.3,0.9,0.3。在信道输出加入方差为σ平方 高斯白噪声, 设计一个有 11 个权系数的 FIR 结构的自适应均衡器,令均衡器的期望响应为 x[n-7],选择几个合理的白噪声方差σ平方(不同信噪比),进行实验。 用 RLS 算法实现这个自适应均衡器,画出一次实验的误差平方的收敛曲线, 给出最后设计滤波器系数。一次实验的训练序列长度为 500。进行 20 次独立实 验,画出误差平方的收敛曲线。给出 3 个步长值的比较。 仿真结果: 1
2
3
4
用 RLS 算法设计的自适应均衡器系数 1 2 3 4 5 6 7 8 9 10 11 0.0051 -0.0118 0.0290 -0.0792 0.2077 -0.5458 1.4606 -0.5405 0.1926 -0.0663 0.0173 0.0069 -0.0157 0.0265 -0.0742 0.1966 -0.5349 1.4514 -0.5393 0.1987 -0.0756 0.0251 序 号 20 次 1 次 结果分析: 可以看到,RLS 算法的收敛速度明显比 LMS 算法快,并且误差也比 LMS 算法 小,但是当用更小的忘却因子时,单次实验结果明显变坏,当忘却因子趋于 0 时,LS 算法也就是 LMS 算法。 5
附程序: 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 ylabel('误差'); title('RLS 法 1 次实验误差平方的均值曲线 '); (忘却因子 u=1;DB=25 时)'); 6
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 次实验误差平方的均值曲线 '); 7
分享到:
收藏