当前位置: 首页 > >

MATLAB环境下ISI信道仿真及自适应均衡器设计程序说明

发布时间:

MATLAB 环境下 ISI 信道仿真及自适应均衡器设计程序说明 信道仿真及自适应均衡器设计程序说明
一、系统模型

(0,σ 2 )

二、ISI 信道仿真及 LSM 算法自适应均衡器原理
1、发送端和接收端滤波器的级联和在采样瞬间时的信道可用等效的离散时间 FIR 信道 滤波器来表示,Xn={0.05 -0.063 0.088 -0.126 -0.25 0.9047 0.25 0 0.126 0.038 0.088}, n={-5,-4,…,5}。 2、基于 MSE 准则的均衡器抽头系数的自适应算法为:

c k +1 = c k + ?ek yk
其中 c k 代表抽头系数向量的估值,? 为迭代过程中的步长参数,ek 为误差信号, yk 代表在瞬 时 k 包含均衡器中 2k+1 接收信号值的行向量。 误差信号 ek 表示为: ek = ak ? zk ; zk 为均衡器输出, ak 为已知信号序列。最初用一已 知伪随机序列{ ak }在信道上将这个自适应均衡器进行训练。在解调器端,均衡器用这个已 知序列去调整它的系数,一旦初始调节完成,自适应均衡器就从一个训练模式切换到直接判 决模式,这时: ek = a k ? zk ,式中 a k 是检测器的输出。 为了确保收敛和在慢变化信道中好的跟踪能力,选择步长参数的一种经验公式是
?= 1 5(2k + 1) PR
^
^ ^

^

^

式中 PR 代表接收到的信号加噪声的功率,它可以从接收信号中估计出。

三、仿真结果图

四、结论分析
从结果图中我们可以看出,在信噪比逐渐增大的过程中,未经均衡器均衡的差错率没 有明显改善,可知系统中始终存在码间干扰造成的误码;经均衡器均衡后的差错率则有明显 改善。 但我们同时也可以看到在信噪比较低情况下,均衡器均衡之后的误码率并没有明显改 善,甚至没有未均衡的差错率低,这主要是因为噪声为随机信号,功率大时对源信号影响较 大,而且均衡器不易跟踪;当我们把均衡器的步长调低后,跟踪能力增强,差错率降低。

附源程序代码: main_plot.m
clear;clc;echo off;close all; N=10000; info=random_binary(N); SNR_in_dB=8:1:18; for j=1:length(SNR_in_dB) [y,len]=channel(info,SNR_in_dB(j)); numoferr=0; for i=len+1:N+len, if (y(i)<0), %指定信号序列长度 %产生二进制信号序列 %AWGN 信道信噪比 %通过既有码间干扰又有白噪声信道 %初始误码统计数 %从第 len 个码元开始为真实信号码元 %判决译码

decis=-1; else decis=1; end; if (decis~=info(i-5)), numoferr=numoferr+1; end; end; Pe(j)=numoferr/N; end; semilogy(SNR_in_dB,Pe,'red*-'); hold on; delta_1=0.11; delta_2=0.09; for j=1:length(SNR_in_dB) y=channel(info,SNR_in_dB(j)); z=lms_equalizer(y,info,delta_1); numoferr=0; for i=1:N, if (z(i)<0), decis=-1; else decis=1; end; if (decis~=info(i)), numoferr=numoferr+1; end; end; Pe(j)=numoferr/N; end; semilogy(SNR_in_dB,Pe,'blacko-'); hold on; for j=1:length(SNR_in_dB) y=channel(info,SNR_in_dB(j)); z=lms_equalizer(y,info,delta_2); numoferr=0; for i=1:N, if (z(i)<0), decis=-1; else decis=1; end; %判断是否误码,统计误码码元个数

% 未经均衡器均衡,得到的误码率 %未经均衡器,误码率结果图

%指定自适应均衡器的步长 %指定自适应均衡器的步长 %通过信道 %通过自适应均衡器,并设置步长为 0.11

% 经自适应均衡器均衡后,得到的误码率 %自适应均衡器均衡之后,误码率结果图

%通过信道 %通过自适应均衡器,并设置步长为 0.09

if (decis~=info(i)), numoferr=numoferr+1; end; end; Pe(j)=numoferr/N; end; semilogy(SNR_in_dB,Pe,'blue.-'); hold on;

% 经自适应均衡器均衡后,得到的误码率 %自适应均衡器均衡之后,误码率结果图

xlabel('SNR in dB'); ylabel('Pe'); title('ISI 信道自适应均衡系统仿真'); legend('未经均衡器均衡','经自适应均衡器均衡,步长 detla=0.11',... '经自适应均衡器均衡,步长 detla=0.09');

random_binary.m
%产生二进制信源随机序列 function [info]=random_binary(N) if nargin == 0, N=10000; end; for i=1:N, temp=rand; if (temp<0.5), info(i)=-1; else info(i)=1; end end;

%如果没有输入参数,则指定信息序列为 10000 个码元

% 1/2 的概率输出为-1 % 1/2 的概率输出为 1

channel.m
%模拟既有码间干扰又有高斯白噪声的信道 function [y,len]=channel(x,snr_in_dB) SNR=exp(snr_in_dB*log(10)/10); %信噪比真值转换 sigma=1/sqrt(2*SNR); %高斯白噪声的标准差 %指定信道的 ISI 参数,可以看出此信道质量还是比较差的 actual_isi=[0.05 -0.063 0.088 -0.126 -0.25 0.9047 0.25 0 0.126 0.038 0.088]; len_actual_isi=(length(actual_isi)-1)/2; len=len_actual_isi; y=conv(actual_isi,x); %信号通过信道,相当于信号序列与信道模型序列作卷积 %需要指出,此时码元序列长度变为 N+len-1,译码时我们从第 len 个码元开始到 N+len 个结束 for i=1:2:size(y,2),

[noise(i) noise(i+1)]=gngauss(sigma); end; y=y+noise;

%产生噪声 %叠加噪声

gngauss.m
%产生高斯白噪声 function [gsrv1,gsrv2]=gngauss(m,sgma) if nargin == 0, %如果没有输入实参,则均方为 0,标准差为 1 m=0; sgma=1; elseif nargin == 1, %如果输入实参为 1 个参数,则标准差为输入实参,均值为 0 sgma=m; m=0; end; u=rand; z=sgma*(sqrt(2*log(1/(1-u)))); u=rand; gsrv1=m+z*cos(2*pi*u); gsrv2=m+z*sin(2*pi*u);

lms_equalizer.m
%LSM 算法自适应滤波器实现 function [z]=lms_equalizer(y,info,delta) estimated_c=[0 0 0 0 0 1 0 0 0 0 0]; K=5; for k=1:size(y,2)-2*K, y_k=y(k:k+2*K); z_k=estimated_c*y_k'; e_k=info(k)-z_k; estimated_c=estimated_c+delta*e_k*y_k; z(k)=z_k; end;

%初始抽头系数

%获取码元,一次 11 个 %各抽头系数与码元相乘后求和 %误差估计 %计算校正抽头系数 %均衡后输出的码元序列



相关推荐


友情链接: 时尚网 总结汇报 幼儿教育 小学教育 初中学习资料网