QPSK通信系统的设计与仿真 精品.docx
《QPSK通信系统的设计与仿真 精品.docx》由会员分享,可在线阅读,更多相关《QPSK通信系统的设计与仿真 精品.docx(15页珍藏版)》请在冰豆网上搜索。
![QPSK通信系统的设计与仿真 精品.docx](https://file1.bdocx.com/fileroot1/2023-1/29/c96103ff-c5ba-4693-a2a0-748adc89dbee/c96103ff-c5ba-4693-a2a0-748adc89dbee1.gif)
QPSK通信系统的设计与仿真精品
一、QPSK简介
在多相调制中,可以用多种相位差来表示数字数据信息。
把要传送的二进制信息序列每K比特编为一组,那么便构成了K比特码元,每一K比特码元都有2^K种不同的状态,要用2^K种不同的相位或相位差来表示。
由于K比特码元包括的信息量是二进制码元所含信息量的K倍,所以,多相调制系统与二相调制系统相比,在码元传输速率相同时,信息传输速率更高。
例如,四相调制系统的信息传输速率是二相调制系统的两倍。
另外,在系统信息传输速率的情况下,由于多相调制系统的码元速率比二相调制要低,因而多相调制时,信号码元持续时间比二相调制时长。
码元时间长,则对应的带宽就窄,因此压缩了信号的频带,可以叫嚣由于新到特性引起的码间串扰的影响。
由此可见,多相调制是提高数据通信有效性、可靠性的一种途径。
由于四相绝对移相信号可以看成两个正交2PSK信号只能采用相干检测法解调,4PSK信号也只能采用两个正交的相干载波分别来检测这两个分量A和B。
在四相绝对移相调制系统中,实现起来最困难的问题在于接收端如何产生一标准的相干载波。
通常采用的方法是四倍频-四分频法,然后经过四次分频,便可以得到所有的相干载波输出。
这种方法也会由于分频起始点不同而使提取的相干载波的相位出现四种不确定性。
因此,在实际中,通常采用四相相对移相调制。
二、QPSK调制解调原理
2.1QPSK调制原理
简称“QPSK”。
它分为绝对相移和相对相移两种。
由于绝对相移方式存在相位模糊问题,所以在实际中主要采用相对移相方式QDPSK。
它具有一系列独特的优点,目前已经广泛应用于无线通信中,成为现代通信中一种十分重要的调制解调方式。
在数字信号的调制方式中QPSK四相移键控是目前最常用的一种卫星数字信号调制方式,它具有较高的频谱利用率、较强的抗干扰性、在电路上实现也较为简单。
QPSK四相绝对相移键控,用载波信号的4个初始相位对应4进制码元。
因此,对于输入的二进制数字序列每2比特分为一组,称为双比特码元AB,然后用4种不同的载波相位分别表征这4种数字码元。
按AB分组与载波相位的对应关系有π/2体系(也称A方式)与π/4体系(也称B方式),具体定义如表所示:
双比特码元AB
载波相位
A
B
π/2体
系(A方式)
π/4体系(B方式)
0
0
0(
)
5π/4(225°)
1
0
π/2(
)
7π/4(315°)
1
1
π(
)
π/4(45°)
0
1
3π/2(
)
3π/4(135°)
图2-1QPSK信号双比特码元与相位矢量关系图
图2-2
四相相移调制是利用载波的四种不同相位差来表征输入的数字信息,是四进制移相键控。
QPSK是在M=4时的调相技术,它规定了四种载波相位,分别为45°,135°,225°,315°,输入的数据是二进制数字序列,为了能和四进制的载波配合起来,则需要把二进制数据变换为四进制数据,这就是说需要把二进制数字序列中每两个比特分成一组,共有四种组合,即00,01,10,11,其中每一组称为双比特码元。
每一个双比特码元是由两位二进制信息比特组成,它们分别代表四进制四个符号中的一个符号。
QPSK中每次调制可传输2个信息比特,这些信息比特是通过的四种相位来传递的。
解调器根据星座图及接收到的载波信号的相位来判断发送端发送的信息比特。
数字调制用“星座图”来描述,星座图中定义了一种调制技术的两个基本参数:
(1)信号分布;
(2)与调制数字比特之间的关系。
星座图中规定了星座点与传输比特间的对应关系,这种关系称为“映射”,一种调制技术的特性可由信号分布和映射完全定义,即可由星座图来完全定义。
同时QPSK信号可以看作两个载波正交2PSK信号的合成,下图表示QPSK正交调制器。
图2-3QPSK调制系统原理图
2.2QPSK解调原理
数字调制用“星座图”来描述,星座图中定义了一种调制技术的两个基本参数:
(1)信号分布;
(2)与调制数字比特之间的关系。
星座图中规定了星座点与传输比特间的对应关系,这种关系称为“映射”,一种调制技术的特性可由信号分布和映射完全定义,即可由星座图来完全定义。
四相相移调制是利用载波的四种不同相位差来表征输入的数字信息,是四进制移相键控。
QPSK是在M=4时的调相技术,它规定了四种载波相位,分别为45°,135°,225°,315°,输入的数据是二进制数字序列,为了能和四进制的载波配合起来,则需要把二进制数据变换为四进制数据,这就是说需要把二进制数字序列中每两个比特分成一组,共有四种组合,即00,01,10,11,其中每一组称为双比特码元。
每一个双比特码元是由两位二进制信息比特组成,它们分别代表四进制四个符号中的一个符号。
QPSK中每次调制可传输2个信息比特,这些信息比特是通过的四种相位来传递的。
解调器根据星座图及接收到的载波信号的相位来判断发送端发送的信息比特。
由QPSK信号的调制可知,对它的解调可以采用与2PSK信号类似的解调方法进行解调。
解调原理图如下所示,同相支路和正交支路分别采用相干解调方式解调,得到
和
,经过抽样判决和并/串交换器,将上下支路得到的并行数据恢复成串行数据。
图2-4QPSK解调系统原理图
3、MATLAB仿真结果
3.1QPSK的产生及加噪仿真
图3-1
通过matlab产生两路相互正交的2PSK信号,信号叠加后的到合成序列,对合成序列进行加噪处理。
3.2QPSK解调前后信号仿真
图3-2
3.3QPSK码元恢复
然后相干解调中,正交路和同相路分别设置两个相关器(或匹配滤波器),得到I(t)和Q(t),经电平判决和并一串变换后即可恢复原始信息。
当然,如果调制端是差分编码的,那么解调中并串变换后还需一个差分解码。
假如已调信号
分别为同相路和正交路,ω为载波频率,那么相干解调后,同相路相乘可得
正交路为:
经过低通滤波后,可得:
在完成通过滤波器之后,将码元再通过并串转换,就可以恢复出原始信号的码元序列。
图3-3
3.4误码率分析
图3-4
有图示可知,QPSK调制解调有比较低的误码率,所以因其抗干扰性能强、误码性能好、频谱利用率高等优点,广泛应用于数字微波通信系统、数字卫星通信系统、宽带接入、移动通信及有线电视系统之中。
4、程序清单
clearall
closeall
t=[-1:
0.01:
7-0.01];
tt=length(t);
x1=ones(1,800);
fori=1:
tt
if(t(i)>=-1&t(i)<=1)|(t(i)>=5&t(i)<=7);
x1(i)=1;
elsex1(i)=-1;
end
end
t1=[0:
0.01:
8-0.01];
t2=0:
0.01:
7-0.01;
t3=-1:
0.01:
7.1-0.01;
t4=0:
0.01:
8.1-0.01;
tt1=length(t1);
x2=ones(1,800);
fori=1:
tt1
if(t1(i)>=0&t1(i)<=2)|(t1(i)>=4&t1(i)<=8);
x2(i)=1;
elsex2(i)=-1;
end
end
f=0:
0.1:
1;
xrc=0.5+0.5*cos(pi*f);
y1=conv(x1,xrc)/5.5;
y2=conv(x2,xrc)/5.5;
n0=randn(size(t2));
f1=1;
i=x1.*cos(2*pi*f1*t);
q=x2.*sin(2*pi*f1*t1);
I=i(101:
800);
Q=q(1:
700);
QPSK=sqrt(1/2).*I+sqrt(1/2).*Q;
QPSK_n=(sqrt(1/2).*I+sqrt(1/2).*Q)+n0;
n1=randn(size(t2));
i_rc=y1.*cos(2*pi*f1*t3);
q_rc=y2.*sin(2*pi*f1*t4);
I_rc=i_rc(101:
800);
Q_rc=q_rc(1:
700);
QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);
QPSK_rc_n1=QPSK_rc+n1;
figure
(1)
subplot(4,1,1);plot(t3,i_rc);axis([-18-11]);ylabel('a序列');
subplot(4,1,2);plot(t4,q_rc);axis([-18-11]);ylabel('b序列');
subplot(4,1,3);plot(t2,QPSK_rc);axis([-18-11]);ylabel('合成序列');
subplot(4,1,4);plot(t2,QPSK_rc_n1);axis([-18-11]);ylabel('加入噪声');
clearall
closeall
%调制
bit_in=randint(1e3,1,[01]);
bit_I=bit_in(1:
2:
1e3);
bit_Q=bit_in(2:
2:
1e3);
data_I=-2*bit_I+1;
data_Q=-2*bit_Q+1;
data_I1=repmat(data_I',20,1);
data_Q1=repmat(data_Q',20,1);
fori=1:
1e4
data_I2(i)=data_I1(i);
data_Q2(i)=data_Q1(i);
end;
f=0:
0.1:
1;
xrc=0.5+0.5*cos(pi*f);
data_I2_rc=conv(data_I2,xrc)/5.5;
data_Q2_rc=conv(data_Q2,xrc)/5.5;
f1=1;
t1=0:
0.1:
1e3+0.9;
n0=rand(size(t1));
I_rc=data_I2_rc.*cos(2*pi*f1*t1);
Q_rc=data_Q2_rc.*sin(2*pi*f1*t1);
QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);
QPSK_rc_n0=QPSK_rc+n0;
%解调
I_demo=QPSK_rc_n0.*cos(2*pi*f1*t1);
Q_demo=QPSK_rc_n0.*sin(2*pi*f1*t1);
%低通滤波
I_recover=conv(I_demo,xrc);
Q_recover=conv(Q_demo,xrc);
I=I_recover(11:
10010);
Q=Q_recover(11:
10010);
t2=0:
0.05:
1e3-0.05;
t3=0:
0.1:
1e3-0.1;
%抽样判决
data_recover=[];
fori=1:
20:
10000
data_recover=[data_recoverI(i:
1:
i+19)Q(i:
1:
i+19)];
end;
bit_recover=[];
fori=1:
20:
20000
ifsum(data_recover(i:
i+19))>0
data_recover_a(i:
i+19)=1;
bit_recover=[bit_recover1];
else
data_recover_a(i:
i+19)=-1;
bit_recover=[bit_recover-1];
end
end
error=0;
dd=-2*bit_in+1;
ddd=[dd'];
ddd1=repmat(ddd,20,1);
fori=1:
2e4
ddd2(i)=ddd1(i);
end
fori=1:
1e3
ifbit_recover(i)~=ddd(i)
error=error+1;
end
end
p=error/1000;
figure
(1)
subplot(2,1,1);plot(t2,ddd2);axis([0100-22]);title('原序列');
subplot(2,1,2);plot(t2,data_recover_a);axis([0100-22]);title('解调后序列');
clearall
closeall
%调制
bit_in=randint(1e3,1,[01]);
bit_I=bit_in(1:
2:
1e3);
bit_Q=bit_in(2:
2:
1e3);
data_I=-2*bit_I+1;
data_Q=-2*bit_Q+1;
data_I1=repmat(data_I',20,1);
data_Q1=repmat(data_Q',20,1);
fori=1:
1e4
data_I2(i)=data_I1(i);
data_Q2(i)=data_Q1(i);
end;
t=0:
0.1:
1e3-0.1;
f=0:
0.1:
1;
xrc=0.5+0.5*cos(pi*f);
data_I2_rc=conv(data_I2,xrc)/5.5;
data_Q2_rc=conv(data_Q2,xrc)/5.5;
f1=1;
t1=0:
0.1:
1e3+0.9;
I_rc=data_I2_rc.*cos(2*pi*f1*t1);
Q_rc=data_Q2_rc.*sin(2*pi*f1*t1);
QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);
%解调
I_demo=QPSK_rc.*cos(2*pi*f1*t1);
Q_demo=QPSK_rc.*sin(2*pi*f1*t1);
I_recover=conv(I_demo,xrc);
Q_recover=conv(Q_demo,xrc);
I=I_recover(11:
10010);
Q=Q_recover(11:
10010);
t2=0:
0.05:
1e3-0.05;
t3=0:
0.1:
1e3-0.1;
data_recover=[];
fori=1:
20:
10000
data_recover=[data_recoverI(i:
1:
i+19)Q(i:
1:
i+19)];
end;
ddd=-2*bit_in+1;
ddd1=repmat(ddd',10,1);
fori=1:
1e4
ddd2(i)=ddd1(i);
end
figure
(1)
subplot(4,1,1);plot(t3,I);axis([020-66]);
subplot(4,1,2);plot(t3,Q);axis([020-66]);
subplot(4,1,3);plot(t2,data_recover);axis([020-66]);
subplot(4,1,4);plot(t,ddd2);axis([020-66]);
%QPSK误码率分析
SNRindB1=0:
2:
10;
SNRindB2=0:
0.1:
10;
fori=1:
length(SNRindB1)
[pb,ps]=cm_sm32(SNRindB1(i));
smld_bit_err_prb(i)=pb;
smld_symbol_err_prb(i)=ps;
end;
fori=1:
length(SNRindB2)
SNR=exp(SNRindB2(i)*log(10)/10);
theo_err_prb(i)=Qfunct(sqrt(2*SNR));
end;
title('QPSK误码率分析');
semilogy(SNRindB1,smld_bit_err_prb,'*');
axis([01010e-81]);
holdon;
%semilogy(SNRindB1,smld_symbol_err_prb,'o');
semilogy(SNRindB2,theo_err_prb);
legend('仿真比特误码率','理论比特误码率');
holdoff;