声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1969|回复: 0

[编程技巧] RLS自适应均衡算法实例

[复制链接]
发表于 2016-5-12 09:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
  1. <font face="Times New Roman">在LMS自适应均衡器算法的基础上,将其中的LMS的迭代过程换成了RLS算法,如果需要研究RLS自适应均衡器性能的影响参数的话,可以尝试调整均衡器系数和遗忘因子的大小。程序代码如下
  2. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  3. %% RLS算法 实数基带系统仿真程序
  4. % 功能:实数基带系统RLS均衡算法仿真-->BER\MSE指标
  5. % 编写:李振兴
  6. % E-Mail:lizhenxing@126.com
  7. % Tel:
  8. % 任何问题以及错误欢迎通过邮箱交流
  9. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  10. clc
  11. clear all
  12. close all hidden
  13. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  14. %% 初始化参数设置(用户可根据需要修改此处参数)
  15. nFrame = 1;                          % 仿真发送的帧数(可作为蒙特卡洛仿真次数)
  16. nPacket = 5000;                      % 每帧的发送的数据点数
  17. step = 0.01;                        % 学习步长
  18. dB = 25;                             % 信噪比
  19. e = zeros(1,nPacket);                % 瞬时计算误差
  20. E = zeros(1,nPacket);                % 统计均方误差(为平滑用)
  21. h = [0.18,0.3,1,0.18];               %ISI信道参数
  22. h = h/norm(h);
  23. nW = 25;                        % 均衡器阶数
  24. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  25. % 注意:当帧数nFrame不等于1的时候不要绘制星座图!
  26. % nFrame根据需要可以适当设置,只要使得MSE曲线足够平滑就可以
  27. % 均衡器阶数对结果影响较大,这里给出的是经过实验的最佳阶数
  28. % 学习步长不宜设置过大
  29. %% 算法实现过程
  30. LP = nPacket-nW;                 % 移掉几个数据避免负或零下标
  31. X = zeros(nW+1,LP);              % 组织均衡器输入矩阵

  32. % 循环开始(迭代次数=nFrame*nPacket)
  33. for kk = 1:nFrame       % 此处修改蒙特卡洛次数
  34.     W = zeros(nW+1,1);
  35.     sX = round(rand(1,nPacket))*2-1; % BPSK 或 2PAM 信号
  36. %     scatterplot(sX);               % nFrame=1时调试用
  37.     rX = filter(h,1,sX);             % 通过信道
  38. %     scatterplot(rX);               % nFrame=1时调试用
  39.     vn = randn(1,nPacket);           % 产生噪声数据
  40.     vn = vn/norm(vn)*10^(-dB/20)*norm(rX);  % 根据信噪比调整噪声功率
  41.     SNR = 20*log10(norm(rX)/norm(vn));      % 计算SNR
  42.     rX = rX+vn;                             % 接收信号
  43.     XX = sign(rX);
  44.    [num,rate] = symerr(XX,sX)               % 计算均衡前的误码
  45. %     scatterplot(rX);                      % nFrame=1时调试用
  46.     for i=1:LP
  47.          X(:,i)=rX(i+nW:-1:i).';
  48.     end
  49.     %% RLS 迭代算法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  50.     %初始化RLS相关参数%
  51.     lambda = 1.2;        %遗忘因子
  52.     beta = std(rX)^2;     %信号功率   
  53.     P = 1/beta*eye(nW+1,nW+1);  %初始化相关矩阵
  54.     % 开始均衡器参数调整
  55.     for i = 1:LP
  56.         K = (lambda^(-1)*P*X(:,i))/(1+lambda^(-1)*(X(:,i))'*P*X(:,i)); %计算增益矢量
  57.         e(i) = W'*X(:,i)-sX(i);                    %误差
  58.         W = W - conj(K)*e(i);                      %权值更新
  59.         P = lambda^(-1)*P-lambda^(-1)*K*(X(:,i))'*P; %相关矩阵更新
  60.         E(i) = E(i)+e(i)^2;                          %均方误差值
  61.     end
  62.   
  63.     % 计算误码
  64.     rEx = W'*X;                         % 均衡后信号
  65. %   scatterplot(rEx)                  % nFrame=1时调试用
  66.     sDx = sign(rEx);                  % 判决信号
  67.     sErX = sDx-sX(1:length(sDx));         % 寻找误码
  68.     BER=length(find(sErX~=0))/length(sErX)
  69. end

  70. 转自:http://blog.sina.com.cn/s/blog_5def5a660100d537.html
  71. % 平滑误差
  72. plot(10*log10(E))</font>
复制代码

转自:http://blog.sina.com.cn/s/blog_5def5a660100d537.html
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-20 21:00 , Processed in 0.049194 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表