首页 > 其他分享 >(76)MPSK基带调制通信系统awgn信道传输性能的MATLAB仿真

(76)MPSK基带调制通信系统awgn信道传输性能的MATLAB仿真

时间:2024-11-28 11:34:11浏览次数:13  
标签:仿真 PSK SER EbN0dB MPSK mpsk 76 MATLAB indexp

文章目录


前言

M-PSK(M-Phase Shift Keying,M相移键控)是一种相位调制技术,其中M表示不同的相位状态数量。在M-PSK中,每个符号携带log2(M)比特的信息,通过改变载波信号的相位来表示不同的数据。本文给出AWGN信道的PAM通信系统性能仿真的MATLAB源代码与仿真结果。


一、MATLAB仿真代码

% 仿真参数设置
nSym = 1e5;                      % 符号数
EbN0dB = -4:2:24;                % Eb/N0范围(单位:dB)
MODU_TYPE = 'PSK';               % 调制类型
arrayM = [2,4,8,16,32];          % 要仿真的M值数组

plotColor = ['b','g','r','c','m'];  % 绘图颜色
indexp = 1;
legendString = cell(1,length(arrayM)*2);  % 创建cell单元格数组,用于图例条目

for M = arrayM
    % 仿真参数初始化
    k = log2(M);
    EsN0dB = 10*log10(k)+EbN0dB;         % 计算EsN0dB
    SER_sim = zeros(1,length(EbN0dB));   % 仿真符号错误率
    
    % 生成随机符号
    d = randi([1 M],1,nSym);

    % M-PSK基带调制
    [s,ref_Constellation] = mpsk_modulator(M,d);
    
    for i = 1:length(EsN0dB)
        % 经AWGN信道传输
        snrdB = EsN0dB(i);              % Eb/No转换为SNR
        r = awgn(s,snrdB,'measured');   % 增加AWGN噪声
        
        % 解调
        d_hat= mpsk_demodulator(M,r);
        
        % 统计SER
        SER_sim(i) = sum((d~=d_hat))/nSym;    % SER计算
    end
	
    % 计算理论SER
    EbN0 = 10.^(EbN0dB/10);           % EbN0dB转换成线性值
    EsN0 = log2(M)*EbN0;              % EsN0线性值
    if M == 2           % BPSK
            SER_theory = 0.5 * erfc(sqrt(EbN0));
    else
        if M == 4       % QPSK
            Q = 0.5 * erfc(sqrt(EbN0));
            SER_theory = 2*Q - Q.^2;
        else            % 高阶M-PSK
            SER_theory = erfc(sqrt(EsN0)*sin(pi/M));
        end
    end
    
	semilogy(EbN0dB,SER_sim,[plotColor(indexp) 'o']); hold on;
    semilogy(EbN0dB,SER_theory,plotColor(indexp),'linewidth',1); 
    
	legendString{2*indexp-1} = ['Sim ',num2str(M),'-',MODU_TYPE];
    legendString{2*indexp} = ['Theory ',num2str(M),'-',MODU_TYPE];
    indexp = indexp + 1;
end

ylim([1e-6 1]);
grid on;
legend(legendString,'location','southwest');
xlabel('Eb/N0(dB)');ylabel('SER (Ps)');
title(['Probability of Symbol Error for M-',MODU_TYPE,' over AWGN']);

二、子函数与完整代码

代码中调用了2个子函数:
(1)mpsk调制函数
[s,ref_Constellation] = mpsk_modulator(M,d);

(2)mpsk解调函数
d_hat = mpsk_demodulator(M,r);

这两个函数与完整代码,已上传至我的资源:
https://download.csdn.net/download/weixin_45333185/90043783

三、仿真结果

在这里插入图片描述

总结

M-PSK调制是一种高效的调制方式,因为它可以在相同的带宽内传输更多的信息比特。随着M的增加,每个符号携带的比特数也增加,但这也增加了对信道的噪声和干扰的敏感性,因为相邻相位状态之间的间隔变小,更容易受到干扰。



标签:仿真,PSK,SER,EbN0dB,MPSK,mpsk,76,MATLAB,indexp
From: https://blog.csdn.net/weixin_45333185/article/details/144070061

相关文章