您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > MATLAB环境下ISI信道仿真及自适应均衡器设计程序说明
MATLAB环境下ISI信道仿真及自适应均衡器设计程序说明一、系统模型信源ISI信道统计误码率X与Z比较高斯白噪声自适应均衡器步长可调+)(0,2XZYX与Y比较统计误码率二、ISI信道仿真及LSM算法自适应均衡器原理1、发送端和接收端滤波器的级联和在采样瞬间时的信道可用等效的离散时间FIR信道滤波器来表示,Xn={0.05-0.0630.088-0.126-0.250.90470.2500.1260.0380.088},n={-5,-4,…,5}。2、基于MSE准则的均衡器抽头系数的自适应算法为:^^1kkkkccey其中^kc代表抽头系数向量的估值,为迭代过程中的步长参数,ke为误差信号,ky代表在瞬时k包含均衡器中2k+1接收信号值的行向量。误差信号ke表示为:kkkeaz;kz为均衡器输出,ka为已知信号序列。最初用一已知伪随机序列{ka}在信道上将这个自适应均衡器进行训练。在解调器端,均衡器用这个已知序列去调整它的系数,一旦初始调节完成,自适应均衡器就从一个训练模式切换到直接判决模式,这时:^kkkeaz,式中^ka是检测器的输出。为了确保收敛和在慢变化信道中好的跟踪能力,选择步长参数的一种经验公式是15(21)RkP式中RP代表接收到的信号加噪声的功率,它可以从接收信号中估计出。三、仿真结果图四、结论分析从结果图中我们可以看出,在信噪比逐渐增大的过程中,未经均衡器均衡的差错率没有明显改善,可知系统中始终存在码间干扰造成的误码;经均衡器均衡后的差错率则有明显改善。但我们同时也可以看到在信噪比较低情况下,均衡器均衡之后的误码率并没有明显改善,甚至没有未均衡的差错率低,这主要是因为噪声为随机信号,功率大时对源信号影响较大,而且均衡器不易跟踪;当我们把均衡器的步长调低后,跟踪能力增强,差错率降低。附源程序代码:main_plot.mclear;clc;echooff;closeall;N=10000;%指定信号序列长度info=random_binary(N);%产生二进制信号序列SNR_in_dB=8:1:18;%AWGN信道信噪比forj=1:length(SNR_in_dB)[y,len]=channel(info,SNR_in_dB(j));%通过既有码间干扰又有白噪声信道numoferr=0;%初始误码统计数fori=len+1:N+len,%从第len个码元开始为真实信号码元if(y(i)0),%判决译码decis=-1;elsedecis=1;end;if(decis~=info(i-5)),%判断是否误码,统计误码码元个数numoferr=numoferr+1;end;end;Pe(j)=numoferr/N;%未经均衡器均衡,得到的误码率end;semilogy(SNR_in_dB,Pe,'red*-');%未经均衡器,误码率结果图holdon;delta_1=0.11;%指定自适应均衡器的步长delta_2=0.09;%指定自适应均衡器的步长forj=1:length(SNR_in_dB)y=channel(info,SNR_in_dB(j));%通过信道z=lms_equalizer(y,info,delta_1);%通过自适应均衡器,并设置步长为0.11numoferr=0;fori=1:N,if(z(i)0),decis=-1;elsedecis=1;end;if(decis~=info(i)),numoferr=numoferr+1;end;end;Pe(j)=numoferr/N;%经自适应均衡器均衡后,得到的误码率end;semilogy(SNR_in_dB,Pe,'blacko-');%自适应均衡器均衡之后,误码率结果图holdon;forj=1:length(SNR_in_dB)y=channel(info,SNR_in_dB(j));%通过信道z=lms_equalizer(y,info,delta_2);%通过自适应均衡器,并设置步长为0.09numoferr=0;fori=1:N,if(z(i)0),decis=-1;elsedecis=1;end;if(decis~=info(i)),numoferr=numoferr+1;end;end;Pe(j)=numoferr/N;%经自适应均衡器均衡后,得到的误码率end;semilogy(SNR_in_dB,Pe,'blue.-');%自适应均衡器均衡之后,误码率结果图holdon;xlabel('SNRindB');ylabel('Pe');title('ISI信道自适应均衡系统仿真');legend('未经均衡器均衡','经自适应均衡器均衡,步长detla=0.11',...'经自适应均衡器均衡,步长detla=0.09');random_binary.m%产生二进制信源随机序列function[info]=random_binary(N)ifnargin==0,%如果没有输入参数,则指定信息序列为10000个码元N=10000;end;fori=1:N,temp=rand;if(temp0.5),info(i)=-1;%1/2的概率输出为-1elseinfo(i)=1;%1/2的概率输出为1endend;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.0630.088-0.126-0.250.90470.2500.1260.0380.088];len_actual_isi=(length(actual_isi)-1)/2;len=len_actual_isi;y=conv(actual_isi,x);%信号通过信道,相当于信号序列与信道模型序列作卷积%需要指出,此时码元序列长度变为N+len-1,译码时我们从第len个码元开始到N+len个结束fori=1:2:size(y,2),[noise(i)noise(i+1)]=gngauss(sigma);%产生噪声end;y=y+noise;%叠加噪声gngauss.m%产生高斯白噪声function[gsrv1,gsrv2]=gngauss(m,sgma)ifnargin==0,%如果没有输入实参,则均方为0,标准差为1m=0;sgma=1;elseifnargin==1,%如果输入实参为1个参数,则标准差为输入实参,均值为0sgma=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=[00000100000];%初始抽头系数K=5;fork=1:size(y,2)-2*K,y_k=y(k:k+2*K);%获取码元,一次11个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;
本文标题:MATLAB环境下ISI信道仿真及自适应均衡器设计程序说明
链接地址:https://www.777doc.com/doc-6331806 .html