分集+均衡作业 联系客服

发布时间 : 星期五 文章分集+均衡作业更新完毕开始阅读c994b597d5bbfd0a795673a3

均衡matlab

现给出迫零均衡(ZF)、最小均方误差均衡中的最小均方算法(LMS)的matlab程序,理解各程序,完成以下习题。将程序运行结果及各题目的解答写入word中: 用matlab分别运行“main_zf.m”和“main_lms.m”

(1)在程序中标注“注释”处加上注释(英文或中文)。

迫零均衡:

M=1500; %码元数目 P=0.5; %1码概率

data=2*round(rand(1,M)+P-0.5)-1; %产生一列01码

h=[0.02 0.05 0.1 -0.2 1 -0.2 0.1 0.06 0.01];%归一化的多径信道系数h r=conv(data,h); %迫零均衡 N=5;

C=force_zero(h,N);

dataout=conv(r,C); %注释:将多径信道输出的序列输入均衡器,得到均衡器输出序列 figure(1)

subplot(2,2,1)

plot([1:length(data)],data,'.') title('发送信号序列') subplot(2,2,2)

plot([1:length(r)],r,'.')

title('多径信号序列') subplot(2,2,3)

plot([1:length(dataout)],dataout,'.') title('均衡后的信号序列') eyediagram(r,2);

title('迫零均衡前的眼图'); eyediagram(dataout,2);

title('迫零均衡后的眼图'); %注释:得到均衡器输出序列的眼图

%用不同阶数的迫零均衡器均衡后的误码率,并与理想误码率曲线比较。 snr_in_dB=[4:11]; %注释:输入序列的信噪比的db表示 N=[1 2 3]; %注释:均衡器的阶数

err_rate=zeros(length(N),length(snr_in_dB)); %经过均衡误码率统计 err_rate1=zeros(1,length(snr_in_dB)); %未经过均衡误码率统计 for ii=1:length(N)

C=force_zero(h,N(ii));

for jj=1:length(snr_in_dB)

SNR=10^(snr_in_dB(jj)/10); %注释:输入序列的信噪比线性表示 err=0; %注释:用于记录均衡之后的总的误码数 err1=0; %注释:用于记录均衡之前的总的误码数

for kk=1:10^3 %注释:用于进行1000次计算得到平均误码率 x=2*round(rand(1,M)+P-0.5)-1; %注释:产生一列01码

x2=awgn(x,SNR,'measured','linear'); %注释:测量序列的功率,给X添加高斯白噪声

x1=conv(x2,h); %注释:添加高斯白噪声序列的信号通过多径信道之后的输出 y=conv(x1,C); %注释:多径信道的输出经过均衡之后输出 L=(length(y)-M)/2; %信道时延色散的长度 y=y(L+1:L+M); %注释:截取得到N阶均衡的输出 y=sign(y); %注释:对得到的序列进行判决 err=err+sum(abs(x-y))/2; %均衡之后总的误码数

%------------------------------------------------------------------------不经过均衡 L1=(length(x1)-M)/2; %注释:信道时延色散导致的码元展宽长度

x11=x1(L1+1:L1+M); %注释:截取多径信道输出的到去除展宽之后的码元 y11=sign(x11); %注释:对信道输出的码元进行抽样判决

err1=err1+sum(abs(x-y11))/2; %注释:计算得到未均衡输出的误码数 end

err_rate(ii,jj)=err/(M*10^3) %注释:计算得到经过均衡后,平均每个码元在每次实验中的误码率

err_rate1(1,jj)=err1/(M*10^3) %注释:计算得到经过均衡之前,平均每个码元在每次实验中的误码率 end end

figure(2);

semilogy(snr_in_dB,0.5*erfc(sqrt(1*10.^(snr_in_dB/10))),'g*-'); hold on;

semilogy(snr_in_dB,err_rate1(1,:),'g-'); hold on;

semilogy(snr_in_dB,err_rate(1,:),'ko'); hold on;

semilogy(snr_in_dB,err_rate(2,:),'go'); hold on;

semilogy(snr_in_dB,err_rate(3,:),'ro'); title('误码率');

legend('高斯信道下理想误码率特性','未进过均衡的误码率','三阶迫零均衡误码率','五阶迫零均衡误码率','七阶迫零均衡误码率'); xlabel('SNR');

LMS均衡:

clear;

clc;

%**************变量设置区***********************************************% N=10000; %二进制信源的长度,测误码率时使用的N h = [0.6 -0.3 0.1]; %多径响应序列

order = 5; %C的阶数(取大于1的奇数) mu = 0.01; % 步长 delta=2; %延迟

SNRdB = 5:15;

Loops = [100,100,100,100,100,100,100,100,100,100,100]; %循环数,实现信源长度10^6 %*********************************************************************************%

C = zeros(order,1); %初始化自适应系数 for i = 1:length(SNRdB) % 注释:控制信噪比,得到不同信噪比条件下的误码率曲线

disp(['目前仿真到第',num2str(i),'轮:','SNR=',num2str(SNRdB(i)),'dB']); %注释:在不同的信噪比下实验,得到信噪比和误码率曲线

TotalError = 0; % 注释:用于记录均衡之前的信噪比 totalerror1=0;

SNR = 10^(SNRdB(i)/10); % 注释:将db形式的信噪比转换成线性形式的信噪比

