PSK原理介绍(以2-PSK为例)
移相键控(PSK)又称为数字相位调制,二进制移相键控记作2PSK。绝对相移是利用载波的相位(指初相)直接表示数字信号的相移方式。二进制相移键控中,通常用相位0 和π来分别表示“0”或“1”。2PSK 已调信号的时域表达式为s2psk(t)=s(t)cosωct, 2PSK移相键控中的基带信号与频移键控和幅度键控是有区别的,频移键控和幅度键控为单极性非归零矩形脉冲序列,移相键控为为双极性数字基带信号,就模拟调制法而言,与产生2ASK 信号的方法比较,只是对s(t)要求不同,因此2PSK 信号可以看作是双极性基带信号作用下的DSB 调幅信号。
在二进制数字调制中,当正弦载波的相位随二进制数字基带信号离散变化时,则产生二进制移相键控(2PSK)信号。 通常用已调信号载波的 0°和 180°分别表示二进制数字基带信号的 1 和 0。 二进制移相键控信号的时域表达式为
e2PSK(t)=[ an g(t-nTs)]coswct
n其中, an与2ASK和2FSK时的不同,在2PSK调制中,an应选择双极性。
1, 发送概率为P
an= -1, 发送概率为1-P
若g(t)是脉宽为Ts, 高度为1的矩形脉冲时,则有
cosωct, 发送概率为P
e2PSK(t)= -cosωct, 发送概率为1-P
由上式(6.2-28)可看出,当发送二进制符号1时,已调信号e2PSK(t)取0°相位,发送二进制符号0时,e2PSK(t)取180°相位。若用φn表示第n个符号的绝对相位,则有
0°, 发送 1 符号
φn=
180°, 发送 0 符号
由于在2PSK信号的载波恢复过程中存在着180°的相位模糊,所以2PSK信
号的相干解调存在随机的“倒π”现象,从而使得2PSK方式在实际中很少采用。为了解决2PSK信号解调过程的反向工作问题, 提出了二进制差分相位键控(2DPSK),这里不再详述。
2-PSK调制解调
二进制移相键控信号的调制原理:如图9所示。 其中图(a)是采用模拟调制的方法产生2PSK信号,图(b)是采用数字键控的方法产生2PSK信号。
解调器原理:如图10所示。 2PSK信号的解调通常都是采用相干解调, 在相干解调过程中需要用到与接收的2PSK信号同频同相的相干载波。
双极性不归零
s(t) 码型变换 乘法器 e2PSK(t) cos(wct)
(a) 模拟调制产生2PSK信号
开关电路
0度 cos(wct) e2PSK(t) 180度 180度移相 s(t)
(b)数字键控的方法产生2PSK信号 图 9 2PSK信号的调制原理图
e2PSK(t) 带通 滤波器 a 相乘器 c 低通 滤波器 d b cos(wct) 图 10
2PSK信号的解调原理图
100100抽样 判决器 定时 脉冲 e 输出
a11
b
c
de
图11 2PSK信号相干解调各点时间波形
就键控法来说,用数字基带信号s(t)控制开关电路,选择不同相位的载波输出,这时s(t)为单极性NRZ或双极性NRZ 脉冲序列信号均可。当基带信号为0 时候,连通开关0,产生无差别的载波,当所发出的信号为1 时,既连通开关П改变载波的相位。在移相键控中还有一种差分移相键,他和普通的移相键控区别在与,差分移相键只有在当前传输的码元和上次传输的码元产生差别时才会产生相位的变化。移相键控相对与幅度键控和移频键控有着更好的抗干扰性,也更适合于在信道中传输。
QPSK调制
QPSK信号可以看作两个载波正交2PSK信号的合成。
用调相法产生QPSK调制器框图如图12所示,QPSK的调制器可以看作是由两个BPSK调制器构成,输入的串行二进制信息序列经过串并变换,变成两路速率减半的序列,电平发生器分别产生双极性的二电平信号I(t)和Q(t),然后对cosAtω和sinAtω进行调制,相加后即可得到QPSK信号
I(t) Acos(wt) 电平产生 二进制信息 串并转换 载波 发生器 输出QPSK信号
移相90度 电平产生 Q(t) Asin(wt)
图12 QPSK调制器框图
QPSK解调
QPSK信号的解调原理如图3-5的方框图所示。解调是从已调信号中提取信号的过程,在某种意义上解调是调制的逆过程。由于QPSK信号可以看作是两正交2PSK信号的叠加,故用两路正交的相干载波去解调,这样能
够很容易地分离出这两路正交的2PSK信号。相干解调后的两路并行码元a和b经过“并/串”转换后成为串行数据输出。
相乘 cos0t s(t) 载波 提取 低通 抽判 a 定时 A(t) 提取 并/串 /2 -sin0t 相乘 低通 抽判 b 图3-5 QPSK信号解调原理方框图
BPSK调制解调程序
%构造载波,产生8个码元,生成已调信号% a=randsrc(1,8,[0:1]);%产生8个随机的二进制数
l=linspace(0,2*pi,50);%利用linspace函数创建数组,2pi长度取点50个模拟一个码元 f=sin(2*l);%生成载波
t=linspace(0,10*pi,400);%定义时轴length为10pi,取点400个,代表8个码元的总取样点数 out=1:400;%规定已调信号length b=1:400;% 规定基带信号length w=1:400;%规定载波length %生成PSK信号% for i=1:8
if a(i)==0 for j=1:50
out(j+50*(i-1))=f(j); %若码元为0则将载波输出 end else
for j=1:50
out(j+50*(i-1))=-f(j); %若码元为1则将载波反相输出 end end end
%输出载波和基带信号% for i=1:8 for j=1:50
b(j+50*(i-1))=a(i); %b作为调制信号输出 w(j+50*(i-1))=f(j); %w作为载波输出
end end
subplot(3,3,1),plot(t,b),axis([0 10*pi -0.5 1.2]), xlabel('t'),ylabel('幅度'),title('基带信号');grid on; subplot(3,3,2),plot(t,w),axis([0 10*pi -1.2 1.2]), xlabel('t'),ylabel('幅度'),title('载波'); grid on;
subplot(3,3,3),plot(t,out),axis([0 10*pi -1.2 1.2]),xlabel('t'),ylabel('幅度'),title('PSK波形');grid on; %已调信号加入高斯白噪声%
noise=awgn(out,80,'measured') ; %产生噪音并加入到已调信号out中,信噪比80 subplot(334); plot(t,noise);
ylabel('幅度');title('噪音+信号'); xlabel('t'); axis([0 10*pi -1.2 1.2]); grid on; %信号通过BPF%
Fs=400; %抽样频率400HZ t=(1:400)*10*40/Fs; %时轴步进 [b,a]=ellip(4,0.1,40,[10,25]*2/Fs); %设计IIR-BPF
sf=filter(b,a,noise); %信号通过该滤波器 subplot(335);
plot(t,sf); %画出信号通过该BPF的波形 xlabel('t'); ylabel('幅度');title('通过BPF后的波形'); axis([0 10*pi -1.2 1.2]);grid on; %信号经过相乘器%
f=[f f f f f f f f]; %%调整载波函数的长度,与BPF输出函数统一length s=sf.*f;%信号与载波相乘 s=(-1).*s;
subplot(336);
plot(t,s);%画出信号通过该相乘器的波形
xlabel('t'); ylabel('幅度');title('通过相乘器后波形'); axis([0 10*pi -1 1]);grid on; %信号通过LPF%
Fs=400; %抽样频率400HZ t=(1:400)*10*pi/Fs; %时轴步进 [b,a]=ellip(4,0.1,40,[10]*2/Fs); %设计IIR-LPF
sf=filter(b,a,s); %信号通过该滤波器 subplot(337);
plot(t,sf); %画出信号通过该低通滤波器的波形 xlabel('t'); ylabel('幅度');title('通过LPF后的波形'); axis([0 10*pi -1 1]);grid on; %抽样判决%
b=0.26; %设置判决门限 for i=1:8 for j=1:50
if sf(j+50*(i-1))>b
sf(j+50*(i-1))=1; %若sf>判决门限,说明此时码元为1 else
sf(j+50*(i-1))=0; %若sf<判决门限,说明此时码元为0 end end end
subplot(338);
plot(t,sf); %画出信号通过抽样判决器的波形 xlabel('t'); ylabel('幅度'); title('抽样判决后波形'); axis([3 10*pi -0.5 1.2]); grid on;
QPK调制解调程序 (1)调制
% 调相法 clear all close all
t=[-1:0.01:7-0.01]; tt=length(t); x1=ones(1,800); for i=1:tt
if (t(i)>=-1 & t(i)<=1) | (t(i)>=5& t(i)<=7); x1(i)=1;
else x1(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); for i=1:tt1
if (t1(i)>=0 & t1(i)<=2) | (t1(i)>=4& t1(i)<=8); x2(i)=1;
else x2(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([-1 8 -1 1]);ylabel('a序列'); subplot(4,1,2);plot(t4,q_rc);axis([-1 8 -1 1]);ylabel('b序列');
subplot(4,1,3);plot(t2,QPSK_rc);axis([-1 8 -1 1]);ylabel('合成序列'); subplot(4,1,4);plot(t2,QPSK_rc_n1);axis([-1 8 -1 1]);ylabel('加入噪声');
(2)解调
% 设定 T=1, 不加噪声 clear all close all
% 调制
bit_in = randint(1e3, 1, [0 1]); 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);
for i=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=[]; for i=1:20:10000
data_recover=[data_recover I(i:1:i+19) Q(i:1:i+19)]; end;
ddd = -2*bit_in+1;
ddd1=repmat(ddd',10,1); for i=1:1e4
ddd2(i)=ddd1(i);
end
figure(1)
subplot(4,1,1);plot(t3,I);axis([0 20 -6 6]); ylabel('解调后奇位'); subplot(4,1,2);plot(t3,Q);axis([0 20 -6 6]); ylabel('解调后偶位');
subplot(4,1,3);plot(t2,data_recover);axis([0 20 -6 6]); ylabel('解调后序列'); subplot(4,1,4);plot(t,ddd2);axis([0 20 -6 6]); ylabel('原始序列');
因篇幅问题不能全部显示,请点此查看更多更全内容