锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Matlab 2DPSK数字频带传输系统-西安电子科技大学-电子信息类-b测

时间:2022-10-18 03:30:00 kc120e3e精密电阻

数字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('眼图');
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章