文章目录
- 前言
- 一、MATLAB仿真
- 1.仿真代码
- 2.仿真结果
- 二、子函数与完整代码
- 总结
前言
本文给出瑞利平坦衰落信道上的M-PSK通信系统性能仿真的MATLAB源代码与仿真结果。其中,调制方式M-PSK包括BPSK、QPSK、8-PSK、16-PSK、32-PSK等方式。
一、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)
% 平坦瑞利衰落
[hs,h] = Rayleigh_flat_fading_channel(s,nSym);
% 加AWGN噪声
snrdB = EsN0dB(i); % Eb/No转换为SNR
r = add_awgn_noise(hs,EsN0dB(i));% 增加AWGN噪声
%-----------------Receiver----------------------
% 信道均衡(假设已估计得到信道衰落情况)
y = channel_equalization(r,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?spm=1001.2014.3001.5503
总结
暂无。后续有机会补上。