QPSK调制解调课设完整版教学文案.docx
- 文档编号:9915950
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:21
- 大小:165.34KB
QPSK调制解调课设完整版教学文案.docx
《QPSK调制解调课设完整版教学文案.docx》由会员分享,可在线阅读,更多相关《QPSK调制解调课设完整版教学文案.docx(21页珍藏版)》请在冰豆网上搜索。
QPSK调制解调课设完整版教学文案
QPSK调制解调课设完整版
2012专业综合课程设计
————————————通信专业
姓名:
***
班级:
0902402
学号:
090240212
题目:
利用matlab设计并仿真数字通信系统
一、题目要求
利用matlab软件设计并仿真下面的无线通信系统
要求:
1、输入信号为比特流形式,比特速率通常为100kbps数量级。
2、载波频率自定。
通常为MHz数量级。
3、信道为多径信道(仿真中2径即可),信道中噪声为加性高斯白噪声。
4、信噪比自行设定。
5、画出图中各点波形。
6、画出系统误码率与接收端信噪比SNR的关系(蒙特卡洛仿真)。
7、在给定信噪比情况下,分析多径延时大小对系统性能有没有影响?
画出系统误码率与多径延时大小之间的关系。
2、设计过程
1)概念理解:
QPSK即四进制移向键控(QuaternaryPhaseShiftKeying),它利用载波的四种不同相位来表示数字信息,由于每一种载波相位代表两个比特信息,因此每个四进制码元可以用两个二进制码元的组合来表示。
两个二进制码元中的前一个码元用a表示,后一个码元用b表示。
2)调制:
QPSK信号可以看作两个载波正交2PSK信号的合成,下图表示QPSK正交调制器。
原理分析:
由randint函数产生一个1x20的二进制随机矩阵,作为基带信号data;然后转换成极性码(极性NRZ电平编码器);然后按奇偶次序抽出随机数后组成1x10的矩阵(分离器);将这两个矩阵中码元宽度增大为原来的2倍(采用增加点数);如图在a路Idata与余弦载波相乘,b路同理;最后代数相加,此时便产生QPSK调制信号作为输出。
3)解调:
解调原理图如下所示。
1(t)同相信道门限=0
2(t)正交信道门限=0
原理分析:
同相支路和正交支路分别采用相干解调方式解调,得到
和
,经过低通滤波器(LPF)抽样判决和并/串交换器,将上下支路得到的并行数据恢复成串行数据demodata(1x20),此过程在复接器实现,此时便得到QPSK解调信号(应该和基带信号一样)。
4)高斯信道:
应题目要求,通过无线信道传输的调制信号会加入高斯噪声,使用awgn(si,SNR)函数来实现;实现多径信道,将延时后的信号s1加到未延时信号s0合并作为输出信号即可。
5)带通滤波器(BPF):
使用butter(N,[wp1,wp2],‘’)和filter函数实现,其中的参数通过计算公式可知
Wp1=2*delta_t*(fc-f);
Wp2=2*delta_t*(fc+f);
三、仿真结果及分析
图一
随机产生一个1x20的二进制随机矩阵data,图中基带每个码元由抽样间隔delta_t间隔的离散点构成,总共2000个点(即每个码元由100个点构成),I/Q路信号的码元应该为原来的2倍,所以每个码元由200个点构成,这样长度才能和原序列等长。
实现的部分代码如下:
data=randint(1,nb);
%调用一个随机函数(0or1),输出到一个1*100的矩阵
datanrz=data.*2-1;%变成极性码
data1=zeros(1,2000);%创建一个1*nb/delta_T的零矩阵
%将基带信号变换成对应波形信号
data0=zeros(1,2000);%创建一个1*nb/delta_T的零矩阵
forq=1:
nb
data0((q-1)*100+1:
q*100)=data(q);%将非极性码变成对应的波形信号
end
%串并转换,将奇偶位数据分开
idata=datanrz(1:
ml:
(nb-1));%将奇偶位分开,因此间隔m1为2
idata0=zeros(1,2000);%创建一个1*nb/delta_T的零矩阵
forq=1:
nb/2
idata0(2*(q-1)*100+1:
2*q*100)=idata(q);%将其码元宽度扩展成为原来码元的2倍
end
qdata=datanrz(2:
ml:
nb);
qdata0=zeros(1,2000);
forq=1:
nb/2
qdata0(2*(q-1)*100+1:
2*q*100)=qdata(q);
end
图二:
部分代码如下:
%%%%%%%%QPSK信号的调制%%%%%%%%%%%%
forii=1:
N
a(ii)=cos(2*pi*fc*t(ii));
end
idata1=idata0.*a;%奇数位数据与余弦函数相乘,得到一路的调制信号
forjj=1:
N
b(jj)=-sin(2*pi*fc*t(jj));
end
qdata1=qdata0.*b;%偶数位数据与余弦函数相乘,得到另一路的调制信号
s0=idata1+qdata1;%将奇偶位数据合并,s即为QPSK调制信号
%%%%%%%延迟信号%%%%%%%%
delay=0.0019;
forii0=1:
N
a_dl(ii0)=cos(2*pi*fc*t(ii0)+delay);
end
idata1_dl=idata0.*a_dl;%奇数位数据与余弦函数相乘,得到一路的调制信号
forjj0=1:
N
b_dl(jj0)=-sin(2*pi*fc*t(jj0)+delay);
end
qdata1_dl=qdata0.*b_dl;%偶数位数据与余弦函数相乘,得到另一路的调制信号
s1=idata1_dl+qdata1_dl;%将奇偶位数据合并,s即为QPSK调制信号
%%%%%%%%%%%%%%%%%%%%%%%%%%
%高斯信道
si=s0+s1;
图三:
通过带通滤波器(PLF)后,上下的毛刺(即高斯噪声)得到了很好的滤除,但是和图二中的调制信号相比,有点儿失真。
部分代码如下:
%高斯信道
si=s0+s1;
sk=awgn(si,SNR);%通过高斯信道之后的信号
%%%%%%%%%%%%%%%%%%%%%%%%%%
%butter数字带通滤波器
[B,A]=butter(4,[0.08,0.12],'bandpass');
sr=filter(B,A,sk);
图四:
在通过同相支路和正交支路分别采用相干解调方式解调后,得到
和
,其中包络为低频,在经过低通滤波器后(LPF)后,能很好的滤除高频部分(载波),得到低频部分,和图一的I/Q路信号对比,基本不失真;然后进行抽样判决和并/串交换器,将上下支路得到的并行数据恢复成串行数据demodata(1x20),此时便得到QPSK解调信号,基本保持不失真。
部分代码如下:
%%%%%%%%%%%解调部分
idata_lpf=sr.*a;%这里面其实隐藏了一个串并转换的过程
qdata_lpf=sr.*b;%对应的信号与正余弦信号相乘
%%%%%%低通滤波器%%%%%%%%%
[W,M]=butter(4,0.03365,'low');
idata2=filter(W,M,idata_lpf);
qdata2=filter(W,M,qdata_lpf);
idata3=zeros(1,nb/2);%建立1*nb/2数组,以存放解调之后的信号
qdata3=zeros(1,nb/2);
%抽样判决的过程,与0作比较,data>=0,则置1,否则置0
forn=1:
nb/2
ifsum(idata2((n-1)*200+1:
n*200))>=0
idata3(n)=1;
elseidata3(n)=0;
end
ifsum(qdata2((n-1)*200+1:
n*200))>=0
qdata3(n)=1;
elseqdata3(n)=0;
end
end
%将判决之后的数据存放进数组
demodata=zeros(1,nb);%解调信号
demodata(1:
ml:
(nb-1))=idata3;%存放奇数位
demodata(2:
ml:
nb)=qdata3;%存放偶数位
%为了显示,将它变成波形信号(即传输一个1代表单位宽度的高电平)
demodata1=zeros(1,2000);%创建一个1*nb/delta_T的零矩阵
forq=1:
nb
demodata1((q-1)*100+1:
q*100)=demodata(q);%将极性码变成对应的波形信号
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
图五:
系统误码率与接收端信噪比SNR的关系(蒙特卡洛仿真)。
本实验将SNR=0:
6设为大循环,里面包含一个for循环(10000次);每当循环10000次,统计误码数p(h),计算出误码率perror;随着信噪比的增大,误码率呈现下降趋势,在SNR=5,6时,基本误码率为0。
部分代码如下:
forSNR=0:
6%信噪比
10000次
forf=1:
500
......
......
end
%误码率计算
forv=1:
length(data);
ifdata(v)~=demodata(v);
p(h)=p(h)+1;
end
end
end
perror(y)=p(h)/10000;
y=y+1;
h=h+1;
End
figure(8)
SNR=0:
6;
plot(SNR,perror);title('误码率和信噪比的关系');
axis([0600.008]);
图六:
误码率和延时的关系:
在一个周期内,可以看出0~0.2.......1.2~1.4之间呈现上升趋势,这是因为误码率随着延时在一定范围的增大而增大,而在整个0~2内,具有周期性变化,周期为1/fc。
部分代码如下:
clc;
y=1;
h=1;
dd=1;
SNR=3.6;%此处涉信噪比为3.6
MINtime=0;
MAXtime=50*1e-7;
delay_t=1e-7;
p=zeros(1,50);
perror=zeros(1,50);
fordelay=MINtime:
delay_t:
MAXtime-delay_t
for
........
..........
End%在SNR=3.6,每取定一个delay,就得出一个误码率
End
figure(9)
delay=MINtime:
delay_t:
MAXtime-delay_t;
stem(delay,perror);title('PERROR&&DELAY');
axis([MINtimeMAXtime00.01]);
四、实验小结
1)设计缺点:
用了for循环的方式一增加点数实现对I/Q路信号的码元宽度进行拓宽,可以参考ceil函数;低通滤波器的截止频率并没有设置为2*delta_t*f,因为这样误码率非常大,所以设置了一个比其稍大的参数;最后的误码率和延时的关系图由于取点(n=20)较少,所以并没有很好的反映出他们的关系。
2)设计优点:
程序进一步优化后,再取大量点时运行速度较为理想;误码率实现了10*(-4)级的理想化;判决时通过使用sum(..)
与0的比较来更为准确的做出判决,减小了误码率,若采用中点取点(如:
0~200,在100处来判决),这样偶然误差较大,从而译码器准度不高。
3)学到了什么:
在短短的2周内,基于matlab对QPSK的信号调制解调过程有了更为清晰的理解,怎么去实现产生随机矩阵,怎么去按奇偶抽取点数,怎么增大码元宽度,怎么模拟高斯信道,怎么产生多径信道,以及对BPF,LPF的简单使用,怎么更好的实现判决......都有了初步的入门,加深了对通信原理的某一部分的理解吧!
附总代码:
clc;
y=1;
h=1;
p=zeros(1,7);
perror=zeros(1,7);
forSNR=0:
6%信噪比
forf=1:
500
%初始化参数
T=1e-5;%基带信号宽度,也就是频率
fc=5/T;%载波频率
ml=2;%调制信号类型的一个标志位
nb=20;%传输的比特数
delta_T=T/100;%采样间隔
fs=1/delta_T;%采样频率
t=0:
delta_T:
nb*T-delta_T;%限定t的取值范围
N=length(t);%采样数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%调制部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%基带信号的产生
data=randint(1,nb);%调用一个随机函数(0or1),输出到一个1*100的矩阵
datanrz=data.*2-1;%变成极性码
data1=zeros(1,2000);%创建一个1*nb/delta_T的零矩阵
%将基带信号变换成对应波形信号
data0=zeros(1,2000);%创建一个1*nb/delta_T的零矩阵
forq=1:
nb
data0((q-1)*100+1:
q*100)=data(q);%将非极性码变成对应的波形信号
end
%串并转换,将奇偶位数据分开
idata=datanrz(1:
ml:
(nb-1));%将奇偶位分开,因此间隔m1为2
idata0=zeros(1,2000);%创建一个1*nb/delta_T的零矩阵
forq=1:
nb/2
idata0(2*(q-1)*100+1:
2*q*100)=idata(q);%将其码元宽度扩展成为原来码元的2倍
end
qdata=datanrz(2:
ml:
nb);
qdata0=zeros(1,2000);
forq=1:
nb/2
qdata0(2*(q-1)*100+1:
2*q*100)=qdata(q);
end
%%%%%%%%QPSK信号的调制%%%%%%%%%%%%
forii=1:
N
a(ii)=cos(2*pi*fc*t(ii));
end
idata1=idata0.*a;%奇数位数据与余弦函数相乘,得到一路的调制信号
forjj=1:
N
b(jj)=-sin(2*pi*fc*t(jj));
end
qdata1=qdata0.*b;%偶数位数据与余弦函数相乘,得到另一路的调制信号
s0=idata1+qdata1;%将奇偶位数据合并,s即为QPSK调制信号
%%%%%%%延迟信号%%%%%%%%
delay=0.0019;
forii0=1:
N
a_dl(ii0)=cos(2*pi*fc*t(ii0)+delay);
end
idata1_dl=idata0.*a_dl;%奇数位数据与余弦函数相乘,得到一路的调制信号
forjj0=1:
N
b_dl(jj0)=-sin(2*pi*fc*t(jj0)+delay);
end
qdata1_dl=qdata0.*b_dl;%偶数位数据与余弦函数相乘,得到另一路的调制信号
s1=idata1_dl+qdata1_dl;%将奇偶位数据合并,s即为QPSK调制信号
%%%%%%%%%%%%%%%%%%%%%%%%%%
%高斯信道
si=s0+s1;
sk=awgn(si,SNR);%通过高斯信道之后的信号
%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%butter数字带通滤波器
[B,A]=butter(4,[0.08,0.12],'bandpass');
sr=filter(B,A,sk);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%解调部分
idata_lpf=sr.*a;%这里面其实隐藏了一个串并转换的过程
qdata_lpf=sr.*b;%对应的信号与正余弦信号相乘
%%%%%%低通滤波器%%%%%%%%%
[W,M]=butter(4,0.03365,'low');
idata2=filter(W,M,idata_lpf);
qdata2=filter(W,M,qdata_lpf);
idata3=zeros(1,nb/2);%建立1*nb/2数组,以存放解调之后的信号
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)*200+1:
n*200))>=0
idata3(n)=1;
elseidata3(n)=0;
end
ifsum(qdata2((n-1)*200+1:
n*200))>=0
qdata3(n)=1;
elseqdata3(n)=0;
end
end
%将判决之后的数据存放进数组
demodata=zeros(1,nb);%解调信号
demodata(1:
ml:
(nb-1))=idata3;%存放奇数位
demodata(2:
ml:
nb)=qdata3;%存放偶数位
%为了显示,将它变成波形信号(即传输一个1代表单位宽度的高电平)
demodata1=zeros(1,2000);%创建一个1*nb/delta_T的零矩阵
forq=1:
nb
demodata1((q-1)*100+1:
q*100)=demodata(q);%将极性码变成对应的波形信号
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%误码率计算
forv=1:
length(data);
ifdata(v)~=demodata(v);
p(h)=p(h)+1;
end
end
end
perror(y)=p(h)/10000;
y=y+1;
h=h+1;
end
figure
(1)
subplot(311);
plot(data0),title('基带信号');
axis([02000-1.51.5]);
subplot(312);
plot(idata0),title('i路信号');
axis([02000-33]);
subplot(313);
plot(qdata0),title('q路信号');
axis([02000-33]);
figure
(2)
plot(si),title('过高斯信道前的调制信号');
axis([02000-44]);
figure(3)
plot(a),title('载波信号');
axis([0200-33]);
figure(4)
plot(sk),title('过高斯信道后的调制信号');
axis([02000-44]);
figure(5)
plot(sr),title('过带通滤波器后的调制信号');
axis([02000-44]);
figure(6)
subplot(311);
plot(idata_lpf),title('i路相乘信号');
axis([02000-33]);
subplot(312);
plot(qdata_lpf),title('q路相乘信号');
axis([02000-33]);
subplot(313);
plot(demodata1),title('解调信号');
axis([02000-1.51.5]);
figure(7)
subplot(211);
plot(idata2);title('lpf_i');
subplot(212);
plot(qdata2);title('lpf_q');
figure(8)
SNR=0:
6;
plot(SNR,perror);title('误码率和信噪比的关系');
axis([0600.008]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QPSK 调制 解调 完整版 教学 文案