Matlab 2DPSK数字频带传输系统-西安电子科技大学-电子信息类-b测
时间:2022-10-18 03:30:00
数字2DPSK设计频带传输系统
-
- 一、实验原理
-
- 1、2DPSK调制原理
- 2、2DPSK解调原理
- 二、实验过程
-
- 1.调制系统设计
-
- 1)产生基带信号
- 2)产生相对码
- 3)产生载波信号
- 4) 调制
- 2.传输系统设计
- 3.解调系统设计
-
- 1)带通滤波器
- 2)乘法器
- 3)低通滤波器
- 4)抽样判断器
- 5)码反变换器
- 三、源程序
一、实验原理
1、2DPSK调制原理
在2PSK
信号中,信号相位的变化是以未调正弦载波的相位作为参考,用载波相位的绝对数值来表示数字信息的,所以称为绝对移相。由于相干载波恢复中载波相位的180°相位模糊
,解调出的二进制基带信号出现反向现象,难以实际应用,因此提出二进制差分相位键控
。
2DPSK数字信息是利用前后码元的载波相对相位变化传递的,因此也称为相对相位移键控。假设前后相邻码元的载波相位差为Δφ ,可定义数字信息和 关系是
数字信息与 关系也可以定义为
2DPSK实现过程可采用以下方法:首先对二进制数字基带信号进行差分编码,将绝对码表示为二进制信息,用相对码表示二进制信息,然后进行绝对调相,产生二进制差分相位键控信号DPSK信号调制器原理图如下:
2、2DPSK解调原理
2DPSK可采用信号相关解调方法(极性比较法)
。解调原理是:对2DPSK相关解调信号,恢复相对码,通过代码反变换器将其转换为绝对代码,从而恢复发送的二进制数字信息。在解调过程中,若相关载波产生180°相位模糊,解调出的相对码会产生倒置现象,但器后,输出的代码绝对不会倒置,从而解决载波相位模糊的问题。
2DPSK也可以使用信号相位比较法(相位比较法)
。解调原理是直接比较前后码元的相位差,从而恢复发送的二进制数字信息。解调器不需要代码反转器,因为解调器同时完成了代码反转功能。由于差异相关解调方法不需要特殊的相关载波,是一种非相关解调方法。
二、实验过程
1.调制系统设计
1)产生基带信号
我们组使用这个实验matlab中的randi函数随机产生2万个随机数,对应0/12进制信源。这个过程产生的代码是绝对代码
%产生基带信号波形 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对应相位差为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为滤波器阶数,W为截止频率
[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('眼图');