通信原理实验(五)数字调制 —— PSK、DPSK

实验总览

主要完成2PSK和2DPSK的调制和解调,对调制方法,已调信号特性,解调方法进行分析。

2PSK

2PSK产生

2PSK信号发生程序

function [signal, csignal, baseband, t] = tPSK(N, TB, fc, fs)
     %% 一个码元多少个采样点
     L = TB * fs;
     %% 2PSK信号采样点
     t = 0 : 1 / fs : N * TB - 1 / fs;
     %% 载波定义
     tc = 0 : 1 / fs : TB - 1 / fs;
     %% 二进制符号
     symbols = round(rand(1, N));
     signal = zeros(1, N * L);
     baseband = zeros(1, N * L);
     for i = 1 : N
         if symbols(i) == 1
             signal((i - 1) * L + 1 : i * L) = cos(2 * pi * fc * tc + pi);
         else
             signal((i - 1) * L + 1 : i * L) = cos(2 * pi * fc * tc);
         end
     end

     for i = 1 : N
        if symbols(i) == 1
            baseband((i - 1) * L + 1 : i * L) = 1;
        else
            baseband((i - 1) * L + 1 : i * L) = 0;
        end
     end
     csignal = cos(2 * pi * fc * t);
end

实验主程序

clc;clear;
%% 2PSK参数定义
N = 20;
fB = 1;
TB = 1 / fB;
fc = 100;
fs = 600;
%% 产生2PSK信号
[signal, csignal, baseband, t] = tPSK(N, TB, fc, fs);
%% 2PSK相干解调
dmode_co = coherent(signal, -csignal, 1.5 * fB, fc / 1.5, fs, TB);
%% 抽样判决
saps = sj(dmode_co, TB, fs);
dbaseband = SNRZ(saps, TB, fs);
%% 频谱分析
L = length(t);
n = - 1 / 2 + 1 / L : 1 / L : 1 / 2;
f = n * fs;
HFB = fftshift(fft(baseband));
HFC = fftshift(fft(signal));
HFDC = fftshift(fft(dmode_co));
% HFDR = fftshift(fft(dmode_rc));
%% 基带信号和2ASK信号对比
%% 基带信号和2ASK信号时域波形
% figure(1)
% subplot(2, 1, 1); plot(t, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(2, 1, 2); plot(t, signal, 'LineWidth', 1.2); title('2ASK信号');
%% %% 基带信号和2ASK信号频谱
% figure(2)
% subplot(2, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
% subplot(2, 1, 2); plot(f, abs(HFC), 'LineWidth', 1.2); title('2ASK信号');
%% 2PSK相干解调后信号与基带信号和2[SK信号对比
figure(3)
subplot(4, 1, 1); plot(t, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(3, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
subplot(4, 1, 2); plot(t, signal, 'LineWidth', 1.2); title('2PSK信号');
% subplot(3, 1, 2); plot(f, abs(HFC), 'LineWidth', 1.2); title('2PSK信号'); 
subplot(4, 1, 3); plot(t, dmode_co, 'LineWidth', 1.2); title('相干解调后的信号');
% subplot(3, 1, 3); plot(f, abs(HFDC), 'LineWidth', 1.2); title('相干解调后的信号'); 
subplot(4, 1, 4); plot(t, dbaseband, 'LineWidth', 1.2); title('抽样判决后');
%% 眼图
% figure(4);
% neye = 1;
% L = TB * fs;
% for k = 1 : N - neye + 1
%     ss = dmode_rc((k - 1) * L  + 1 : ((k - 1) + neye) * L);
%     plot(ss,'LineWidth', 1.2);
%     hold on;
% end
% hold on;
% title('接收信号眼图 eyenum = 1');















实验结果

2PSK信号时域波形

频谱

2PSK将基带信号的频谱搬移到载频处,占用带宽为2fB。 

2PSK解调

解调方法

2PSK解调只能使用相干解调,利用积化和差关系,最后得到的信号根据不同的相位有不同的电平值,可根据这个对发送的码元进行判决。 

相干解调程序

function signal = coherent(y, c, fpass, fstop, fs, TB)
    L = length(y);
    N = L / fs / TB;
    n = TB * fs;
    signal = zeros(1, L);
    for k = 1 : N
        signal(1 + (k - 1) * n : k * n) = y(1 + (k - 1) * n : k * n) .* c(1 : n);
        % 滑动窗口,这样每一个码元都和对应的载波相乘
    end
    lowpass = LPF(fpass, fstop, fs);
    signal = filter(lowpass, signal);
end
    

实验主程序

clc;clear;
%% 2PSK参数定义
N = 20;
fB = 1;
TB = 1 / fB;
fc = 100;
fs = 600;
%% 产生2PSK信号
[signal, csignal, baseband, t] = tPSK(N, TB, fc, fs);
%% 2PSK相干解调
dmode_co = coherent(signal, -csignal, 1.5 * fB, fc / 1.5, fs, TB);
%% 抽样判决
saps = sj(dmode_co, TB, fs);
dbaseband = SNRZ(saps, TB, fs);
%% 频谱分析
L = length(t);
n = - 1 / 2 + 1 / L : 1 / L : 1 / 2;
f = n * fs;
HFB = fftshift(fft(baseband));
HFC = fftshift(fft(signal));
HFDC = fftshift(fft(dmode_co));
% HFDR = fftshift(fft(dmode_rc));
%% 基带信号和2ASK信号对比
%% 基带信号和2ASK信号时域波形
% figure(1)
% subplot(2, 1, 1); plot(t, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(2, 1, 2); plot(t, signal, 'LineWidth', 1.2); title('2ASK信号');
%% %% 基带信号和2ASK信号频谱
% figure(2)
% subplot(2, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
% subplot(2, 1, 2); plot(f, abs(HFC), 'LineWidth', 1.2); title('2ASK信号');
%% 2PSK相干解调后信号与基带信号和2[SK信号对比
figure(3)
subplot(4, 1, 1); plot(t, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(3, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
subplot(4, 1, 2); plot(t, signal, 'LineWidth', 1.2); title('2PSK信号');
% subplot(3, 1, 2); plot(f, abs(HFC), 'LineWidth', 1.2); title('2PSK信号'); 
subplot(4, 1, 3); plot(t, dmode_co, 'LineWidth', 1.2); title('相干解调后的信号');
% subplot(3, 1, 3); plot(f, abs(HFDC), 'LineWidth', 1.2); title('相干解调后的信号'); 
subplot(4, 1, 4); plot(t, dbaseband, 'LineWidth', 1.2); title('抽样判决后');
%% 眼图
% figure(4);
% neye = 1;
% L = TB * fs;
% for k = 1 : N - neye + 1
%     ss = dmode_rc((k - 1) * L  + 1 : ((k - 1) + neye) * L);
%     plot(ss,'LineWidth', 1.2);
%     hold on;
% end
% hold on;
% title('接收信号眼图 eyenum = 1');















实验结果

解调信号时域波形

1码对应pi相位,0码对应0相位,所以1码对应解调的是一个负值,0码对应正值。

2DPSK

2DPSK的目的和原理

2PSK的相位模糊问题

对于2PSK的相干解调,相干载波的恢复尤其重要,但如果频率确实可以与发送端的载波频率相近,但如果有较大相位差,例如相位差pi的情况,那么解调出来的信号会与理想情况去反,判决后的码元是正确情况的反码,造成较大的信息失真。

2DPSK解决相位模糊

分析2PSK产生这个问题的原因是2PSK是使用已调信号相位本身来表示信息,而2DPSK是利用前后两个已调信号的相位差来表示信息,这样如果载波有pi相位模糊,解调的结果都取反,但是前后码元的关系没变,那么表示的信息就没变。

2DPSK的产生方式

可以对要发送的码符号进行差分编码,然后用2PSK传输差分码,接收端得到差分码后再进行码型变换,得到发送端发送端信息码元。

2DPSK产生

差分编码程序

function symbols = encoding(syb, mode)
    lengths = length(syb);
    symbols = [mode, zeros(1, lengths)];
    for k = 1 : lengths
        symbols(k + 1) = mod(syb(k) + symbols(k), 2);
    end
end

信号产生程序

function [signal, csignal, baseband, nbaseband, t1, t2] = tDPSK(N, TB, fc, fs)
     %% 一个码元多少个采样点
     L = TB * fs;
     %% 2PSK信号采样点
     t1 = 0 : 1 / fs : N * TB - 1 / fs;
     t2 = 0 : 1 / fs : (N + 1) * TB - 1 / fs;
     %% 载波定义
     tc = 0 : 1 / fs : TB - 1 / fs;
     %% 二进制符号
     symbols = round(rand(1, N));
     nsymbols = encoding(symbols, 1);
     signal = zeros(1, N * L);
     baseband = zeros(1, N * L);
     nbaseband = zeros(1, N * L + 1);
     for i = 1 : N + 1
         if nsymbols(i) == 1
             signal((i - 1) * L + 1 : i * L) = cos(2 * pi * fc * tc + pi);
         else
             signal((i - 1) * L + 1 : i * L) = cos(2 * pi * fc * tc);
         end
     end

     for i = 1 : N
        if symbols(i) == 1
            baseband((i - 1) * L + 1 : i * L) = 1;
        else
            baseband((i - 1) * L + 1 : i * L) = 0;
        end
     end

     for i = 1 : N + 1
        if nsymbols(i) == 1
            nbaseband((i - 1) * L + 1 : i * L) = 1;
        else
            nbaseband((i - 1) * L + 1 : i * L) = 0;
        end
     end     
     csignal = cos(2 * pi * fc * t1);
end

实验主程序

clc;clear;
%% 2DPSK参数定义
N = 20;
fB = 1;
TB = 1 / fB;
fc = 10;
fs = 600;
%% 产生2DPSK信号
[signal, csignal, baseband, nbaseband, t1 , t2] = tDPSK(N, TB, fc, fs);
%% 2DPSK相干解调
dmode_co = coherent(signal, csignal, 1.5 * fB, fc / 1.5, fs, TB);
%% 2DPSK非相干解调
dmode_dco = dDPSK(signal, 1.5 * fB, fc / 1.5, fs, TB);
%% 相干解调抽样判决
saps = sj(dmode_co, TB, fs);
decodes = decoding(saps);
dbaseband = SNRZ(decodes, TB, fs);
%% 非相干解调抽样判决
sapsd = sj(dmode_dco, TB, fs);
dbasebandd = SNRZ(sapsd, TB, fs);
%% 频谱分析
L = length(t1);
n = - 1 / 2 + 1 / L : 1 / L : 1 / 2;
f = n * fs;
HFB = fftshift(fft(baseband));
HFC = fftshift(fft(signal));
HFDC = fftshift(fft(dmode_co));
% HFDR = fftshift(fft(dmode_rc));
%% 基带信号和2DPSK信号对比
%% 基带信号和2DPSK信号时域波形
% figure(1)
% subplot(2, 1, 1); plot(t, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(2, 1, 2); plot(t, signal, 'LineWidth', 1.2); title('2ASK信号');
%% %% 基带信号和2ASK信号频谱
% figure(2)
% subplot(2, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
% subplot(2, 1, 2); plot(f, abs(HFC), 'LineWidth', 1.2); title('2ASK信号');
%% 2ASK相干解调后信号与基带信号和2ASK信号对比
figure(3)
subplot(7, 1, 1); plot(t1, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(4, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
subplot(7, 1, 2); plot(t2, nbaseband, 'LineWidth', 1.2); title('差分编码基带信号');
% subplot(4, 1, 2); plot(f, abs(HFB), 'LineWidth', 1.2); title('差分编码基带信号');
subplot(7, 1, 3); plot(t2, signal, 'LineWidth', 1.2); title('2DPSK信号');
% subplot(4, 1, 3); plot(f, abs(HFC), 'LineWidth', 1.2); title('2DPSK信号'); 
subplot(7, 1, 4); plot(t2, dmode_co, 'LineWidth', 1.2); title('相干解调后的信号');
% subplot(4, 1, 4); plot(f, abs(HFDC), 'LineWidth', 1.2); title('相干解调后的信号'); 
subplot(7, 1, 5); plot(t1, dbaseband, 'LineWidth', 1.2); title('相干解调解码后的信号');
subplot(7, 1, 6); plot(t1, dmode_dco, 'LineWidth', 1.2); title('非相干解调后的信号');
subplot(7, 1, 7); plot(t1, dbasebandd, 'LineWidth', 1.2); title('非相干解调解码后的信号');
%% 眼图
% figure(4);
% neye = 1;
% L = TB * fs;
% for k = 1 : N - neye + 1
%     ss = dmode_rc((k - 1) * L  + 1 : ((k - 1) + neye) * L);
%     plot(ss,'LineWidth', 1.2);
%     hold on;
% end
% hold on;
% title('接收信号眼图 eyenum = 1');
%% test
% b = [1 1 0 0 0 1]
% a = encoding(b, 1)
% c = decoding(a)














实验结果

 

2DPSK解调

解调方法

除了上述提到的码型变换解调,还可以使用差分相干解调,具体操作是:将接收到的信号延时一个TB然后与接收信号相乘,再通过低通滤波器,就可以直接进行抽样判决,得到的码不需要进行码型变换。

码型变换程序(解码程序)

function symbols = encoding(syb, mode)
    lengths = length(syb);
    symbols = [mode, zeros(1, lengths)];
    for k = 1 : lengths
        symbols(k + 1) = mod(syb(k) + symbols(k), 2);
    end
end

差分相干解调程序

function signal = dDPSK(y, fpass, fstop, fs, TB)
    L = length(y);
    N = L / fs / TB;
    n = TB * fs;
    signal = zeros(1, (N - 1) * fs);
    for k = 1 : N - 1
        signal(1 + (k - 1) * n : k * n) = y(1 + (k - 1) * n : k * n) .* y(1 + k * n : (k + 1) * n);
    end
    lowpass = LPF(fpass, fstop, fs);
    signal = filter(lowpass, signal);
end
    

实验主程序

clc;clear;
%% 2DPSK参数定义
N = 20;
fB = 1;
TB = 1 / fB;
fc = 10;
fs = 600;
%% 产生2DPSK信号
[signal, csignal, baseband, nbaseband, t1 , t2] = tDPSK(N, TB, fc, fs);
%% 2DPSK相干解调
dmode_co = coherent(signal, csignal, 1.5 * fB, fc / 1.5, fs, TB);
%% 2DPSK非相干解调
dmode_dco = dDPSK(signal, 1.5 * fB, fc / 1.5, fs, TB);
%% 相干解调抽样判决
saps = sj(dmode_co, TB, fs);
decodes = decoding(saps);
dbaseband = SNRZ(decodes, TB, fs);
%% 非相干解调抽样判决
sapsd = sj(dmode_dco, TB, fs);
dbasebandd = SNRZ(sapsd, TB, fs);
%% 频谱分析
L = length(t1);
n = - 1 / 2 + 1 / L : 1 / L : 1 / 2;
f = n * fs;
HFB = fftshift(fft(baseband));
HFC = fftshift(fft(signal));
HFDC = fftshift(fft(dmode_co));
% HFDR = fftshift(fft(dmode_rc));
%% 基带信号和2DPSK信号对比
%% 基带信号和2DPSK信号时域波形
% figure(1)
% subplot(2, 1, 1); plot(t, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(2, 1, 2); plot(t, signal, 'LineWidth', 1.2); title('2ASK信号');
%% %% 基带信号和2ASK信号频谱
% figure(2)
% subplot(2, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
% subplot(2, 1, 2); plot(f, abs(HFC), 'LineWidth', 1.2); title('2ASK信号');
%% 2ASK相干解调后信号与基带信号和2ASK信号对比
figure(3)
subplot(7, 1, 1); plot(t1, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(4, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
subplot(7, 1, 2); plot(t2, nbaseband, 'LineWidth', 1.2); title('差分编码基带信号');
% subplot(4, 1, 2); plot(f, abs(HFB), 'LineWidth', 1.2); title('差分编码基带信号');
subplot(7, 1, 3); plot(t2, signal, 'LineWidth', 1.2); title('2DPSK信号');
% subplot(4, 1, 3); plot(f, abs(HFC), 'LineWidth', 1.2); title('2DPSK信号'); 
subplot(7, 1, 4); plot(t2, dmode_co, 'LineWidth', 1.2); title('相干解调后的信号');
% subplot(4, 1, 4); plot(f, abs(HFDC), 'LineWidth', 1.2); title('相干解调后的信号'); 
subplot(7, 1, 5); plot(t1, dbaseband, 'LineWidth', 1.2); title('相干解调解码后的信号');
subplot(7, 1, 6); plot(t1, dmode_dco, 'LineWidth', 1.2); title('非相干解调后的信号');
subplot(7, 1, 7); plot(t1, dbasebandd, 'LineWidth', 1.2); title('非相干解调解码后的信号');
%% 眼图
% figure(4);
% neye = 1;
% L = TB * fs;
% for k = 1 : N - neye + 1
%     ss = dmode_rc((k - 1) * L  + 1 : ((k - 1) + neye) * L);
%     plot(ss,'LineWidth', 1.2);
%     hold on;
% end
% hold on;
% title('接收信号眼图 eyenum = 1');
%% test
% b = [1 1 0 0 0 1]
% a = encoding(b, 1)
% c = decoding(a)














实验结果

相干解调 

 

非相干解调

 

对比2PSK进行相位模糊分析

2PSK引入与发送端载波pi相位差的恢复载波

 

可看到抽样判决结果与发送码元相反。

2DPSK引入与发送端载波pi相位差的恢复载波

 

可看见虽然有pi相位差,但是判决结果和发送码元一致,所以2DPSK解决了恢复载波相位模糊的问题,并且2DPSK可以用差分相干解调,也就是不需要取估计发送端的载波,而是直接将接收到的信号延时一个TB作为解调用的相干波。 

 

 

  • 23
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值