实验十 数字通信系统误码率仿真分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十数字通信系统误码率仿真分析
一、实验目的
1.掌握几种数字系统误码率分析方法。
2.掌握误码率对数字通信系统的影响。
二、实验内容
1.编写MATLAB程序,以QAM系统为例进行误码率的仿真。
2.观察不同噪声及噪声大小对误码率的影响。
三、实验代码
1)程序主代码
clear;
clc;
snr=1:1:11;
error_theory=(1-(1-(2*(1-
1/sqrt(16))*1/2*erfc(1/sqrt(2)*sqrt(3*4*10.^(snr/10)/(16-1))))).^2)/4;
N=floor(1./error_theory)*100+100;
N(find(N<5000))=5000;
p=0.5;
for i=1:length(N);
source=randsrc(1,N(i),[1,0;p,1-p]);
[source1,source2]=Qam_modulation(source);
sig_insert1=insert_value(source1,8);
sig_insert2=insert_value(source2,8);
[source1,source2]=rise_cos(sig_insert1,sig_insert2,0.25,2); [x1,x2]=generate_noise(source1',source2',snr(i));
sig_noise1=x1';
sig_noise2=x2';
[sig_noise1,sig_noise2]=rise_cos(sig_noise1,sig_noise2,0.25,2)
;
[x1,x2]=pick_sig(sig_noise1,sig_noise2,8);
sig_noise1=x1;
sig_noise2=x2;
signal=demodulate_sig(sig_noise1,sig_noise2);
error_bit(i)=length(find(signal-source)~=0)/N(i); end;
semilogy(snr,error_bit,'-*b');
hold on
semilogy(snr,error_theory,'-+r');
grid on
legend('实际值','理论值','location','NorthEast');
2)QAM调制函数
%QAM调制函数
function [yy1,yy2]=Qam_modulation(x)
N=length(x);
a=1:2:N;
y1=x(a);
y2=x(a+1);
a=1:2:N/2;
temp11=y1(a);
temp12=y1(a+1);
y11=temp11*2+temp12;
temp21=y2(a);
temp22=y2(a+1);
y22=temp21*2+temp22;
yy1(find(y11==0))=-3;
yy1(find(y11==1))=-1;
yy1(find(y11==3))=1;
yy1(find(y11==2))=3;
yy2(find(y22==0))=-3;
yy2(find(y22==1))=-1;
yy2(find(y22==3))=1;
yy2(find(y22==2))=3;
3)QAM解调函数
%QAM解调函数
function y=demodulate_sig(x1,x2)
%x1=[3 -1 -3 1;
%x2=[-3 1 3 -1];
xx1(find(x1>=2))=3;
xx1(find((x1<2)&(x1>=0)))=1;
xx1(find((x1>=-2)&(x1<0)))=-1;
xx1(find(x1<-2))=-3;
xx2(find(x2>=2))=3;
xx2(find((x2<2)&(x2>=0)))=1;
xx2(find((x2>=-2)&(x2<0)))=-1;
xx2(find(x2<-2))=-3;
%xxx1=xx1
%xxx2=xx2
temp1=zeros(1,length(xx1)*2);
temp1(find(xx1==-1)*2)=1;
temp1(find(xx1==1)*2-1)=1;
temp1(find(xx1==1)*2)=1;
temp1(find(xx1==3)*2-1)=1;
temp2=zeros(1,length(xx2)*2);
temp2(find(xx2==-1)*2)=1;
temp2(find(xx2==1)*2-1)=1;
temp2(find(xx2==1)*2)=1;
temp2(find(xx2==3)*2-1)=1;
%x11=temp1
%x22=temp2
n=length(temp1);
for i=1:2:2*n-1
y(i)=temp1((i+1)/2);
y(i+1)=temp2((i+1)/2);
end
4)叠加高斯噪声函数
function [y1,y2]=generate_noise(x1,x2,snr)
%叠加高斯噪声
snr1=snr+10*log10(4);
ss=var(x1+i*x2,1);
y=awgn([x1+j*x2],snr1+10*log10(ss/10),'measured'); y1=real(y);
y2=imag(y);
5)对两路信号进行插值函数
function y=insert_value(x,ratio)
%对两路信号进行插值
y=zeros(1,ratio*length(x));
a=1:ratio:length(y);
y(a)=x;
6)采样函数
function [y1,y2]=pick_sig(x1,x2,ratio)
%采样
y1=x1(ratio*3*2+1:ratio:(length(x1)-ratio*3*2)); y2=x2(ratio*3*2+1:ratio:(length(x2)-ratio*3*2)); 7)升余弦滤波函数
function [y1,y2]=rise_cos(x1,x2,fd,fs)