• 通信原理实践(五)——2PSK 与2DPSK 通信系统


    一、一些Matlab函数

    image

    image

    image

    image

    二、2PSK调制解调,性能分析

    1、2PSK调制

    (1)图示

    image

    (2)Matlab代码

    function [ s_t ,bb_t,bits] = psk2_module( nSym ,Rb,fs,fc,Ac )
    %UNTITLED7 此处显示有关此函数的摘要
    %   此处显示详细说明
    %nSym = 300;   % 信息长度
    %Rb = 200;     % 信息速率
    %fs = 48e3;    % 采样率
    %fc = 4e3;     % 载波频率
    %Ac = 1;       % 载波幅度
    %s_t           % 已调波形
    %bb_t          % 码型时域波形
    %bb            % 码型
    
    %%
    %产生信号
    % 随机产生二进制信息 
    bits = randint(nSym,1); 
    % 产生不归零码
    bb = 2 * bits - 1; 
    
    %%
    %产生码型
    % 每个符号包含的样点数 
    sample_bit = fs / Rb;
    % 时间
    t = (0:sample_bit*nSym-1)'/fs; 
    % 产生不归零码的时域波形
    bb_t = reshape(repmat(bb', sample_bit, 1), sample_bit*nSym, 1); 
    
    %%
    %调制
    % 产生载波信号 
    c_t = Ac*cos(2*pi*fc*t);
    % 调制
    s_t = bb_t .* c_t; 
    
    
    end

    2、2PSK解调

    (1)图示

    image

    (2)Matlab代码

    function [ bits,bb_t] = psk2_remodule( Rb,fs,fc,s_t)
    %UNTITLED11 此处显示有关此函数的摘要
    %   此处显示详细说明
    % Rb = 200;       % 信息速率 
    % fs = 48e3;      % 采样率 
    % fc = 4e3;       % 载波频率
    % s_t             % 调制波形
    
    % bit_s           % 抽样判决之后
    % bb_t            % 抽样判决之前
    
    r_t = s_t; 
    
    % 每个符号包含的样点数 
    sample_bit = fs/Rb; 
    % 时间 
    t = (0:length(r_t)-1)'/fs; 
    
    % 产生同频同相载波信号 
    c_t = cos(2*pi*fc*t);
    
    % FIR群延迟,也是阶数一半 
    group_delay = 50; 
    b = fir1(group_delay*2, Rb/(fs/2)); % 主瓣占带宽Rb,这里可以放宽 
    bb_t = filter(b,1, r_t .* c_t); % 混频并滤波 
    
    % 抽样点下标 
    idx_decision = round(1+group_delay+sample_bit/2):sample_bit:length(r_t); 
    % 取得抽样点 
    val_decision = bb_t(idx_decision); 
    
    % 判决
    bits = zeros(length(val_decision),1); 
    bits(val_decision > 0) = 1; 
    
    
    end

    3、一个demo

    image

    image

    clc,clear;
    
    nSym = 1000;    % 信息长度
    Rb = 1e3;      % 信息速率
    fs = 48e3;     % 采样率
    fc = 5e3;      % 载波频率
    Ac = 1;        % 载波幅度
    
    %%
    [s_t ,bb_t,bb] = psk2_module( nSym ,Rb,fs,fc,Ac );
    t = (0 : length(s_t) - 1) / fs' ;
    
    %%
    %绘制已调波形
    figure();
    plot(t,s_t);
    title('2PSK时域波形');
    xlabel('time(t)');
    ylabel('y');
    
    %绘制功率谱
    powerF_draw(s_t,fs);
    
    %%
    %发送端码型变换后的波形
    figure();
    subplot(2,1,1);
    plot(t,bb_t);
    axis([min(t),max(t),-1.2,1.2]);
    title('发送端码型波形');
    xlabel('time(t)');
    ylabel('y');
    
    %接收端抽样判决前的波形
    subplot(2,1,2);
    [bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t);
    plot(t,rbb_t);
    title('接收端码型波形');
    xlabel('time(t)');
    ylabel('y');
    
    %%
    %眼图
    eyediagram(rbb_t,4*fs/Rb); %取四个Bit
    title('无信道噪声');
    
    %小噪声
    s_pow = sum(s_t.^2) / length(s_t);
    n_pow = 0.01 * s_pow;
    n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow);
    [bits_low_noise,rbb_t_low_noise] = psk2_remodule(Rb,fs,fc,s_t + n_t);
    eyediagram(rbb_t_low_noise,4*fs/Rb);
    title('小信道噪声');
    
    %大噪声
    n_pow = 0.5 * s_pow;
    n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow);
    [bits_high_noise,rbb_t_high_noise] = psk2_remodule(Rb,fs,fc,s_t + n_t);
    eyediagram(rbb_t_high_noise,4*fs/Rb);
    title('大信道噪声');
    
    %%
    %2PSK通信系统评估
    snr_i = (-3:1:8)'; % SNR输入(dB)
    
    %计算噪声功率
    n_pow = s_pow ./ (10.^(snr_i ./ 10));
    
    %初始化储存
    number = zeros(1,length(snr_i));
    ratio = zeros(1,length(snr_i));
    
    %计算SNR
    for i=1:length(snr_i)
        n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow(i));
        [bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t + n_t);
        [number(i),ratio(i)] = symerr(bits,bb(1:nSym-1));
    end
    
    %绘图
    figure();
    plot(snr_i,ratio*100);
    title('误码率曲线');
    xlabel('snr_i(dB)');
    ylabel('误码率(%)');

    三、2DPSK调制解调

    1、2DPSK调制

    function [ s_t ,bb_t,bits] = dpsk2_module( nSym ,Rb,fs,fc,Ac )
    %UNTITLED7 此处显示有关此函数的摘要
    %   此处显示详细说明
    %nSym = 300;   % 信息长度
    %Rb = 200;     % 信息速率
    %fs = 48e3;    % 采样率
    %fc = 4e3;     % 载波频率
    %Ac = 1;       % 载波幅度
    %s_t           % 已调波形
    %bb_t          % 码型时域波形
    %bits          % 码型
    
    %%
    %产生信号
    % 随机产生二进制信息 
    bits = randint(nSym,1);
    
    %产生差分码
    bits_d = zeros(nSym+1,1);
    for i=1:length(bits)
        bits_d(i+1) = mod(bits_d(i) + bits(i),2);
    end
    
    % 产生不归零码
    bb = 2 * bits_d - 1; 
    
    %%
    %产生码型
    % 每个符号包含的样点数 
    sample_bit = fs / Rb;
    % 时间
    t = (0:sample_bit*(nSym+1)-1)'/fs; 
    % 产生不归零码的时域波形
    bb_t = reshape(repmat(bb', sample_bit, 1), sample_bit* (nSym+1), 1); 
    
    %%
    %调制
    % 产生载波信号 
    c_t = Ac*cos(2*pi*fc*t);
    % 调制
    s_t = bb_t .* c_t; 
    
    
    
    end

    2、2DPSK解调

    function [ bits,bb_t] = dpsk2_remodule( Rb,fs,fc,s_t)
    %UNTITLED11 此处显示有关此函数的摘要
    %   此处显示详细说明
    % Rb = 200;       % 信息速率 
    % fs = 48e3;      % 采样率 
    % fc = 4e3;       % 载波频率
    % s_t             % 调制波形
    
    % bit_s           % 抽样判决之后
    % bb_t            % 抽样判决之前
    
    r_t = s_t; 
    
    % 每个符号包含的样点数 
    sample_bit = fs/Rb; 
    % 时间 
    t = (0:length(r_t)-1)'/fs; 
    
    % 产生同频同相载波信号 
    c_t = cos(2*pi*fc*t);
    
    % FIR群延迟,也是阶数一半 
    group_delay = 50; 
    b = fir1(group_delay*2, Rb/(fs/2)); % 主瓣占带宽Rb,这里可以放宽 
    bb_t = filter(b,1, r_t .* c_t); % 混频并滤波 
    
    % 抽样点下标 
    idx_decision = round(1+group_delay+sample_bit/2):sample_bit:length(r_t); 
    % 取得抽样点 
    val_decision = bb_t(idx_decision); 
    
    % 判决
    bits_d = zeros(length(val_decision),1); 
    bits_d(val_decision > 0) = 1; 
    bits = zeros(length(bits_d)-1,1);
    for i=1:length(bits)
        bits(i) = mod(bits_d(i) + bits_d(i+1),2);
    end
    
    end

    3、一个demo

    image

    clc,clear;
    
    nSym = 1000;    % 信息长度
    Rb = 1e3;      % 信息速率
    fs = 48e3;     % 采样率
    fc = 5e3;      % 载波频率
    Ac = 1;        % 载波幅度
    
    %% 产生2PSK信号
    [s_t,bb_t,bb] = psk2_module( nSym ,Rb,fs,fc,Ac );
    
    %% 产生2DPSK信号
    [s_d_t,bb_d_t,bb_d] = dpsk2_module( nSym ,Rb,fs,fc,Ac );
    
    %% 绘制发送端差分编码前后的波形
    figure()
    %发送端差分编码前离散序列
    subplot(2,1,1);
    stem(bb_d);
    axis([-5,nSym+5,-1.2,1.2]);
    title('发送端差分编码前离散序列');
    xlabel('time(t)');
    ylabel('y');
    
    %发送端差分不归零编码后离散序列
    subplot(2,1,2);
    stem(bb_d_t(1:fs/Rb:length(bb_d_t)));
    axis([-5,nSym+5,-1.2,1.2]);
    title('发送端差分不归零编码后离散序列');
    xlabel('time(t)');
    ylabel('y');
    
    [bits_d,rbb_d_t] = dpsk2_remodule(Rb,fs,fc,s_d_t);
    
    %% 2PSK通信系统评估
    s_pow = sum(s_t.^2) / length(s_t);
    snr_i = (-3:1:8)'; % SNR输入(dB)
    %计算噪声功率
    n_pow = s_pow ./ (10.^(snr_i ./ 10));
    
    %初始化储存
    number = zeros(1,length(snr_i));
    ratio = zeros(1,length(snr_i));
    
    %计算SNR
    for i=1:length(snr_i)
        n_t = bandlimit_noise(length(s_t),fs,fc,2*Rb,n_pow(i));
        [bits,rbb_t] = psk2_remodule(Rb,fs,fc,s_t + n_t);
        [number(i),ratio(i)] = symerr(bits,bb(1:nSym-1));
    end
    
    %% 2DPSK通信系统评估
    s_d_pow = sum(s_d_t.^2) / length(s_d_t);
    snr_i = (-3:1:8)'; % SNR输入(dB)
    
    %计算噪声功率
    n_d_pow = s_d_pow ./ (10.^(snr_i ./ 10));
    
    %初始化储存
    number_d = zeros(1,length(snr_i));
    ratio_d = zeros(1,length(snr_i));
    
    %计算SNR
    for i=1:length(snr_i)
        n_d_t = bandlimit_noise(length(s_d_t),fs,fc,2*Rb,n_d_pow(i));
        [bits_d,rbb_d_t] = dpsk2_remodule(Rb,fs,fc,s_d_t + n_d_t);
        [number_d(i),ratio_d(i)] = symerr(bits_d,bb_d(1:nSym-1));
    end
    
    
    %绘图
    figure()
    hold on;
    plot(snr_i,ratio*100,'b');
    plot(snr_i,ratio_d*100,'r');
    title('2PSK和2DPSK误码率曲线对比');
    xlabel('snr_i(dB)');
    ylabel('误码率(%)');
    legend('2PSK','2DPSK');
  • 相关阅读:
    iCloud文件同步至Mac本地磁盘
    hive多分区写入
    清理hdfs小文件shell脚本
    大数据应用建设开源工具-update2019-07
    手机号码段:中国工信.三大运营商号段-update2019-09
    sparkf:spark-sql替换hive查询引擎
    hivef:hive 执行 sql 文件
    azkaban 工作流2.0开发示例
    MySQL-时间+日期函数
    大数据仓库对业务数据的几个基本要求
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4960096.html
Copyright © 2020-2023  润新知