毕业设计基于matlab的QPSK系统仿真 1.docx
《毕业设计基于matlab的QPSK系统仿真 1.docx》由会员分享,可在线阅读,更多相关《毕业设计基于matlab的QPSK系统仿真 1.docx(28页珍藏版)》请在冰豆网上搜索。
毕业设计基于matlab的QPSK系统仿真1
基于MATLAB的QPSK仿真设计与实现
一.前言
1.1QPSK系统的应用背景简介
QPSK是英文QuadraturePhaseShiftKeying的缩略语简称,意为正交相移键控,是一种数字调制方式。
在19世纪80年代初期,人们选用恒定包络数字调制。
这类数字调制技术的优点是已调信号具有相对窄的功率谱和对放大设备没有线性要求,不足之处是其频谱利用率低于线性调制技术。
19世纪80年代中期以后,四相绝对移相键控(QPSK)技术以其抗干扰性能强、误码性能好、频谱利用率高等优点,广泛应用于数字微波通信系统、数字卫星通信系统、宽带接入、移动通信及有线电视系统之中。
1.2QPSK实验仿真的意义
通过完成设计内容,复习QPSK调制解调的基本原理,同时也要复习通信系统的主要组成部分,了解调制解调方式中最基础的方法。
了解QPSK的实现方法及数学原理。
并对“通信”这个概念有个整体的理解,学习数字调制中误码率测试的标准及计算方法。
同时还要复习随机信号中时域用自相关函数,频域用功率谱密度来描述平稳随机过程的特性等基础知识,来理解高斯信道中噪声的表示方法,以便在编程中使用。
理解QPSK调制解调的基本原理,并使用MATLAB编程实现QPSK信号在高斯信道和瑞利衰落信道下传输,以及该方式的误码率测试。
复习MATLAB编程的基础知识和编程的常用算法以及使用MATLAB仿真系统的注意事项,并锻炼自己的编程能力,通过编程完成QPSK调制解调系统的仿真,以及误码率测试,并得出响应波形。
在完成要求任务的条件下,尝试优化程序。
通过本次实验,除了和队友培养了默契学到了知识之外,还可以将次实验作为一种推广,让更多的学生来深入一层的了解QPSK以至其他调制方式的原理和实现方法。
可以方便学生进行测试和对比。
足不出户便可以做实验。
1.3实验平台和实验内容
1.3.1实验平台
本实验是基于Matlab的软件仿真,只需PC机上安装MATLAB6.0或者以上版本即可。
(本实验附带基于MatlabSimulink(模块化)仿真,如需使用必须安装simulink模块)
1.3.2实验内容
1.构建一个理想信道基本QPSK仿真系统,要求仿真结果有
a.基带输入波形及其功率谱
b.QPSK信号及其功率谱
c.QPSK信号星座图
2.构建一个在AWGN(高斯白噪声)信道条件下的QPSK仿真系统,要求仿真结果有
a.QPSK信号及其功率谱
b.QPSK信号星座图
c.高斯白噪声信道条件下的误码性能以及高斯白噪声的理论曲线,要求所有误码性能曲线在同一坐标比例下绘制
3验可选做扩展内容要求:
构建一个先经过Rayleigh(瑞利衰落信道),再通过AWGN(高斯白噪声)信道条件下的条件下的QPSK仿真系统,要求仿真结果有
a.QPSK信号及其功率谱
b.通过瑞利衰落信道之前和之后的信号星座图,前后进行比较
c.在瑞利衰落信道和在高斯白噪声条件下的误码性能曲线,并和二.2.c中所要求的误码性能曲线在同一坐标比例下绘制
二、系统实现框图和分析
2.1、QPSK调制部分,原理框图如图1所示
1(t)=
2(t)=
图1
原理分析:
基本原理及系统结构
QPSK与二进制PSK一样,传输信号包含的信息都存在于相位中。
的别的载波相位取四个等间隔值之一,如л/4,3л/4,5л/4,和7л/4。
相应的,可将发射信号定义为
0≤t≤T
Si(t)=
0。
,其他
其中,i=1,2,2,4;E为发射信号的每个符号的能量,T为符号持续时间,载波频率f等于nc/T,nc为固定整数。
每一个可能的相位值对应于一个特定的二位组。
例如,可用前述的一组相位值来表示格雷码的一组二位组:
10,00,01,11。
下面介绍QPSK信号的产生和检测。
如果a为典型的QPSK发射机框图。
输入的二进制数据序列首先被不归零(NRZ)电平编码转换器转换为极性形式,即负号1和0分别用
和-
表示。
接着,该二进制波形被分接器分成两个分别由输入序列的奇数位偶数位组成的彼此独立的二进制波形,这两个二进制波形分别用a1(t),和a2(t)表示。
容易注意到,在任何一信号时间间隔内a1(t),和a2(t)的幅度恰好分别等于Si1和Si2,即由发送的二位组决定。
这两个二进制波形a1(t),和a2(t)被用来调制一对正交载波或者说正交基本函数:
1(t)=
,
2(t)=
。
这样就得到一对二进制PSK信号。
1(t)和
2(t)的正交性使这两个信号可以被独立地检测。
最后,将这两个二进制PSK信号相加,从而得期望的QPSK。
2.2、QPSK解调部分,原理框图如图2所示:
1(t)同相信道门限=0
2(t)正交信道门限=0
图2
原理分析:
QPSK接收机由一对共输入地相关器组成。
这两个相关器分别提供本地产生地相干参考信号
1(t)和
2(t)。
相关器接收信号x(t),相关器输出地x1和x2被用来与门限值0进行比较。
如果x1>0,则判决同相信道地输出为符号1;如果x1<0,则判决同相信道的输出为符号0。
;类似地。
如果正交通道也是如此判决输出。
最后同相信道和正交信道输出这两个二进制数据序列被复加器合并,重新得到原始的二进制序列。
在AWGN信道中,判决结果具有最小的负号差错概率。
三、实验结果及分析
根据图1和图2的流程框图设计仿真程序,得出结果并且分析如下:
3.1、理想信道下的仿真,实验结果如图3所示
图3
实验结果分析:
如图上结果显示,完成了QPSK信号在理想信道上的调制,传输,解调的过程,由于调制过程中加进了载波,因此调制信号的功率谱密度会发生变化。
并且可以看出调制解调的结果没有误码。
3.2、高斯信道下的仿真,结果如图4所示:
图4
实验结果分析:
由图4可以得到高斯信道下的调制信号,高斯噪声,调制输出功率谱密度曲线和QPSK信号的星座图。
在高斯噪声的影响下,调制信号的波形发生了明显的变化,其功率谱密度函数相对于图1中的调制信号的功率谱密度只发生了微小的变化,原因在于高斯噪声是一个均值为0的白噪声,在各个频率上其功率是均匀的,因此此结果是真确的。
星座图反映可接收信号早高斯噪声的影响下发生了误码,但是大部分还是保持了原来的特性。
3.3、先通过瑞利衰落信道再通过高斯信道的仿真。
实验结果如图5所示:
图5
实验结果分析:
由图5可以得到瑞利衰落信道前后的星座图,调制信号的曲线图及其功率谱密度。
最后显示的是高斯信道和瑞利衰落信道的误码率对比。
由图可知瑞利衰落信道下的误码率比高斯信道下的误码率高。
至此,仿真实验就全部完成。
四、致谢
感谢指导老师**老师对我们的指导,帮我们解决了不少的问题。
也感谢队友之间的相互合作。
希望以后再接再厉,努力学习。
附录
参考文献:
1、《MATLAB宝典》陈杰等编著电子工业出版社
2、《MATLAB信号处理》刘波,文忠,曾涯编著北京电子工业出版社
3、《数字信号处理的MATLAB实现》万永革编著北京科学出版社
4、网上资料
Simulink仿真数据:
1、调制框图,如图6所示
图6
2、解调模块如图7所示
图7
3、调制信号及其功率谱密度如图8所示
图8
4、调制信号的星座图如图9所示:
图9
5、基带信号与调制信号之间的关系如图10所示:
图10
附录2:
%主文件
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%题目:
理想信道瑞利衰落信道高斯信道下的QPSK仿真
%%%%%%%作者:
陈镇沅
%%%%%%%完成日期:
2011-4-6
%%%%%%%邮箱:
forgiveme1989@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
%%%%%%%%%%%%%%%%%%%%%
%%%初始化参数
%%%%%%%%%%%%%%%%%%%%%
T=1;%基带信号宽度,也就是频率
fc=10/T;%载波频率
ml=2;%调制信号类型的一个标志位(选取2的原因见23行)
nb=100;%传输的比特数
delta_T=T/200;%采样间隔
fs=1/delta_T;%采样频率
SNR=0;%信噪比
t=0:
delta_T:
nb*T-delta_T;%限定t的取值范围
N=length(t);%采样数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%调制部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%基带信号的产生
data=randn(1,nb)>0.5;%调用一个随机函数(0or1),输出到一个1*100的矩阵
datanrz=data.*2-1;%变成极性码
data1=zeros(1,nb/delta_T);%创建一个1*nb/delta_T的零矩阵
forq=1:
nb
data1((q-1)/delta_T+1:
q/delta_T)=datanrz(q);%将极性码变成对应的波形信号
end
%将基带信号变换成对应波形信号
data0=zeros(1,nb/delta_T);%创建一个1*nb/delta_T的零矩阵
forq=1:
nb
data0((q-1)/delta_T+1:
q/delta_T)=data(q);%将极性码变成对应的波形信号
end
%发射的信号
data2=abs(fft(data1));
%串并转换,将奇偶位数据分开
idata=datanrz(1:
ml:
(nb-1));%将奇偶位分开,因此间隔m1为2
qdata=datanrz(2:
ml:
nb);
%QPSK信号的调制
ich=zeros(1,nb/delta_T/2);%创建一个1*nb/delta_T/2的零矩阵,以便后面存放奇偶位数据
fori=1:
nb/2
ich((i-1)/delta_T+1:
i/delta_T)=idata(i);
end
forii=1:
N/2
a(ii)=sqrt(2/T)*cos(2*pi*fc*t(ii));
end
idata1=ich.*a;%奇数位数据与余弦函数相乘,得到一路的调制信号
qch=zeros(1,nb/2/delta_T);
forj1=1:
nb/2
qch((j1-1)/delta_T+1:
j1/delta_T)=qdata(j1);
end
forjj=1:
N/2
b(jj)=sqrt(2/T)*sin(2*pi*fc*t(jj));
end
qdata1=qch.*b;%偶数位数据与余弦函数相乘,得到另一路的调制信号
s=idata1+qdata1;%将奇偶位数据合并,s即为QPSK调制信号
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
forn=1:
nb/2
%A1(n)=sum(idata2((n-1)/delta_T+1:
n/delta_T));
ifsum(idata2((n-1)/delta_T+1:
n/delta_T))>=0
idata3(n)=1;
elseidata3(n)=0;
end
%A2(n)=sum(qdata2((n-1)/delta_T+1:
n/delta_T));
ifsum(qdata2((n-1)/delta_T+1:
n/delta_T))>=0
qdata3(n)=1;
elseqdata3(n)=0;
end
end
%为了显示星座图,将信号进行处理
idata4=zeros(1,nb/2);
qdata4=zeros(1,nb/2);
forn=1:
nb/2
Awgn_ichsum(n)=sum(idata2((n-1)/delta_T+1:
n/delta_T))*delta_T;
ifAwgn_ichsum(n)>=0
idata4(n)=1;
elseidata4(n)=0;
end
Awgn_qchsum(n)=sum(qdata2((n-1)/delta_T+1:
n/delta_T))*delta_T;
ifAwgn_qchsum(n)>=0
qdata4(n)=1;
elseqdata4(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的零矩阵
forq=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);%建立1*nb数组,以存放解调之后的信号
%Ray_qdata3=zeros(1,nb/2);
%抽样判决的过程,与0作比较,data>=0,则置1,否则置0
%forn=1:
nb/2
%ifRay_sum(Ray_idata2((n-1)/delta_T+1:
n/delta_T))>=0
%Ray_idata3(n)=1;
%elseRay_idata3(n)=0;
%end
%ifRay_sum(Ray_qdata2((n-1)/delta_T+1:
n/delta_T))>=0
%Ray_qdata3(n)=1;
%elseRay_qdata3(n)=0;
%end
%end
%为了显示星座图,将信号进行处理
Ray_idata4=zeros(1,nb/2);
Ray_qdata4=zeros(1,nb/2);
forn=1:
nb/2
Ray_ichsum(n)=sum(idata2((n-1)/delta_T+1:
n/delta_T))*delta_T;
ifRay_ichsum(n)>=0
Ray_idata4(n)=1;
elseRay_idata4(n)=0;
end
Ray_qchsum(n)=sum(qdata2((n-1)/delta_T+1:
n/delta_T))*delta_T;
ifRay_qchsum(n)>=0
Ray_qdata4(n)=1;
elseRay_qdata4(n)=0;
end
end
%将判决之后的数据存放进数组
Ray_demodata=zeros(1,nb);
Ray_demodata(1:
ml:
(nb-1))=Ray_idata4;%存放奇数位
Ray_demodata(2:
ml:
nb)=Ray_qdata4;%存放偶数位
%为了显示,将它变成波形信号(即传输一个1代表单位宽度的高电平)
Ray_demodata1=zeros(1,nb/delta_T);%创建一个1*nb/delta_T的零矩阵
forq=1:
nb
Ray_demodata1((q-1)/delta_T+1:
q/delta_T)=Ray_demodata(q);%将极性码变成对应的波形信号
end
%累计误码数
%abs(demodata-data)求接收端和发射端
%数据差的绝对值,累计之后就是误码个数
Ray_num_BER=sum(abs(Ray_demodata-data))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%误码率计算
%%调用了cm_sm32();和cm_sm33()函数
%%声明:
函数声明在另外俩个M文件中
%%作用:
cm_sm32()用于瑞利信道误码率的计算
%%cm_sm33()用于高斯信道误码率的计算
%%ecohon/off作用在于决定是否显示指令内容
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SNRindB1=0:
1:
6;
SNRindB2=0:
0.1:
6;
%瑞利衰落信道
fori=1:
length(SNRindB1),
[pb,ps]=cm_sm32(SNRindB1(i));%比特误码率
smld_bit_ray_err_prb(i)=pb;
smld_symbol_ray_err_prb(i)=ps;
disp([ps,pb]);
echooff;
end;
%高斯信道
echoon;
fori=1:
length(SNRindB1),
[pb1,ps1]=cm_sm33(SNRindB1(i));
smld_bit_awgn_err_prb(i)=pb1;
smld_symbol_awgn_err_prb(i)=ps1;
disp([ps1,pb1]);
echooff;
end;
%理论曲线
echoon;
fori=1:
length(SNRindB2),
SNR=exp(SNRindB2(i)*log(10)/10);%信噪比
theo_err_awgn_prb(i)=0.5*erfc(sqrt(SNR));%高斯噪声理论误码率
theo_err_ray_prb(i)=0.5*(1-1/sqrt(1+1/SNR));%瑞利衰落信道理论误码率
echooff;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h=spectrum.welch;%类似于C语言的宏定义,方便以下的调用
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%输出显示部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%第一部分(理想)
figure
(1)
subplot(3,2,1);
plot(data0),title('基带信号');
axis([020000-22]);
subplot(3,2,2);
psd(h,data1,'fs',fs),title('基带信号功率谱密度');
subplot(3,2,3);
plot(s),title('调制信号');
axis([0500-33]);
subplot(3,2,4);
psd(h,s,'fs',fs),title('调制信号功率谱密度');
subplot(3,2,5);
plot(demodata1),title('解调输出');
axis([020000-22]);
subplot(3,2,6);
psd(h,demodata1,'fs',fs),title('解调输出功率谱密度');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%通过高斯信道
figure
(2)
subplot(2,2,1);
plot(s1),title('调制信号(Awgn)');
axis([0500-55]);
su