文章目录
前言
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