通信原理实验(四)数字调制 —— ASK、FSK

实验总览

完成数字调制中的ASK、FSK,本实验以二进制调制为例。

2ASK

2ASK信号产生

信号发生程序

function [signal, csignal, baseband, t] = tASK(N, TB, fc, fs)
     %% 一个码元多少个采样点
     L = TB * fs;
     %% 2ASK信号采样点
     t = 0 : 1 / fs : N * TB - 1 / fs;
     %% 载波定义
     tc = 0 : 1 / fs : TB - 1 / fs;
     csignal = cos(2 * pi * fc * tc);
     %% 二进制符号
     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) = csignal;
         else
             signal((i - 1) * L + 1 : i * L) = 0;
         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;
%% 2ASK参数定义
N = 30;
fB = 3;
TB = 1 / fB;
fc = 100;
fs = 300;
%% 产生2ASK信号
[signal, csignal, baseband, t] = tASK(N, TB, fc, fs);
%% 2ASK相干解调
dmode_co = coherent(signal, csignal, 1.5 * fB, fc / 1.5, fs, TB);
%% 2ASK非相干解调
dmode_rc = rect(signal, 1.5 * fB, fc / 1.5, fs);
%% 抽样判决
baseco = sj_base(dmode_co, TB, fs);
baserc = sj_base(dmode_rc, 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信号');
%% 2ASK相干解调后信号与基带信号和2ASK信号对比
figure(3)
subplot(6, 1, 1); plot(t, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(4, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
subplot(6, 1, 2); plot(t, signal, 'LineWidth', 1.2); title('2ASK信号');
% subplot(4, 1, 2); plot(f, abs(HFC), 'LineWidth', 1.2); title('2ASK信号'); 
% subplot(6, 1, 3); plot(t, dmode_co, 'LineWidth', 1.2); title('相干解调后的信号');
% subplot(4, 1, 3); plot(f, abs(HFDC), 'LineWidth', 1.2); title('相干解调后的信号'); 
% subplot(6, 1, 4); plot(t, baseco, 'LineWidth', 1.2); title('相干解调抽样判决后信号');
% subplot(6, 1, 5); plot(t, dmode_rc, 'LineWidth', 1.2); title('非相干解调后的信号');
% subplot(4, 1, 4); plot(f, abs(HFDR), 'LineWidth', 1.2); title('非相干解调后的信号'); 
% subplot(6, 1, 6); plot(t, baserc, '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');















实验结果

时域波形

频谱

 

由频谱可知,2ASK将基带波形的频谱搬移到载频处,占用带宽为2fB。

2ASK解调

解调方法

解调方法有相干解调和非相干解调,相干解调利用和调制相同的频谱搬移原理,再通过一个低通滤波器恢复原来的基带信号,非相干解调采用全波整流器,再通过一个成型低通滤波器。

相干解调程序

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
    

非相干解调程序

function signal = rect(y, fpass, fstop, fs)
    y = abs(y);
    lowpass = LPF(fpass, fstop, fs);
    signal = filter(lowpass, y);
end

实验主程序

clc;clear;
%% 2ASK参数定义
N = 30;
fB = 3;
TB = 1 / fB;
fc = 100;
fs = 300;
%% 产生2ASK信号
[signal, csignal, baseband, t] = tASK(N, TB, fc, fs);
%% 2ASK相干解调
dmode_co = coherent(signal, csignal, 1.5 * fB, fc / 1.5, fs, TB);
%% 2ASK非相干解调
dmode_rc = rect(signal, 1.5 * fB, fc / 1.5, fs);
%% 抽样判决
baseco = sj_base(dmode_co, TB, fs);
baserc = sj_base(dmode_rc, 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信号');
%% 2ASK相干解调后信号与基带信号和2ASK信号对比
figure(3)
subplot(6, 1, 1); plot(t, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(4, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
subplot(6, 1, 2); plot(t, signal, 'LineWidth', 1.2); title('2ASK信号');
% subplot(4, 1, 2); plot(f, abs(HFC), 'LineWidth', 1.2); title('2ASK信号'); 
subplot(6, 1, 3); plot(t, dmode_co, 'LineWidth', 1.2); title('相干解调后的信号');
% subplot(4, 1, 3); plot(f, abs(HFDC), 'LineWidth', 1.2); title('相干解调后的信号'); 
subplot(6, 1, 4); plot(t, baseco, 'LineWidth', 1.2); title('相干解调抽样判决后信号');
subplot(6, 1, 5); plot(t, dmode_rc, 'LineWidth', 1.2); title('非相干解调后的信号');
% subplot(4, 1, 4); plot(f, abs(HFDR), 'LineWidth', 1.2); title('非相干解调后的信号'); 
subplot(6, 1, 6); plot(t, baserc, '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');















实验结果

相干解调时域波形

非相干解调时域波形

 

主要关注解调信号的时域波形,由于恢复信号需要通过低通滤波器,而原基带信号是一个存在跳变间断点且频带无限的信号,所以接收端是用有限的频率分量去逼近一个频带无限信号,就会出现吉布斯效应,具体就是会在原信号的跳变点处出现震荡。

抽样判决后的结果

 2FSK

 2FSK信号产生

信号发生程序

function [signal, csignal1, csignal2, baseband, t] = tFSK(N, TB, fc1, fc2, fs)
     %% 一个码元多少个采样点
     L = TB * fs;
     %% 2ASK信号采样点
     t = 0 : 1 / fs : N * TB - 1 / fs;
     %% 载波定义
     tc = 0 : 1 / fs : TB - 1 / fs;
     csignal1 = cos(2 * pi * fc1 * tc);
     csignal2 = cos(2 * pi * fc2 * tc);
     %% 二进制符号
     symbols = round(rand(1, N));
     signal = zeros(1, N * L);
     baseband = zeros(1, N * L);
     for i = 1 : N
         if symbols(i) == 0
             signal((i - 1) * L + 1 : i * L) = csignal1;
         else
             signal((i - 1) * L + 1 : i * L) = csignal2;
         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
     csignal1 = cos(2 * pi * fc1 * t);
     csignal2 = cos(2 * pi * fc2 * t);
end

实验主程序 

clc;clear;
%% 2FSK参数定义
N = 30;
fB = 1;
TB = 1 / fB;
fc1 = 100;
fc2 = 150;
fs = 600;
%% 低通滤波器参数
fpass = 2 * fB;
fstop = 0.5 * abs(fc2 - fc1);
%% 带通滤波器参数
fpass1 = fc1 - 1 * fB; fstop1 = fc1 - 3 * fB;
fpass2 = fc1 + 1 * fB; fstop2 = fc1 + 3 * fB;
fpass3 = fc2 - 1 * fB; fstop3 = fc2 - 3 * fB;
fpass4 = fc2 + 1 * fB; fstop4 = fc2 + 3 * fB;

%% 产生2FSK信号
[signal, csignal1, csignal2, baseband, t] = tFSK(N, TB, fc1, fc2, fs);
%% 2FSK相干解调
[dmode_co1, dmode_co2]  = cohfsk(signal, csignal1, csignal2, fpass, fstop, fs, TB);
% 2FSK非相干解调
[dmode_rc1, dmode_rc2] = rectfsk(signal, fpass, fstop, fpass1, fstop1, fpass2, fstop2, fpass3, fstop3, fpass4, fstop4, fs);
%% 抽样判决
baseco = sj_fsk(dmode_co1, dmode_co2, TB, fs);
baserc = sj_fsk(dmode_rc1, dmode_rc2, TB, fs);
%% 频谱分析
L = length(t);
n = - 1 / 2 + 1 / L : 1 / L : 1 / 2;
f = n * fs;
HFB = fftshift(fft(baseband));
HFM = fftshift(fft(signal));
HFDC1 = fftshift(fft(dmode_co1));
HFDC2 = fftshift(fft(dmode_co2));
HFDR1 = fftshift(fft(dmode_rc1));
HFDR2 = fftshift(fft(dmode_rc2));
%% 基带信号和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('2FSK信号');
%% %% 基带信号和2FSK信号频谱
% figure(2)
% subplot(2, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
% subplot(2, 1, 2); plot(f, abs(HFM), 'LineWidth', 1.2); title('2FSK信号');
%% 2FSK相干解调后信号与基带信号和2ASK信号对比
figure(3)
subplot(8, 1, 1); plot(t, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(6, 2, 2); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
subplot(8, 1, 2); plot(t, signal, 'LineWidth', 1.2); title('2FSK信号');
% subplot(6, 2, 4); plot(f, abs(HFM), 'LineWidth', 1.2); title('2FSK信号'); 

subplot(8, 1, 3); plot(t, dmode_co1, 'LineWidth', 1.2); title('相干解调后的信号 0码');
% subplot(6, 2, 6); plot(f, abs(HFDC1), 'LineWidth', 1.2); title('相干解调后的信号 0码'); 
subplot(8, 1, 4); plot(t, dmode_co2, 'LineWidth', 1.2); title('相干解调后的信号 1码');
% subplot(6, 1, 5); plot(f, abs(HFDC2), 'LineWidth', 1.2); title('相干解调后的信号 1码'); 
subplot(8, 1, 5); plot(t, baseco, 'LineWidth', 1.2); title('相干解调抽样判决后信号');

subplot(8, 1, 6); plot(t, dmode_rc1, 'LineWidth', 1.2); title('非相干解调后的信号 0码');
% subplot(6, 2, 10); plot(f, abs(HFDR1), 'LineWidth', 1.2); title('非相干解调后的信号 0码');
subplot(8, 1, 7); plot(t, dmode_rc2, 'LineWidth', 1.2); title('非相干解调后的信号 1码');
% subplot(6, 2, 12); plot(f, abs(HFDR2), 'LineWidth', 1.2); title('非相干解调后的信号 1码'); 
subplot(8, 1, 8); plot(t, baserc, 'LineWidth', 1.2); title('非相干解调抽样判决后信号');
%% 眼图
% figure(5);
% neye = 1;
% L = TB * fs;
% for k = 1 : N - neye + 1
%     ss1 = dmode_rc1((k - 1) * L  + 1 : ((k - 1) + neye) * L);
%     ss2 = dmode_rc2((k - 1) * L  + 1 : ((k - 1) + neye) * L);
%     plot(ss1,'LineWidth', 1.2);
%     hold on;
%     plot(ss2,'LineWidth', 1.2);
%     hold on;
% end
% hold on;
% title('接收信号眼图 eyenum = 1');












实验结果

时域波形

频谱

2FSK一共有两个载波频率,所以已调信号的频谱应该有两个中心频率,分别将基带信号搬移到这两个中心频率处,占用带宽为|fc2 - fc1| + 2fB。

2FSK解调

解调方法

2FSK的解调可以是相干解调和非相干解调。

相干解调:1.首先将信号通过两个中心频率分别为fc1、fc2的带通滤波器,分为两路,一路用来检测0码元,一路用来检测1码元,分析'1'路情况,2.通过带通滤波器后乘上频率为fc2的载波,将已调信号的频谱重新搬移到基带上,并且搬移的是'1' 码分量,3.然后再通过低通滤波器,如果发送端发送了'1'码,那么在这是就会有一个正电平,如果没发送,就不会有电平。

非相干解调:就是将相干解调中的第二部换为全波整流即可。

关于解调的误区:可能会认为在二进制的情况下只用观察一路的判决结果即可,因为会误认为如果没有检测到电平,就是没有发送该路对应的码元,那么肯定就发送了另一个码元,实际上,如果一路没有电平,可能是发送了另一个码元,也可能是什么码元都没发送,所以,一路的结果只能反映该路的码元情况,不含有其他码元的信息。

相干解调程序

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

非相干解调程序

function [signal1, signal2] = rectfsk(y, fpass, fstop, fpass1, fstop1, fpass2, fstop2, ...
     fpass3, fstop3, fpass4, fstop4, fs)

    BPF1 = BPF(fpass1, fstop1, fpass2, fstop2, fs);
    BPF2 = BPF(fpass3, fstop3, fpass4, fstop4, fs);
    signal1 = abs(filter(BPF1, y));
    signal2 = abs(filter(BPF2, y));
    
    lowpass = LPF(fpass, fstop, fs);
    signal1 = filter(lowpass, signal1);
    signal2 = filter(lowpass, signal2);
    
end
    

实验主程序

clc;clear;
%% 2FSK参数定义
N = 30;
fB = 1;
TB = 1 / fB;
fc1 = 100;
fc2 = 150;
fs = 600;
%% 低通滤波器参数
fpass = 2 * fB;
fstop = 0.5 * abs(fc2 - fc1);
%% 带通滤波器参数
fpass1 = fc1 - 1 * fB; fstop1 = fc1 - 3 * fB;
fpass2 = fc1 + 1 * fB; fstop2 = fc1 + 3 * fB;
fpass3 = fc2 - 1 * fB; fstop3 = fc2 - 3 * fB;
fpass4 = fc2 + 1 * fB; fstop4 = fc2 + 3 * fB;

%% 产生2FSK信号
[signal, csignal1, csignal2, baseband, t] = tFSK(N, TB, fc1, fc2, fs);
%% 2FSK相干解调
[dmode_co1, dmode_co2]  = cohfsk(signal, csignal1, csignal2, fpass, fstop, fs, TB);
% 2FSK非相干解调
[dmode_rc1, dmode_rc2] = rectfsk(signal, fpass, fstop, fpass1, fstop1, fpass2, fstop2, fpass3, fstop3, fpass4, fstop4, fs);
%% 抽样判决
baseco = sj_fsk(dmode_co1, dmode_co2, TB, fs);
baserc = sj_fsk(dmode_rc1, dmode_rc2, TB, fs);
%% 频谱分析
L = length(t);
n = - 1 / 2 + 1 / L : 1 / L : 1 / 2;
f = n * fs;
HFB = fftshift(fft(baseband));
HFM = fftshift(fft(signal));
HFDC1 = fftshift(fft(dmode_co1));
HFDC2 = fftshift(fft(dmode_co2));
HFDR1 = fftshift(fft(dmode_rc1));
HFDR2 = fftshift(fft(dmode_rc2));
%% 基带信号和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('2FSK信号');
%% %% 基带信号和2FSK信号频谱
% figure(2)
% subplot(2, 1, 1); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
% subplot(2, 1, 2); plot(f, abs(HFM), 'LineWidth', 1.2); title('2FSK信号');
%% 2FSK相干解调后信号与基带信号和2ASK信号对比
figure(3)
subplot(8, 1, 1); plot(t, baseband, 'LineWidth', 1.2); title('基带信号');
% subplot(6, 2, 2); plot(f, abs(HFB), 'LineWidth', 1.2); title('基带信号');
subplot(8, 1, 2); plot(t, signal, 'LineWidth', 1.2); title('2FSK信号');
% subplot(6, 2, 4); plot(f, abs(HFM), 'LineWidth', 1.2); title('2FSK信号'); 

subplot(8, 1, 3); plot(t, dmode_co1, 'LineWidth', 1.2); title('相干解调后的信号 0码');
% subplot(6, 2, 6); plot(f, abs(HFDC1), 'LineWidth', 1.2); title('相干解调后的信号 0码'); 
subplot(8, 1, 4); plot(t, dmode_co2, 'LineWidth', 1.2); title('相干解调后的信号 1码');
% subplot(6, 1, 5); plot(f, abs(HFDC2), 'LineWidth', 1.2); title('相干解调后的信号 1码'); 
subplot(8, 1, 5); plot(t, baseco, 'LineWidth', 1.2); title('相干解调抽样判决后信号');

subplot(8, 1, 6); plot(t, dmode_rc1, 'LineWidth', 1.2); title('非相干解调后的信号 0码');
% subplot(6, 2, 10); plot(f, abs(HFDR1), 'LineWidth', 1.2); title('非相干解调后的信号 0码');
subplot(8, 1, 7); plot(t, dmode_rc2, 'LineWidth', 1.2); title('非相干解调后的信号 1码');
% subplot(6, 2, 12); plot(f, abs(HFDR2), 'LineWidth', 1.2); title('非相干解调后的信号 1码'); 
subplot(8, 1, 8); plot(t, baserc, 'LineWidth', 1.2); title('非相干解调抽样判决后信号');
%% 眼图
% figure(5);
% neye = 1;
% L = TB * fs;
% for k = 1 : N - neye + 1
%     ss1 = dmode_rc1((k - 1) * L  + 1 : ((k - 1) + neye) * L);
%     ss2 = dmode_rc2((k - 1) * L  + 1 : ((k - 1) + neye) * L);
%     plot(ss1,'LineWidth', 1.2);
%     hold on;
%     plot(ss2,'LineWidth', 1.2);
%     hold on;
% end
% hold on;
% title('接收信号眼图 eyenum = 1');












实验结果

相干解调时域波形

 

非相干解调时域波形

 

抽样判决结果 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值