m软件接收机中同步技术以及LMS-RLS自适应均衡技术的matlab仿真

362 阅读5分钟

1.算法描述

       自适应均衡属于自适应信号处理的应用范畴,各种各样的自适应均衡算法如迫零(ZF)算法、最小均方(LMS)算法、递归最小二乘(RLS)算法、变换域均衡算法、Bussgang算法、高阶或循环统计量算法、基于非线性滤波器或神经网络的均衡算法等应运而生。均衡器通常工作在接收机的基带或中频信号部分,基带信号的复包络含有信道带宽信号的全部信息,所以,均衡器通常在基带信号完成估计信道冲激响应和解调输出信号中实现自适应算法等,本文选择了两种典型的自适应算法:以LMS自适应均衡器和RLS自适应均衡器为基础,用MATLAB仿真软件对LMS和RLS两种算法进行仿真,比较并分析了两种算法的性能。

 

1自适应均衡器

 

        一种均衡器,可用于校正高速双极性信号的符号间干扰。它可响应电话线路的静态和动态性能变化。均衡器包括若干级逻辑控制线路及抽头线路,每个抽头线路有一个积分器,积分器由电子开关控制进行充电放电。积分器的输出在逻辑控制下相加或相减。均衡信号还可以在线路变压器处直接监视。

 

       自适应均衡器的工作过程包含两个阶段,典型的训练序列是伪随机二进制信号或一个固定的波形信号序列,紧跟在训练序列后面的是用户消息码元序列。接收机的自适应均衡器采用递归算法估计信道特性,调整滤波器参数,补偿信道特性失真,训练序列的选择应满足接收机均衡器在最恶劣的信道估计条件下也能实现滤波器参数调整。所以,均衡器参数基本上接近最佳值,以保证用户数据的接收,成为均衡器的收敛。用户数据序列需要被分割成数据分组或时隙分段传送。

 

1基于LMS的自适应均衡算法

 

       感知器和自适应线性元件在历史上几乎是同时提出的,并且两者在对权值的调整的算法非常相似。它们都是基于纠错学习规则的学习算法。感知器算法存在如下问题:不能推广到一般的前向网络中;函数不是线性可分时,得不出任何结果。而由美国斯坦福大学的Widrow和Hoff在研究自适应理论时提出的LMS算法,由于其容易实现而很快得到了广泛应用,成为自适应滤波的标准算法。

 

LMS算法[1]采用的是最小均方误差准则,代价函数是:

 

1.gif

 

2基于RLS的自适应均衡算法

 

RLS算法[3]所采用的准则是最小二乘准则,其代价函数为:

 

2.png

 

2.仿真效果预览

matlab2022a仿真结果如下:

 

3.png

4.png

5.png

6.png

 

 