for JJJ = 1:Loops(i) % 注释:循环数,在某一信噪比下作100次试验 x=randsrc(1,N,[0,1;0.5,0.5]);%注释:随机生成0,1出现概率均为0.5的单极性码 x1=1-x*2; %注释:将单极性码转换成双极性码 x2 = conv(x1,h); % 注释:信号通过多径信道之后输出

x3 = awgn(x2,SNR,'measured','linear'); %注释:信号序列x2加高斯白噪声 for jjj=order+1:N % iterate

rr=x3(jjj:-1:jjj-order+1)';% vector of received signal e=x1(jjj-delta)-C'*rr;êlculate error

C=C+mu*e*rr; %update equalizer coefficients end

x6=filter(C,1,x3); %注释:用均衡器对信道输出序列进行均衡 x7 = (1-sign(x6))/2; %注释:对均衡器输出序列抽样判决 x8=x3<0; %注释:对多径信道未经过均衡器输出序列进行判决

TotalError = TotalError + sum(abs(x-x7(3:end)));%注释:在某一特定信噪比下,计算得到100次实验经过均衡器输出的所有序列的误码数

totalerror1=totalerror1+ sum(abs(x8(1:end-2)-x));%注释:在某一特定信噪比下,计算得到100次实验未经过均衡的所有序列的误码数 end

BER(i) = TotalError / (N-order) / Loops(i);% 注释:在某一特定信噪比下,得到平均每次实验误比特率

ber1(i)= totalerror1 / N / Loops(i); %注释:在某一特定信噪比下,得到未经过均衡平均每次实验误比特率

end

figure(1)

subplot(2,2,1)

plot([1:length(x1)],x1,'.') title('发送信号序列') subplot(2,2,2)

plot([1:length(x2)],x2,'.') title('多径信号序列') subplot(2,2,3)

plot([1:length(x3)],x3,'.') title('多径加噪声信号序列') subplot(2,2,4)

plot([1:length(x6)],x6,'.') title('均衡后信号序列') eyediagram(x3,2); title('均衡前的眼图'); eyediagram(x6,2); title('均衡后的眼图'); figure(2)

semilogy(SNRdB, BER,'r.-');%注释:用对数坐标画出误码率和信噪比曲线 hold on;

semilogy(SNRdB, ber1,'g.-'); hold on;

semilogy(SNRdB,0.5*erfc(sqrt(2*10.^(SNRdB/10))/sqrt(2)),'-'); ylim([10^(-6),10^(0)]);

legend('均衡后的误码率曲线','均衡前的误码率曲线','理想误码率曲线'); xlabel('SNR(单位:dB)'); ylabel('误码率');

(2)写出这两种算法实现的流程。

迫零均衡流程:1、首先检查归一化多径信道离散系数原点两侧的系数是否相等,不相等则补零使之相等2、根据均衡器抽头数N截取得到长度为2N+1的离散多径信道系数,得到需要均衡的多径信道系数的范围3、根据离散多径信道系数写出矩阵4、用信道系数矩阵的逆与期望的抽样值序列得到均衡系数序列5、利用构造的均衡器对多径信道输出进行滤波 LMS均衡流程:1、首先初始化自适应系数2、设置迭代次数3、根据接收到的信号计算误码4、利用误码更新均衡系数5、利用构造的均衡器对多径信道输出进行滤波。

(3)运行程序,会得到关于信号的一系列图形,包括信号序列图、均衡前后眼图以及均衡前后的误码率图,分析这些图形,你能得到什么结论

结论:1、号通过多径信道会出现码间串扰,高电平,低电平之间的间隔会变小,造成判决时候可能会出现误码;但是可以通过均衡的手段来减小码间串扰,减小由此造成的误码2、信号在高斯信道下传输误码率较小,在剁经信道下传输误码率比较大,可以通过均衡降低多径信道造成的误码,且均衡的阶数越大,误码率越小3、均衡之后的眼图相对于均衡之前的

眼图来说,眼张得比较大,说明均衡之后的通信系统质量要比均衡之前要高许多4、迫零均衡适用于信噪比比较小,多径分量比较小的信道,在这样信道下,有比较好的性能;LMS均衡你适用于多径分量比较大,信道噪声比较大的场合,它能比较好的减小码间串扰导致的误码,而迫零均衡在这种条件下会产生比较大的噪声增益,因此总的来说LMS均衡效果要比迫零均衡要好。

Matlab实验感想

这次matlab实验比较简单,因为老师给了程序,而且平时上课听得比较认真,做起来比较得心应手,不费功夫。这次我选择了分集和均衡这两个题目,一方面之前labview选过信道编码,所以这次想换个新的题目来挑战;另一方面,分集、均衡这两种方法很有意义,分集能够抗平衰落,均衡能够抗频率选择性衰落,两种方法配合你起来,应对时变多径的无线信道很有效,而这次matlab仿真的实验也说明了这点,使用分集之后误码率很大改善,而且当二分集换成三分集之后误码率下降了几个数量级,很好的应对多径的瑞利信道;使用均衡之后,误码率和有比较大的改善,均衡能够抗多径,抗衰落,使信息在瑞利信道中传输的时候误码率有极大改善;所以这次试验还是特别有帮助的,让我很好的感受了各种方法的作用,而且很有成就感。