实验十 数字通信系统误码率仿真分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档