3.MATLAB核心程序 `clc;

clear;

close all;

warning off;

pack;

rng(2);

%产生QAM基带信号

%二进制数据长度

N      = 10000;      

 %传送的有效数据长度

N_data = N;             

M      = 32;

 

for i = 1:N

    x(i) = 1 + floor(M*rand);

end

qam_sig = func_32QAM(x);

sybol1  = qam_sig(:,1);

sybol2  = qam_sig(:,2);

figure;

subplot(221);

plot(sybol1,sybol2,'b.');

axis([-7,7,-7,7]);

%成型滤波器

Fs   = 2000;         

T    = 2/Fs;           

t    =-5T:1/Fs:5T;   

t    = t+0.00001;

alfa = 0.4;

p    = rcosfir(alfa,[-5,5],Fs*T,1000,'sqrt');

%%%%%%%%%%%%%%%%%%%%%基带成形

%I路成形

n    = length(sybol1);     % Number of symbols

r    = T*Fs;               % Oversampling factor

pams1= zeros(size(1:r*n));

pams1(1:r:r*n)=sybol1;     % Pulse sequence

ynI  = filter(p,1,pams1);  % Pulse shaping filtering

%Q路成形

pams2= zeros(size(1:r*n));

pams2(1:r:r*n)=sybol2;     % Pulse sequence

ynQ  = filter(p,1,pams2);  % Pulse shaping filtering

%正交调制

yn0  = ynQ+ynI*j;

%星座图

subplot(222);

plot(ynQ,ynI,'b.');

axis([-7,7,-7,7]);

 

%%

%信道模型

SNR= 20;

H  = [0.47,0.8,0.6];%信道参数

yn = filter(H/sum(H),1,yn0);

%加入噪声

yn = awgn(yn,SNR);

 

%接收初步滤波处理

H1    = fir1(7,0.5);

yn    = filter(H1,1,yn);

%基带等效正解解调

r_ynQ = real(yn);

r_ynI = imag(yn);

%由于时延固定取常数

delay       = 1;

re_I        = r_ynI(delay);

re_Q        = r_ynQ(delay);

 

for i=1:(N/4-delay)

   re_I=[re_I,r_ynI(i*2+delay)];

   re_Q=[re_Q,r_ynQ(i*2+delay)];

end

%LMS均衡

uu          = 0.005;

Lens        = 1024;

%I路均衡

Order       = 18;

W           = zeros(size(1:Order+1)).';   

Start       = 1;

%取前Lens个数据作为训练序列

Ref(1:Lens) = sybol1(1:Lens);    

for i=Start+1:Lens-Order/2

    rk           = flipud(re_I(i:i+Order).');  

    Err(i-Start) = Ref(i-Start+Order/2) - W.'*rk;

    W            = W + uu*Err(i-Start)*rk;

end

%均衡

re_I        = filter(W,1,re_I);         

%Q路均衡

W           = zeros(size(1:Order+1)).';  

Ref(1:Lens) = sybol2(1:Lens);%取前512个数据作为训练序列

for i=Start+1:Lens-Order/2

    rk           = flipud(re_Q(i:i+Order).'); % Received signal vector

    Err(i-Start) = Ref(i-Start+Order/2)-W.'*rk; % Error signal, we use the symbol sequence known in

    W            = W+uu*Err(i-Start)*rk;

end

%均衡

re_Q        = filter(W,1,re_Q);  %对re_Q进行均衡

subplot(223);

s=re_I*j+re_Q;

plot(re_I,re_Q,'b.');

title('均衡后信号星座图(20db)');

axis([-7,7,-7,7]);

 

 

 

%%

%信道模型

SNR= 10;

H  = [0.47,0.8,0.6];%信道参数

yn = filter(H/sum(H),1,yn0);

%加入噪声

yn = awgn(yn,SNR);

 

%接收初步滤波处理

H1    = fir1(7,0.5);

yn    = filter(H1,1,yn);

%基带等效正解解调

r_ynQ = real(yn);

r_ynI = imag(yn);

%由于时延固定取常数

delay       = 1;

re_I        = r_ynI(delay);

re_Q        = r_ynQ(delay);

 

for i=1:(N/4-delay)

   re_I=[re_I,r_ynI(i*2+delay)];

   re_Q=[re_Q,r_ynQ(i*2+delay)];

end

%LMS均衡

uu          = 0.005;

Lens        = 1024;

%I路均衡

Order       = 18;

W           = zeros(size(1:Order+1)).';   

Start       = 1;

%取前Lens个数据作为训练序列

Ref(1:Lens) = sybol1(1:Lens);    

for i=Start+1:Lens-Order/2

    rk           = flipud(re_I(i:i+Order).');  

    Err(i-Start) = Ref(i-Start+Order/2) - W.'*rk;

    W            = W + uu*Err(i-Start)*rk;

end

%均衡

re_I        = filter(W,1,re_I);         

%Q路均衡

W           = zeros(size(1:Order+1)).';  

Ref(1:Lens) = sybol2(1:Lens);%取前512个数据作为训练序列

for i=Start+1:Lens-Order/2

    rk           = flipud(re_Q(i:i+Order).'); % Received signal vector

    Err(i-Start) = Ref(i-Start+Order/2)-W.'*rk; % Error signal, we use the symbol sequence known in

    W            = W+uu*Err(i-Start)*rk;

end

%均衡

re_Q        = filter(W,1,re_Q);  %对re_Q进行均衡

subplot(224);

s=re_I*j+re_Q;

plot(re_I,re_Q,'b.');

title('均衡后信号星座图(10db)');

axis([-7,7,-7,7]);

01_150m`