基于MATLAB的数字频带通信系统的仿真 - 图文 下载本文

北京邮电大学世纪学院毕业设计(论文)

参考文献

[1] 樊昌信,詹道庸,徐炳祥,吴成柯.通信原理[M].北京:国防工业出版社,

1980:171~260.

[2] 薛鹏骞.电子与通信电路计算机仿真[M].北京:煤炭工业出版社,2003:

113~144.

[3] 邓华.MATLAB通信仿真及应用实例详解[M].北京:人民邮电出版社,2003:

99~115.

[4] 陈怀琛.MATLAB及其在理工课程中的应用指南[M].西安:西安电子科技大学

出版社,2002:146~180.

[5] 张谦.通信系统中MATLAB基础与仿真应用[M].西安:西安电子科技大学出版

社,2010:85~109.

[6] 孙屹.MATLAB通信仿真开发手册[M].北京:国防工业出版社,2005:138~168. [7] 王立宁,乐光新,詹菲.MATLAB与通信仿真[M].北京:人民邮电出版社,2000:

74~86.

[8] 约翰·G·普罗克斯.现代通信系统的使用MATLAB[M].西安:西安交通学出版

社,2001:95~121.

[9] 陈萍.现代通信实验系统的计算机仿真[M].北京:国防工业出版社,2003:

171~260.

[10] 孙亮.MATLAB语言与控制系统仿真[M].北京:北京工业大学出版社,2001:

64~83.

[11] William A Shay.Understanding Data Communications and Networks[M]:

Wadsworth Publishing Company,1998:162~164.

[12] William Stallings.Data and Computer Communications,Seventh Edition[M]:

Prentice Hall,2003:201~207.

30

北京邮电大学世纪学院毕业设计(论文)

附录

MATLAB仿真程序: 一.QPSK仿真

clear;

T=1; fc=10/T; ml=2; nb=100;

delta_T=T/200; fs=1/delta_T; SNR=0;

t=0:delta_T:nb*T-delta_T; N=length(t);

data=randn(1,nb)>0.5; datanrz=data.*2-1;

data1=zeros(1,nb/delta_T); for q=1:nb

data1((q-1)/delta_T+1:q/delta_T)=datanrz(q); end

% 将基带信号变换成对应波形信号 data0=zeros(1,nb/delta_T); for q=1:nb

data0((q-1)/delta_T+1:q/delta_T)=data(q); % end

% 发射的信号

data2=abs(fft(data1));

% 串并转换,将奇偶位数据分开 idata=datanrz(1:ml:(nb-1)); qdata=datanrz(2:ml:nb); % QPSK信号的调制

ich=zeros(1,nb/delta_T/2); for i=1:nb/2

ich((i-1)/delta_T+1:i/delta_T)=idata(i); end

for ii=1:N/2

a(ii)=sqrt(2/T)*cos(2*pi*fc*t(ii)); end

31

北京邮电大学世纪学院毕业设计(论文)

idata1=ich.*a; qch=zeros(1,nb/2/delta_T); for j1=1:nb/2

qch((j1-1)/delta_T+1:j1/delta_T)=qdata(j1); end

for jj=1:N/2

b(jj)=sqrt(2/T)*sin(2*pi*fc*t(jj)); end

qdata1=qch.*b;

s=idata1+qdata1; ss=abs(fft(s));

% 瑞利衰落信道

ray_ich=raylrnd(0.8,1,nb/2/delta_T); ray_qch=raylrnd(0.8,1,nb/2/delta_T); Ray_idata=idata1.*ray_ich; Ray_qdata=qdata1.*ray_qch; Ray_s=Ray_idata+Ray_qdata;

%%%%%%%%%%%%%%%%%%%%%%%%%% % 高斯信道

s1=awgn(s,SNR); % 通过高斯信道之后的信号

s11=abs(fft(s1)); % 快速傅里叶变换得到频谱 s111=s1-s; % 高斯噪声曲线 %%%%%%%%%%%%%%%%%%%%%%%%%%

Awgn_s=awgn(Ray_s,SNR); % 通过高斯信道再通过瑞利衰落信道 % QPSK 解调部分

% 解调部分(高斯信道)

idata2=s1.*a; % 这里面其实隐藏了一个串并转换的过程 qdata2=s1.*b; % 对应的信号与正余弦信号相乘

idata3=zeros(1,nb/2); % 建立1*nb数组,以存放解调之后的信号 qdata3=zeros(1,nb/2);

% 抽样判决的过程,与0作比较,data>=0,则置1,否则置0 for n=1:nb/2

% A1(n)=sum(idata2((n-1)/delta_T+1:n/delta_T)); if sum(idata2((n-1)/delta_T+1:n/delta_T))>=0 idata3(n)=1;

else idata3(n)=0; end

% A2(n)=sum(qdata2((n-1)/delta_T+1:n/delta_T)); if sum(qdata2((n-1)/delta_T+1:n/delta_T))>=0

32

北京邮电大学世纪学院毕业设计(论文)

qdata3(n)=1; else qdata3(n)=0; end end

% 为了显示星座图,将信号进行处理 idata4=zeros(1,nb/2); qdata4=zeros(1,nb/2); for n=1:nb/2

Awgn_ichsum(n)=sum(idata2((n-1)/delta_T+1:n/delta_T))*delta_T; if Awgn_ichsum(n)>=0 idata4(n)=1; else idata4(n)=0; end

Awgn_qchsum(n)=sum(qdata2((n-1)/delta_T+1:n/delta_T))*delta_T; if Awgn_qchsum(n)>=0 qdata4(n)=1; else qdata4(n)=0; end end

% 将判决之后的数据存放进数组 demodata=zeros(1,nb);

demodata(1:ml:(nb-1))=idata3; % 存放奇数位 demodata(2:ml:nb)=qdata3; % 存放偶数位

%为了显示,将它变成波形信号(即传输一个1代表单位宽度的高电平) demodata1=zeros(1,nb/delta_T); % 创建一个1*nb/delta_T的零矩阵 for q=1:nb

demodata1((q-1)/delta_T+1:q/delta_T)=demodata(q); % 将极性码变成对应的波形信号 end

% 累计误码数

% abs(demodata-data)求接收端和发射端

% 数据差的绝对值,累计之后就是误码个数 Awgn_num_BER=sum(abs(demodata-data))

%%%%%%%%%%%%%%%%%%% % 解调部分(瑞利+高斯)

Ray_idata2=Ray_s.*a; Ray_qdata2=Ray_s.*b;

% Ray_idata3=zeros(1,nb/2); % Ray_qdata3=zeros(1,nb/2);

33