文章目录
一、MATLAB仿真
1.仿真代码
% 仿真参数设置
nSym = 1e5; % 符号数
EbN0dB = -5:2:25; % Eb/N0范围(单位:dB)
MODU_TYPE = 'PSK'; % 调制类型
arrayM = [2,4,8,16,32]; % 要仿真的M值数组
plotColor = ['b','g','r','c','m','k']; % 绘图颜色
indexp = 1;
legendString = cell(1,length(arrayM)*2); % 创建cell单元格数组,用于图例条目
figure(); % 创建一个绘图窗口
for n = 1:length(arrayM)
% 仿真参数初始化
M = arrayM(n);
k = log2(M);
EsN0dB = 10*log10(k) + EbN0dB; % 计算EsN0dB
SER_sim = zeros(1,length(EbN0dB)); % 仿真符号错误率
%-----------------Transmitter----------------------
% 生成随机符号
d = randi([1 M],1,nSym);
% M-PSK基带调制
[s,ref_Constellation] = mpsk_modulator(M,d);
for i = 1:length(EsN0dB)
% 平坦瑞利衰落
h = 1/sqrt(2)*(randn(1,nSym)+1i*randn(1,nSym));
hs = abs(h).*s; % 平坦瑞利衰落作用于调制符号
% 加AWGN噪声
snrdB = EsN0dB(i); % Eb/No转换为SNR
r = add_awgn_noise(hs,EsN0dB(i));% 增加AWGN噪声
%-----------------Receiver----------------------
y = r./abs(h); % 假设已估计得到信道衰落情况
% 解调
d_hat= mpsk_demodulator(M,y);
% 统计SER
SER_sim(i) = sum((d~=d_hat)) / nSym; % SER计算
end
SER_theory = ser_rayleigh(EbN0dB,MODU_TYPE,M); % 理论SER
semilogy(EbN0dB,SER_sim,[plotColor(indexp) 'o']); hold on;
semilogy(EbN0dB,SER_theory,plotColor(indexp),'linewidth',1);
legendString{2*indexp-1} = ['Simulate ',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');
title(['Probability of Symbol Error for M-',MODU_TYPE,' Rayleigh flat fading channel']);
xlabel('Eb/N0(dB)');ylabel('SER(Ps)');
2.仿真结果
二、子函数与完整代码
子函数与完整代码列表如下:
完整代码,已上传至我的资源:
https://download.csdn.net/download/weixin_45333185/90071827
总结
暂无。后续有机会补上。
标签:仿真,SER,EbN0dB,MPSK,MATLAB,indexp,nSym,EsN0dB,78 From: https://blog.csdn.net/weixin_45333185/article/details/144200697