QPSK和OQPSK的原理以及仿真实例.docx
《QPSK和OQPSK的原理以及仿真实例.docx》由会员分享,可在线阅读,更多相关《QPSK和OQPSK的原理以及仿真实例.docx(19页珍藏版)》请在冰豆网上搜索。
![QPSK和OQPSK的原理以及仿真实例.docx](https://file1.bdocx.com/fileroot1/2023-1/31/618f906a-070c-4c99-9a0e-0a6cc533304c/618f906a-070c-4c99-9a0e-0a6cc533304c1.gif)
QPSK和OQPSK的原理以及仿真实例
1.理论知识
1.1QPSK的调制原理
四相相移键控(QPSK)又名四进制移相键控,该信号的正弦载波有四个可能的离散相位状态,每个载波相位携带2个二进制符号,其信号的表示为
θi为正弦载波的相位,有四种可能状态:
θi为π/4、3π/4、5π/4、7π/4,此初始相位为π/4的QPSK信号的矢量图如图1所示。
图1QPSK信号的矢量图
下面分析QPSK信号的产生。
将信号表达式进行改写
若θi为π/4、3π/4、5π/4、7π/4,,则
于是,信号表达式可写成
由此可得到QPSK调制的产生方法。
图2QPSK实现框图
由框图可见,两路2PSK信号分别调至在相互正交的载波上,这也是QPSK信号被称为正交载波调制的原因。
此外相位的映射采用格雷映射。
现在以一个二进制输入序列为为例解释串并变换是如何将二进制转化为四进制的。
令输入为1011010011,经过串并转换和映射可以得到原始信号与I路信号和Q路信号的关系,如图3所示.
图3QPSK调制后的I路Q路信号
1.2OQPSK的调制原理
在QPSK数字调制系统中,若将二进制双极性不归零矩形脉冲序列串并变换后再进行正交载波调制,则所得到的QPSK信号是恒定包络的。
而在实际的通信系统中,往往要求信道带宽是有限的,为了对QPSK信号带宽进行限制,经常在QPSK数字调制器中先将基带双极型矩形不归零脉冲序列经过基带成型滤波器进行带限,在进行正交载波调制,将带限的基带信号功率谱搬移到载频上,成为带限的QPSK信号。
但此时的带限QPSK信号包络将不再恒定,并且在相邻四进制符号的载波相位发生π相位跳变时会出现零包络。
若将此包络起伏很大的带限QPSK信号再进行非线性功率放大,虽然此已调信号包络的起伏会减弱,但却使非线性功率放大后的信号功率谱旁瓣增生,频谱又被扩展,而其旁瓣将会感染临近频带的信号,这是我们不希望出现的。
OQPSK又称偏移四相移键控,是QPSK的改进型。
它与QPSK有同样的相位关系,也是把输入码流分成两路,然后进行正交调制。
不同点在于它将同相和正交两支路的码流在时间上错开了半个码元周期。
由于两支路码元半周期的偏移,每次只有一路可能发生极性翻转,不会发生两支路码元极性同时翻转的现象。
因此,OQPSK信号相位只能跳变0°、±90°,不会出现180°的相位跳变,因而带限的OQPSK信号的包络起伏很小,在经过非线性功放后,不会引起功率谱旁瓣有大的增生,所以它适于在带线非线性信道中使用。
假设对同样的输入序列1011010011,OQPSK信号的I路信号和Q路信号如图4所示。
图4OQPSK信号的I路信号和Q路信号
1.3QPSK信号的平均误比特率
计算QPSK解调的误比特率有两种方法:
一是先计算误符号率(平均错判四进制符号的概率),然后再根据误符号率计算从四进制译为二进制符号的误比特率;另一种计算方法沿用2PSK匹配滤波解调的误比特率计算公式。
下面采用第二种方法来计算。
在加性高斯白噪声信道条件下,2PSK最佳接收的平均误比特率为
对于2PSK而言,在QPSK与2PSK的输入二进制信息速率相同,二者的发送功率相同,加性噪声的单边功率谱相同的条件下,QPSK与2PSK的平均误比特率是相同的。
在给定二进制信息速率的条件下,QPSK的同相支路与正交支路的四进制符号速率是二进制信息速率的一半,即Ts=2Tb。
在给定信号总发送功率的条件下,QPSK同相支路和正交支路的信号功率是总的发送功率的一半。
于是得到I路和Q路的平均错判概率为
由于QPSK发端信源输出的二进制符号“1”和“0”等概率出现,二进制码元经串并变换后在同相支路和正交支路也是等概率分布的,在收端的同相和正交之路解调的输出经并串变换后的数据,其总的平均误比特率与I路或Q路的平均误比特率是相同的,即
其中PI和PQ分别是总的二进制码元出现在I路或Q路的概率,PI=PQ=1/2,因而QPSK的平均误比特率为
综上所述,将QPSK和2PSK相比较,在两者的信息速率、信号发送功率、噪声功率谱密度相同的条件下,QPSK和2PSK的平均误比特率是相同的,而QPSK功率谱主瓣宽度比2PSK的窄一半。
2.编程实现和仿真结果
第一题程序如下:
clc;
clearall;
closeall;
%全局变量
Ts=0.01;%时间分辨率(时点间间隔),抽样时间间隔
t=0:
Ts:
5;%时间坐标s
N=length(t);
fs=1/Ts;
df=fs/(N-1);%df为频率分辨率(频率间隔)
n=-(N-1)/2:
(N-1)/2;
f=n*df;%频率坐标
%基带信号
Figure;
p=[1011010011];%待传送的编码串
d1=[0:
0.5:
t(end)-0.5];%每个编码的发送延迟时间
p1=[p,zeros(length(d1)-length(p))];%在发送串后补零
d=[d1;p1]';%产生d矩阵
m=pulstran(t-0.25,d,'rectpuls',0.5);
subplot(4,1,1);
plot(t,m)
axis([t
(1)t(end)-0.51.5])
gridon
title('基带信号p')
%抽取IQ信号BPSK只映射一路I。
OQPSK两个基带符号为一组,映射到一对IQ
pQI=reshape(p,2,5);
pQ=pQI(1,:
);
pI=pQI(2,:
);
d2=[0:
1:
t(end)-1];
dQ=[d2;pQ]';
dI=[d2;pI]';
mI=pulstran(t-0.5,dI,'rectpuls',1);
mQ=pulstran(t-0.5,dQ,'rectpuls',1);
%IQ值映射“0”映射成-1,“1”映射成1
I(pI==1)=-1/sqrt
(2);
I(pI==0)=1/sqrt
(2);
Q(pQ==1)=-1/sqrt
(2);
Q(pQ==0)=1/sqrt
(2);
dImap=[d2;I]';
dQmap=[d2;Q]';
mImap=pulstran(t-0.5,dImap,'rectpuls',1);
mQmap=pulstran(t-0.5,dQmap,'rectpuls',1);
subplot(4,1,2)
plot(t,mImap)
axis([t
(1)t(end)-1.51.5])
gridon
title('QPSK映射后的I路信号')
subplot(4,1,3)
plot(t,mQmap)
axis([t
(1)t(end)-1.51.5])
gridon
title('QPSK映射后的Q路信号')
%载波信号
fc=10%载波频率
c1=cos(2*pi*fc*t);
c2=sin(2*pi*fc*t);
%已调信号
s1=mImap.*c1;
s2=mQmap.*c2;
s=s1-s2;
subplot(4,1,4)
plot(t,s)
axis([t
(1)t(end)-1.51.5])
title('QPSK进入信道的信号s=s1-s2')
text(0.5,1.2,'7*π/4')
text(1.5,1.2,'5*π/4')
text(2.5,1.2,'3*π/4')
text(3.5,1.2,'1*π/4')
text(4.5,1.2,'5*π/4')
gridon
figure
S=fft(s);
S=fftshift(S);
plot(f,abs(S)/N);
title('qpsk频谱');
figure
N1=128;
W=[9.5/5010.5/50];
bd=FIR1(N1,W,kaiser(N1+1,4));
[h,f1]=freqz(bd,1,N1);%求数字带通滤波器的频率响应
subplot(411);
plot(f1*50/pi,abs(h));%绘制带通滤波器的幅频响应图
title('带通滤波器的幅频响应图');
xlabel('f/HZ');
ylabel('amplitude');
subplot(412);
sf=filter(bd,1,s);
plot(t,sf);%绘制叠加函数S经过带通滤波器以后的时域图形
title('QPSK经过带通滤波器以后的时域图形');
xlabel('t/s');
ylabel('amplitude');
subplot(413);
extrmaxvalue=sf(find(diff(sign(diff(sf)))==-2)+1);
extrmaxindex=find(diff(sign(diff(sf)))==-2)+1;
extrminvalue=sf(find(diff(sign(diff(sf)))==+2)+1);
extrminindex=find(diff(sign(diff(sf)))==+2)+1;
plot(extrmaxindex/100,extrmaxvalue,extrminindex/100,extrminvalue)
title('QPSK经过带通滤波器以后的包络');
axis([05-11])
xlabel('t/s');
ylabel('envelope');
SF=fft(sf);
SF=fftshift(SF);
subplot(414);
plot(f,abs(SF)/N);
title('QPSK经过带通滤波器以后的频域图形');
xlabel('f/HZ');
ylabel('amplitude');
figure
sf_amplifer=sf.*1.5.*tanh(2*t);
SF_amplifer=fft(sf_amplifer);
SF_amplifer=fftshift(SF_amplifer);
plot(f,SF_amplifer);
title('QPSK经过非线性放大后频谱');
%全局变量
%N=2^12%宽度,或称为点数
Ts=0.01;%时间分辨率(时间间隔),抽样时间间隔
t=0:
Ts:
5;%时间坐标s
N=length(t);
fs=1/Ts;
df=fs/(N-1);%df为频率分辨率(频率间隔)
n=-(N-1)/2:
(N-1)/2;
f=n*df;%频率坐标
%基带信号
figure
p=[1011010011];%待传送的编码串,可用randint(1,n)生信源;若用rand(1,n,M),则范围是1~M-1
d1=[0:
0.5:
t(end)-0.5];%每个编码的发送延迟时间
p1=[p,zeros(length(d1)-length(p))];%在发送串后补零
d=[d1;p1]';%产生d矩阵
m=pulstran(t-0.25,d,'rectpuls',0.5);
subplot(4,1,1);
plot(t,m)
axis([t
(1)t(end)-0.51.5])
gridon
title('基带信号p')
%抽取IQ信号BPSK只映射一路I。
OQPSK两个基带符号为一组,映射到一对IQ
pQI=reshape(p,2,5);
pQ=pQI(1,:
);
pI=pQI(2,:
);
d2=[0:
1:
t(end)-1];
dQ=[d2;pQ]';
dI=[d2;pI]';
mI=pulstran(t,dI,'rectpuls',1);
mQ=pulstran(t-0.5,dQ,'rectpuls',1);
%IQ值映射“0”映射成-1,“1”映射成1
I(pI==1)=-1/sqrt
(2);
I(pI==0)=1/sqrt
(2);
Q(pQ==1)=-1/sqrt
(2);
Q(pQ==0)=1/sqrt
(2);
dImap=[d2;I]';
dQmap=[d2;Q]';
mImap=pulstran(t,dImap,'rectpuls',1);
mQmap=pulstran(t-0.5,dQmap,'rectpuls',1);
subplot(4,1,2)
plot(t,mImap)
axis([t
(1)t(end)-1.51.5])
gridon
title('OQPSK映射后的I路信号')
subplot(4,1,3)
plot(t,mQmap)
axis([t
(1)t(end)-1.51.5])
gridon
title('OQPSK映射后的Q路信号')
%载波信号
fc=10;%载波频率
c1=cos(2*pi*fc*t);
c2=sin(2*pi*fc*t);
%已调信号
s1=mImap.*c1;
s2=mQmap.*c2;
s=s1-s2;
subplot(4,1,4)
plot(t,s)
axis([t
(1)t(end)-1.51.5])
title('OQPSK进入信道的信号s=s1-s2')
text(0.25,1.2,'7*π/4')
text(1.25,1.2,'5*π/4')
text(2.25,1.2,'3*π/4')
text(3.25,1.2,'1*π/4')
text(4.25,1.2,'5*π/4')
gridon
figure
S=fft(s);
S=fftshift(S);
plot(f,abs(S)/N);
title('oqpsk频谱');
figure
N1=128;
W=[9/5011/50];
bd=FIR1(N1,W,kaiser(N1+1,4));
[h,f1]=freqz(bd,1,N1);%求数字带通滤波器的频率响应
subplot(411);
plot(f1*50/pi,abs(h));%绘制带通滤波器的幅频响应图
title('带通滤波器的幅频响应图');
xlabel('f/HZ');
ylabel('amplitude');
subplot(412);
sf=filter(bd,1,s);
plot(t,sf);%绘制叠加函数S经过带通滤波器以后的时域图形
title('OQPSK经过带通滤波器以后的时域图形');
xlabel('t/s');
ylabel('amplitude');
subplot(413);
extrmaxvalue=sf(find(diff(sign(diff(sf)))==-2)+1);
extrmaxindex=find(diff(sign(diff(sf)))==-2)+1;
extrminvalue=sf(find(diff(sign(diff(sf)))==+2)+1);
extrminindex=find(diff(sign(diff(sf)))==+2)+1;
plot(extrmaxindex,extrmaxvalue,extrminindex,extrminvalue);
title('OQPSK经过带通滤波器以后的包络');
xlabel('t/s');
ylabel('envelope');
SF=fft(sf);
SF=fftshift(SF);
subplot(414);
plot(f,abs(SF)/N);
title('OQPSK经过带通滤波器以后的频域图形');
xlabel('f/HZ');
ylabel('amplitude');
figure
sf_amplifer=sf.*1.5.*tanh(2*t);
SF_amplifer=fft(sf_amplifer);
SF_amplifer=fftshift(SF_amplifer);
plot(f,SF_amplifer);
title('OQPSK经过非线性放大后频谱');
程序运行结果见图5——图10。
图5基带信号以及经过QPSK调制后的I路和Q论信号
图6经过QPSK调制后的信号频谱
图7QPSK调制后的信号经过非线性放大后的频谱
图8基带信号以及经过OQPSK调制后的I路和Q路信号
图9OQPSK调制后的信号频谱
图10OQPSK调制后的信号经过非线性放大后的频谱
图11QPSK经过带通滤波器后的时域波形和包络
图12OQPSK经过带通滤波器后的时域波形和包络
第二题程序如下:
clearall;
clc;
M=4;
x=randint(100000,1,M);%随机序列
s=pskmod(x,M);%调制
SNR=-10:
1:
10;%信噪比范围
forn=1:
length(SNR)
r=awgn(s,SNR(n),'measured');%加高斯噪声
r1=pskdemod(r,M);%解调
[nErrors,BER(n)]=biterr(x(1:
end),r1(1:
end));%计算仿真误比特率
end
fori=1:
length(SNR)
SNR1(i)=10^(SNR(i)/10);%信噪比
BERtheory(i)=1-(1-0.5*erfc(sqrt(SNR1(i)/2)))^2;
BERtheory(i)=BERtheory(i)/2;
end
figure
semilogy(SNR,BERtheory,'b-');%不同颜色画出误比特率曲线对比
holdon
semilogy(SNR,BER,'r');%不同颜色画出误比特率曲线对比
legend('理论BER','实际BER');%曲线名称
gridon
xlabel('SNR(dB)');ylabel('BER');%横纵坐标
title('QPSK通过AWGN信道');
程序运行结果见图11。
图13经过QPSK的信号在AWGN信道中的理论和实际误比特率结果图
3.仿真结论
无论QPSK还是OQPSK,当系统带宽很宽时,可近似认为它们的时域包络都是恒定的,但是经过带限的滤波器后包络均出现起伏,QPSK在180度相移跳变点,即I路和Q路都发生跳变时出现零包络,这种相位跳变引起包络起伏,当通过非线性部件后,使已经滤除的带外分量又被恢复出来,导致频谱扩展,增加对相邻波道的干扰,如图14所示
而对于OQPSK调制,由于I路和Q路在时间上错开了半个码元周期,使得在同一时刻最多只有一路发生跳变,即最多只产生90°的跳变。
在经过非线性功放时,包络的起伏相对QPSK调制来说会小很多,且不会出现零包络现象。
在频域上,由于包络起伏的影响,在经过非线性器件后,已经滤除的部分带外分量会被恢复出来,因此会对其他频带的信号造成干扰。
针对QPSK调制和OQPSK调制,OQPSK有更小的包络起伏,因此经过非线性功放后的频谱也更为集中,如图15所示。
图14QPSK经过非线性放大后的频谱
图15OQPSK经过非线性放大后的频谱
4.参考文献
1.曹志刚,钱亚生.现代通信原理.北京:
清华大学出版社,1992.
2.樊昌信.通信原理.第六版.北京:
国防工业出版社,2006
3.周炯槃,吴伟陵.通信原理.第三版北京:
北京邮电大学出版社,2006