数字2DPSK频带传输系统的设计
一、实验原理
1、2DPSK调制原理
在2PSK
信号中,信号相位的变化是以未调正弦载波的相位作为参考,用载波相位的绝对数值来表示数字信息的,所以称为绝对移相。由于相干载波恢复中载波相位的180°相位模糊
,导致解调出的二进制基带信号出现了反向现象,从而难以实际应用,由此提出了二进制差分相位键控
。
2DPSK是利用前后码元的载波相对相位变化传递数字信息的,所以又称相对相移键控,假设前后相邻码元的载波相位差为Δφ ,可定义一种数字信息与 之间的关系为
数字信息与 之间的关系也可以定义为
2DPSK的实现过程可以采用如下方法:首先对二进制数字基带信号进行差分编码,将绝对码表示成二进制信息变换为用相对码表示二进制信息,然后再进行绝对调相,从而产生二进制差分相位键控信号,2DPSK信号调制器原理图如下:
2、2DPSK解调原理
2DPSK信号可以采用相干解调方式(极性比较法)
。其解调原理是:对2DPSK信号进行相干解调,恢复出相对码,在通过码反变换器变换为绝对码,从而恢复出发送的二进制数字信息。在解调过程中,若相干载波产生180°相位模糊,解调出的相对码将产生倒置现象,但是经过码反变换器后,输出的绝对码不会发生任何倒置现象,从而解决了载波相位模糊度的问题。
2DPSK信号也可以采用
差分相干解调方式(相位比较法)
。其解调原理是直接比较前后码元的相位差,从而恢复发送的二进制数字信息。由于解调的同时完成了码反变换作用,故解调器不需要码反变换器。由于差分相干解调方式不需要专门的相干载波,因此是一种非相干解调方法。
二、实验流程
1、调制系统设计
1)产生基带信号
本次实验我们组使用matlab中的randi函数随机产生了20000个随机数,对应0/1二进制信源,此过程产生的码为绝对码
%产生基带信号波形
bits = randi(2,1,Nsym)-1; %生成长度为Nsym的伪随机序列
s_t = ones(1,Num_Unit*Nsym);
High_Level = ones(1,Num_Unit);
Low_Level = zeros(1,Num_Unit);
for n = 1:Nsym
if bits(n)==0
s_t((n-1)*Num_Unit+1:n*Num_Unit)=Low_Level;
else
s_t((n-1)*Num_Unit+1:n*Num_Unit)=High_Level;
end
end
figure(1)
subplot(211)
plot(s_t);title("绝对码");
2)产生相对码
根据相对码的原理此实验中,我们把相对码初始值设为0
Diff_s_t = ones(1,Num_Unit*Nsym);
for i = 1:Nsym
if i == 1
Diff_s_t((i-1)*Num_Unit+1:i*Num_Unit)=mod(0+s_t((i-1)*Num_Unit+1:i*Num_Unit),2);
else
Diff_s_t((i-1)*Num_Unit+1:i*Num_Unit)=mod(Diff_s_t((i-2)*Num_Unit+1:(i-1)*Num_Unit)+s_t((i-1)*Num_Unit+1:i*Num_Unit),2);
end
end
figure(1)
subplot(212)
plot(Diff_s_t);title("相对码");
3)产生载波信号
设载波振幅为1V,载波频率为120Khz
c_t = Ac*cos(2*pi*fc*t) ;
4) 调制
定义数字信息“1”对应相位差为0,数字信息“0”对应相位差为π,对生成的相对码进行绝对调相
Sm_t = ones(1,Num_Unit*Nsym);
for m = 1:Nsym
if Diff_s_t((m-1)*Num_Unit+1:m*Num_Unit) == 1
Sm_t((m-1)*Num_Unit+1:m*Num_Unit)=Ac*cos(2*pi*fc*t((m-1)*Num_Unit+1:m*Num_Unit)+pi/2);%1对应的相移为0,对应
else
Sm_t((m-1)*Num_Unit+1:m*Num_Unit)=Ac*cos(2*pi*fc*t((m-1)*Num_Unit+1:m*Num_Unit)-pi/2);%0对应的相移为pi
end
end
2、传输系统设计
将调制信号通过高斯信道,画出对应时域波形和频域波形,设置信噪比SNR为8dB
%高斯信道传输
Sm_t_awgn = awgn(Sm_t, 8, 'measured'); %已调信号通过高斯信道,信噪比为8
figure(3)
subplot(313);
X_m3=fft(Sm_t_awgn,N)*2/N;
M_d3=abs(fftshift(X_m3));
f3=(-N/2:N/2-1)*fs/N;
plot(f3,M_d3);title('高斯信道传输后的调制信号频谱')
xlabel('Frequency');
ylabel('Amplitude');
3、解调系统设计
1)带通滤波器
采用巴特沃斯带通滤波器,设置通带为(96kHz,144kHz),阻带为(0,60kHz)和(180kHz,+∞)
,并进行归一化,通带纹波起伏为1dB,阻带纹波起伏为40dB
%通过带通滤波器
Wp = [96e3 144e3]/(fs/2);
Ws = [60e3 180e3]/(fs/2);%对Wp,Ws进行归一化
Rp = 1;
Rs = 40;
[n,Wn] = buttord(Wp,Ws,Rp,Rs); %设计buttord巴特沃斯带通滤波器,n为滤波器阶数,Wn为截止频率
[b,a] = butter(n,Wn);
y_t = filter(b,a,Sm_t_awgn);
2)乘法器
将通过带通滤波器的信号乘以一个与高频载波同频同相的信号
3)低通滤波器
采用巴特沃斯低通滤波器,设置通带范围为(0,24kHz),阻带为(50kHz,+∞)
,并进行归一化,通带纹波起伏为1dB,阻带纹波起伏为40dB
Wp2 = 24e3/(fs/2);
Ws2 = 50e3/(fs/2);
Rp2 = 1;
Rs2 = 40;
[n2,Wn2] = buttord(Wp2,Ws2,Rp2,Rs2); %设计buttord巴特沃斯带通滤波器,n为滤波器阶数,Wn为截止频率
[b2,a2] = butter(n2,Wn2);
d_t = filter(b2,a2,x_t);
4)抽样判决器
最佳抽样时刻为:中间时刻+系统延时,同时差分码有一个周期的延迟,我们在最佳抽样时刻进行抽样,如果抽样值大于0,则判为1;反之,判为0;
%抽样判决
e_t = zeros(1,N+2*Num_Unit);
group_delay = 30;
for k=1:Nsym-1
if d_t((k*Num_Unit+group_delay+Num_Unit/2))>0
e_t((k-1)*Num_Unit+1:k*Num_Unit)=1;
else
e_t((k-1)*Num_Unit+1:k*Num_Unit)=0;
end
end
5)码反变换器
根据码反变换的原理将抽样判决得到的相对码恢复为绝对码
f_t = ones(1,Nsym*Num_Unit);
for v = 1:Nsym
if v == 1
f_t(0+1:v*Num_Unit)=mod(0+e_t(0+1:v*Num_Unit),2);
else
f_t((v-1)*Num_Unit+1:v*Num_Unit)=mod(e_t((v-2)*Num_Unit+1:(v-1)*Num_Unit)+e_t((v-1)*Num_Unit+1:v*Num_Unit),2);
end
end
三、源程序
clear
clc
%%
%参数设置
Rb = 24e3; %码元速率
Ts = 1/Rb; %码元持续时间
Nsym = 20000; %码元数量
fs = 3072e3; %采样频率
dt = 1/fs; %采样间隔
Num_Unit = Ts/dt; %单位采样点数
Total_T = Nsym*Ts; %总时间
t = 0:dt:Total_T-dt; %时间
fc = 120e3; %载波频率为120khz
Ac = 1; %载波振幅
%%
%产生基带信号波形
bits = randi(2,1,Nsym)-1; %生成长度为Nsym的伪随机序列
s_t = ones(1,Num_Unit*Nsym);
High_Level = ones(1,Num_Unit);
Low_Level = zeros(1,Num_Unit);
for n = 1:Nsym
if bits(n)==0
s_t((n-1)*Num_Unit+1:n*Num_Unit)=Low_Level;
else
s_t((n-1)*Num_Unit+1:n*Num_Unit)=High_Level;
end
end
figure(1)
subplot(211)
plot(s_t);title("绝对码");
axis([0,1500,0,1.2]);
%%
%差分编码
Diff_s_t = ones(1,Num_Unit*Nsym);
for i = 1:Nsym
if i == 1
Diff_s_t((i-1)*Num_Unit+1:i*Num_Unit)=mod(0+s_t((i-1)*Num_Unit+1:i*Num_Unit),2);
else
Diff_s_t((i-1)*Num_Unit+1:i*Num_Unit)=mod(Diff_s_t((i-2)*Num_Unit+1:(i-1)*Num_Unit)+s_t((i-1)*Num_Unit+1:i*Num_Unit),2);
end
end
figure(1)
subplot(212)
plot(Diff_s_t);title("相对码");
axis([0,1500,0,1.2]);
%%
%2DPSK调制
c_t = Ac*cos(2*pi*fc*t) ;
Sm_t = ones(1,Num_Unit*Nsym);
for m = 1:Nsym
if Diff_s_t((m-1)*Num_Unit+1:m*Num_Unit) == 1
Sm_t((m-1)*Num_Unit+1:m*Num_Unit)=Ac*cos(2*pi*fc*t((m-1)*Num_Unit+1:m*Num_Unit)+pi/2);%1对应的相移为0,对应
else
Sm_t((m-1)*Num_Unit+1:m*Num_Unit)=Ac*cos(2*pi*fc*t((m-1)*Num_Unit+1:m*Num_Unit)-pi/2);%0对应的相移为pi
end
end
figure(2)
subplot(311)
plot(c_t);title("载波信号");
axis([0,1500,-1.2,1.2]);
subplot(312)
plot(Sm_t);title("2DPSK调制信号");
axis([0,1500,-1.2,1.2]);
N = Nsym*Num_Unit;
figure(3)
subplot(311)
X_m1=fft(s_t,N)*2/N;
M_d1=abs(fftshift(X_m1));
f1=(-N/2:N/2-1)*fs/N;
plot(f1,M_d1);title('基带信号频谱')
xlabel('Frequency');
ylabel('Amplitude');
subplot(312)
X_m2=fft(Sm_t,N)*2/N;
M_d2=abs(fftshift(X_m2));
f2=(-N/2:N/2-1)*fs/N;
plot(f2,M_d2);title('2DPSK调制信号频谱')
xlabel('Frequency');
ylabel('Amplitude');
axis([-8e5,8e5,0,0.02]);
%%
%高斯信道传输
Sm_t_awgn = awgn(Sm_t, 8, 'measured'); %已调信号通过高斯信道,信噪比为8
figure(3)
subplot(313);
X_m3=fft(Sm_t_awgn,N)*2/N;
M_d3=abs(fftshift(X_m3));
f3=(-N/2:N/2-1)*fs/N;
plot(f3,M_d3);title('高斯信道传输后的调制信号频谱')
xlabel('Frequency');
ylabel('Amplitude');
axis([-8e5,8e5,0,0.02]);
figure (2)
subplot(313);
plot(Sm_t_awgn),title('通过高斯信道的信号');
axis([0,1500,-2,2]);
%%
%2DPSK解调
%通过带通滤波器
Wp = [96e3 144e3]/(fs/2);
Ws = [60e3 180e3]/(fs/2);%对Wp,Ws进行归一化
Rp = 1;
Rs = 40;
[n,Wn] = buttord(Wp,Ws,Rp,Rs); %设计buttord巴特沃斯带通滤波器,n为滤波器阶数,Wn为截止频率
[b,a] = butter(n,Wn);
y_t = filter(b,a,Sm_t_awgn);
figure(4)
subplot(211)
plot(y_t);title('通过带通滤波器之后的信号');
axis([0,1500,-2,2]);
subplot(212)
X_m4=fft(y_t,N)*2/N;
M_d4=abs(fftshift(X_m4));
f4=(-N/2:N/2-1)*fs/N;
plot(f4,M_d4);title('通过带通滤波器后的信号频谱')
xlabel('Frequency');
ylabel('Amplitude');
axis([-8e5,8e5,0,0.02]);
%相乘器
x_t = zeros(1,N);
for j = 1:Nsym
x_t((j-1)*Num_Unit+1:j*Num_Unit)=2*Ac*y_t((j-1)*Num_Unit+1:j*Num_Unit).*cos(2*pi*fc*t((j-1)*Num_Unit+1:j*Num_Unit)+pi/2);
end
%低通滤波器
Wp2 = 24e3/(fs/2);
Ws2 = 50e3/(fs/2);
Rp2 = 1;
Rs2 = 40;
[n2,Wn2] = buttord(Wp2,Ws2,Rp2,Rs2); %设计buttord巴特沃斯带通滤波器,n为滤波器阶数,Wn为截止频率
[b2,a2] = butter(n2,Wn2);
d_t = filter(b2,a2,x_t);
figure(5)
subplot(311)
plot(x_t);title('通过相乘器之后的信号');
axis([0,1500,-2,2]);
subplot(312)
plot(d_t);title('通过低通滤波器之后的信号');
axis([0,1500,-2,2]);
subplot(313)
X_m5=fft(d_t,N)*2/N;
M_d5=abs(fftshift(X_m5));
f5=(-N/2:N/2-1)*fs/N;
plot(f5,M_d5);title('通过低通滤波器后的信号频谱')
xlabel('Frequency');
ylabel('Amplitude');
axis([-8e5,8e5,0,0.02]);
%抽样判决
e_t = zeros(1,N+2*Num_Unit);
group_delay = 30;
for k=1:Nsym-1
if d_t((k*Num_Unit+group_delay+Num_Unit/2))>0
e_t((k-1)*Num_Unit+1:k*Num_Unit)=1;
else
e_t((k-1)*Num_Unit+1:k*Num_Unit)=0;
end
end
%码反变换
f_t = ones(1,Nsym*Num_Unit);
for v = 1:Nsym
if v == 1
f_t(0+1:v*Num_Unit)=mod(0+e_t(0+1:v*Num_Unit),2);
else
f_t((v-1)*Num_Unit+1:v*Num_Unit)=mod(e_t((v-2)*Num_Unit+1:(v-1)*Num_Unit)+e_t((v-1)*Num_Unit+1:v*Num_Unit),2);
end
end
figure(6)
subplot(211)
plot(e_t);title('抽样判决之后的信号');
axis([0,1500,0,1.2]);
subplot(212)
plot(f_t);title('2dpsk解调信号');
axis([0,1500,0,1.2]);
%%
%误码率计算
sum = 0;
for w = 1:Nsym
if f_t((w-1)*Num_Unit+120) == s_t((w-1)*Num_Unit+Num_Unit/2)
sum = sum;
else
sum = sum+1;
end
end
Pe = sum/Nsym;
fprintf('误码率是%f',Pe);
%眼图
t = d_t(1:200000);
% 眼图
%取四个Bit
figure(7)
eyediagram(t, 2*Num_Unit);
title('眼图');