1.算法描述

在无线通信体系中,因为多径效应及码间干扰的存在,信号误码率会升高。均衡技能是一种对立码间干扰的重要技能。本文将介绍LMS均衡和RLS均衡两种均衡算法。在线性和非线性均衡中的应用。将MSK信号通过三径多径信道。

因为最陡下降法每次迭代都需要知道功能曲面上某点的梯度值,而实际上梯度值只能依据调查数据进行估量。而L M S LMSLMS实质上是用平方差错替代均方差错,即:

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

得到L M S LMSLMS算法的基本关系式:

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

RLS算法的关键是用二乘方的时刻平均原则取代最小均方原则,并依照时刻进行迭代计算,换句话说,对从起始时刻到当时时刻一切差错的平方进行平均并使之最小化,即:

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

关于,非平稳随机信号,为了更好的跟踪,引入一个指数加权因子对上式进行修正:

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

传统lms算法及归一化lms算法:

  

及其关于平稳进程,最小均方差(least mean square,lms)算法[4][5]是直接利用单次采样数据取得的e2(n)替代均方差错j(n),来进行梯度估量的。其算法流程如下:

  

(1)依据已知数据,希望信号d(n)和滤波器的输入信号矢量x(n)=[x(n)x(n-1)…x(1)]t,设置收敛因子(0<  

(2)初始化滤波器的权矢量w(0)=0(或由先验知识确定)、泄漏因子(0<<1,通常取近似为1);

(3)对n=0,1,2…,计算滤波器输出信号y(n)=xt(n)w(n)、差错信号e(n)=d(n)-y(n)、以及滤波器权更新系数w(n+1)=w(n)+2e(n)x(n);

  

(4)归一化lms算法(nlms)在传统lms算法权值更新上做了调整:w(n+1)=w(n)+2e(n)x(n)/[x(n)x(n)-1+],参数属性与传统lms算法相同,参数为避免x(n)x(n)-1过小权值更新失真而设置。

2.仿真效果预览

matlab2022a仿真成果如下:

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

3.MATLAB核心程序 `l=35;

channel=[0.5,1.2,1.5,-1];

switch qam

case 4

sigam=sqrt(2);%%%QAM4

case 16

sigam=sqrt(10);%%%QAM16

case 64

sigam=sqrt(42);%%%QAM64

case 256

sigam=sqrt(170);%%%QAM64

end

lamda=1;%%%% 1/lamda

lamda=1/lamda;

phi=0.08;

sigam1=sqrt(norm(channel)^2/10^(snr/10)); %QPSK

sigam2=sqrt(sigam^2*norm(channel)^2/10^(snr/10)); %QAM16

%noise

v=zeros(1,n1+n2);

v(1:n1)=(sigam1/sqrt(2))(randn(1,n1)+1jrandn(1,n1));

v(n1+1:n1+n2)=(sigam2/sqrt(2))(randn(1,n2)+1jrandn(1,n2));

%data

s(1:n1)=(randi(2,1,n1)*sqrt(2)-sqrt(2)3/2)+1j(randi(2,1,n1)*sqrt(2)-sqrt(2)*3/2);

train=zeros(1,n1+delta);

train(delta+1:n1+delta)=s(1:n1);

s(n1+1:n1+n2)=qammod(randi(qam,1,n2)-1,qam);

y=filter(channel,1,s);

r=y+v;

w=zeros(l,1);

u=zeros(1,l);

e=zeros(1,n1+n2);

k=zeros(l,1);

p=1/phi*eye(l);

for i= 1:n1+delta

u=[r(i),u(1:l-1)];

ss(i)=u*w;

d(i)=train(i);

k=lamdapu’/(1+lamdaup*u’);

e(i)=d(i)-ss(i);

w=w+k*e(i); %%%%%%%%

p=lamdap-lamdakup;

end

nm=0;

for i=n1+delta+1:n1+n2

u=[r(i),u(1:l-1)];

ss(i)=u*w;

dd(i)=qammod(qamdemod(ss(i),qam),qam);

d(i)=dd(i);

k=lamdapu’/(1+lamdaup*u’);

e(i)=d(i)-ss(i);

w=w+k*e(i); %%%%%%%%

p=lamdap-lamdakup;

i;

if(dd(i)~=s(i-delta))

nm=nm+1;

end

end`