分集+均衡作业.docx
《分集+均衡作业.docx》由会员分享,可在线阅读,更多相关《分集+均衡作业.docx(19页珍藏版)》请在冰豆网上搜索。
分集+均衡作业
《matlab分集+均衡》实验报告
姓名李聪
学号11211060
指导教师姚冬萍
时间2014年5月25日
分集matlab作业
现给出最大比合并(MRC)、等增益合并(EGC)和选择性合并的分集合并程序,理解各程序,完成以下习题。
将程序运行结果及各题目的解答写入word中:
1.用matlab分别运行“BPSKMRC.m”、“BPSKEGC.m”以及“BPSKSEL.m”
(a)在程序中标注“注释”处加上注释(英文或中文)
MRC
%bpsk.m
%SimulationprogramtorealizeBPSKtransmissionsystem
%********************Preparationpart**********************
nd=10000;%Numberofsymbolsthatsimulatesineachloop
snr_in_dB=[0:
15];
ber=zeros(1,length(snr_in_dB));
forsnr_num=1:
length(snr_in_dB)
SNR=exp(snr_in_dB(snr_num)*log(10)/10);
%********************STARTCALCULATION*********************
nloop=100;%Numberofsimulationloops
noe=0;%Numberoferrordata
nod=0;%Numberoftransmitteddata
foriii=1:
nloop
%********************Datageneration********************************
data1=rand(1,nd)>0.5;
data2=2.*data1-1;
%******************AttenuationCalculation*****************
%******************rayleighchannel*****************
code_rate=1;
E=1;
sigma=E/sqrt(2*SNR*code_rate);
n=[randn(1,nd)+j*randn(1,nd)];
h1=1/sqrt
(2)*[randn(1,nd)+j*randn(1,nd)];%Rayleighchannel
data41=data2.*h1+sigma.*n;
h11=conj(h1);%注释:
根据测得的信号幅度相位得到各支路加权系数
data411=data41.*h11;%注释:
将各个支路信号调整为同相信号
%*****************************************
n=[randn(1,nd)+j*randn(1,nd)];
h2=1/sqrt
(2)*[randn(1,nd)+j*randn(1,nd)];%Rayleighchannel
data42=data2.*h2+sigma.*n;
h22=conj(h2);
data422=data42.*h22;
%*****************************************
data4=data411+data422;%注释:
各个已调为同相信号支路作相关电压的叠加
%********************BPSKDemodulation*********************
demodata1=data4>0;
%********************BitErrorRate(BER)******************
noe2=sum(abs(data1-demodata1));
nod2=length(data1);
noe=noe+noe2;
nod=nod+nod2;
end
%**********************Outputresult***************************
ber(snr_num)=noe/nod
end;
%********************endoffile***************************
figure;
semilogy(snr_in_dB,ber,'O-');
holdon
semilogy(snr_in_dB,0.5*erfc(sqrt(2*10.^(snr_in_dB/10))/sqrt
(2)),'+-');
holdon
semilogy(snr_in_dB,0.5.*(1-sqrt((10.^(snr_in_dB/10))./(10.^(snr_in_dB/10)+1))),'-');
ylabel('BER');
xlabel('E_b/N_0[dB]');
legend('simulationBPSKMRCL=2','theorygngaussBPSK','theoryreyleigh');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
EGC
%bpsk.m
%SimulationprogramtorealizeBPSKtransmissionsystem
%********************Preparationpart**********************
nd=10000;%Numberofsymbolsthatsimulatesineachloop
snr_in_dB=[0:
15];
ber=zeros(1,length(snr_in_dB));
forsnr_num=1:
length(snr_in_dB)
SNR=exp(snr_in_dB(snr_num)*log(10)/10);
%********************STARTCALCULATION*********************
nloop=100;%Numberofsimulationloops
noe=0;%Numberoferrordata
nod=0;%Numberoftransmitteddata
foriii=1:
nloop
%********************Datageneration********************************
data1=rand(1,nd)>0.5;
data2=2.*data1-1;
%******************AttenuationCalculation*****************
%******************rayleighchannel*****************
code_rate=1;
E=1;
sigma=E/sqrt(2*SNR*code_rate);
n=[randn(1,nd)+j*randn(1,nd)];
h1=1/sqrt
(2)*[randn(1,nd)+j*randn(1,nd)];%Rayleighchannel
data41=data2.*h1+sigma.*n;
h11=conj(h1)./abs(h1);%注释:
得到各个支路等增益合并的加权系数
data411=data41.*h11;%注释:
将支路信号调整为同相信号
%*****************************************
n=[randn(1,nd)+j*randn(1,nd)];
h2=1/sqrt
(2)*[randn(1,nd)+j*randn(1,nd)];%Rayleighchannel
data42=data2.*h2+sigma.*n;
h22=conj(h2)./abs(h2);
data422=data42.*h22;
%*****************************************
data4=data411+data422;%注释:
各个已调为同相信号的支路作等增益合并
%********************BPSKDemodulation*********************
demodata1=data4>0;
%********************BitErrorRate(BER)******************
noe2=sum(abs(data1-demodata1));
nod2=length(data1);
noe=noe+noe2;
nod=nod+nod2;
end
%**********************Outputresult***************************
ber1(snr_num)=noe/nod
end;
%********************endoffile***************************
figure;
semilogy(snr_in_dB,ber1,'O-');
holdonsemilogy(snr_in_dB,0.5*erfc(sqrt(2*10.^(snr_in_dB/10))/sqrt
(2)),'+-');
holdonsemilogy(snr_in_dB,0.5.*(1-sqrt((10.^(snr_in_dB/10))./(10.^(snr_in_dB/10)+1))),'-');
ylabel('BER');
xlabel('E_b/N_0[dB]');
legend('simulationBPSKEGCL=2','theorygngaussBPSK','theoryreyleigh');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SEL
%closeall;
%clearall;
%clc
snr_in_dB=0:
15;
fork=1:
length(snr_in_dB)
k
N=10000;
E=1;
SNR=10^(snr_in_dB(k)/10);
sigma=E/sqrt(2*SNR);
fori=1:
N
a=rand;
if(a<0.5)
data(i)=-1;
else
data(i)=1;
end
end
numofber=0;
totolnumber=0;
whilenumofber<1
totolnumber=totolnumber+1;
fori=1:
N
H1=1/sqrt
(2)*[rand+j*rand];%注释:
多径信道某一径的幅度和相位(多径信道某一径系数)
H2=1/sqrt
(2)*[rand+j*rand];%注释:
多径信道某一径的幅度和相位(多径信道某一径系数)
H=[H1;H2];
y1=H
(1)*data(i)+sigma*(rand+j*rand);%注释:
信号某一径分量
y2=H
(2)*data(i)+sigma*(rand+j*rand);%注释:
信号某一径分量
y=[abs(y1),abs(y2)];
s=max(y);%注释:
比较选择信噪比最大(指示参量最好)的一径
if(s==abs(y2))
s=y2/H2;%注释:
对信噪比最大的支路进行解调
else
s=y1/H1;%注释:
对信噪比最大的支路进行解调
end
data2=sign(real(s));
if(data2~=data(i))
numofber=numofber+1;%注释:
计算得到误比特数
end
end
end
p(k)=numofber/(N*totolnumber);%注释:
得到误比特率
end
figure;
semilogy(snr_in_dB,p,'O-');
holdon
semilogy(snr_in_dB,0.5*erfc(sqrt(2*10.^(snr_in_dB/10))/sqrt
(2)),'+-');
holdon
semilogy(snr_in_dB,0.5.*(1-sqrt((10.^(snr_in_dB/10))./(10.^(snr_in_dB/10)+1))),'-');
ylabel('BER');
xlabel('E_b/N_0[dB]');
legend('simulationBPSKSELL=2','theorygngaussBPSK','theoryreyleigh');
(b)观察信噪比变化10dB,误比特率变化多少?
EGC信噪比从0变化成10db时候,误比特率从0.067变成了0.002,误比特率下降了97.01%
SEL信噪比从0变化成10db时候,误比特率从0.1752变成了0.003,误比特率下降了98.29%
MRC信噪比从0变化成10db时候,误比特率从0.0576变成了0.0016,误比特率下降了97.22%
从这些数据中,我们可以看出,分集的性能是MRC>EGC>SEL,且MRC与SEL在相同信噪比下误码率相差不大;在增加信噪比的时候SEL有显著提升,而MRC,EGC误码率也有比较大的提升,且当信噪比为10db的时候三种分集性能差别不大,说明在信道环境比较好的情况下,三种分集误码率基本上差不多;此外,实验还说明了MRC和EGC比SEL更能适应低信噪比的环境下。
(c)程序中给出的是2分集,将其换为3分集,观察信噪比变化10dB,误比特率变化多少?
EGC信噪比从0变化成10db时候,误比特率从0.0331变成了2.19*10-4,误比特率下降了99.34%
SEL信噪比从0变化成10db时候,误比特率从0.1657变成了2.0*10-4,误比特率下降了99.88%
MRC信噪比从0变化成10db时候,误比特率从0.0251变成了1.27*10-4,误比特率下降了99.49%.
相对比之前的二分集来说,在0db(低信噪比的环境下)三分集的性能要比二分集误码率差不多,三种分集方式误码率有比较大的差别,MRC的误码率大概是SEL的15%左右,EGC大概是19.97%,说明MRC,EGC适合低信噪比环境下,并且此时增加分集支路数对误码率影响不大;在10db环境下,误码率有显著下降,且三种分集差别不是太大,数量级都是10-4,且是二分集的10%左右。
这些数据说明了,增加分集支路数在低信噪比的环境下对误码率的影响不大,此时分集方式是影响误码率的主要原因;而在高信噪比的条件下,分集方式对误码率影响不大,但是增加分集支路数能够很大程度改善瑞利信道下的误码率。
(d)将最大比合并和等增益合并及选择式合并的误比特率曲线,画在一张图上,比较这三种合并方法的优劣。
很显然,在低信噪比的环境下,MRC,EGC分集效果比SEL效果好得多,相对来说MRC和EGC差别不大,但是EGC实现起来要比MRC容易得多,因此在多数情况下使用EGC;在高信噪比的环境下,MRC,EGC,SEL分集误码率差别不大,但是当增加分集支路数,误码率则会很大程度地改善,由二分集到三分集误码率下降90%;此外我们可以看到,在信噪比增加的过程中,sel分集方式误码率出现了震荡,因此综合各个方面的因素来说,等增益合并EGC是相对来说比较好的一种选择。
均衡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.020.050.1-0.21-0.20.10.060.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=[123];%注释:
均衡器的阶数
err_rate=zeros(length(N),length(snr_in_dB));%经过均衡误码率统计
err_rate1=zeros(1,length(snr_in_dB));%未经过均衡误码率统计
forii=1:
length(N)
C=force_zero(h,N(ii));
forjj=1:
length(snr_in_dB)
SNR=10^(snr_in_dB(jj)/10);%注释:
输入序列的信噪比线性表示
err=0;%注释:
用于记录均衡之后的总的误码数
err1=0;%注释:
用于记录均衡之前的总的误码数
forkk=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*-');
holdon;
semilogy(snr_in_dB,err_rate1(1,:
),'g-');
holdon;
semilogy(snr_in_dB,err_rate(1,:
),'ko');
holdon;
semilogy(snr_in_dB,err_rate(2,:
),'go');
holdon;
semilogy(snr_in_dB,err_rate(3,:
),'ro');
title('误码率');
legend('高斯信道下理想误码率特性','未进过均衡的误码率','三阶迫零均衡误码率','五阶迫零均衡误码率','七阶迫零均衡误码率');
xlabel('SNR');
LMS均衡:
clear;
clc;
%**************变量设置区***********************************************%
N=10000;%二进制信源的长度,测误码率时使用的N
h=[0.6-0.30.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);%初始化自适应系数
fori=1:
length(SNRdB)%注释:
控制信噪比,得到不同信噪比条件下的误码率曲线
disp(['目前仿真到第',num2str(i),'轮:
','SNR=',num2str(SNRdB(i)),'dB']);%注释:
在不同的信噪比下实验,得到信噪比和误码率曲线
TotalError=0;%注释:
用于记录均衡之前的信噪比
totalerror1=0;
SNR=10^(SNRdB(i)/10);%注释:
将db形式的信噪比转换成线性形式的信噪比
forJJJ=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,S