用matlab画出MPSK的误码率曲线
时间: 2023-08-22 12:10:04 浏览: 51
好的,下面是用Matlab画出MPSK的误码率曲线的代码:
```matlab
clear;
close all;
M = 8; % M阶MPSK
EbN0dB = 0:0.5:15; % 信噪比范围
k = log2(M); % 每个符号的比特数
n = 1e6; % 发送的符号数
errors = zeros(length(EbN0dB), 1); % 初始化误码数
for i = 1:length(EbN0dB)
EbN0 = 10^(EbN0dB(i) / 10); % 线性信噪比
EsN0 = EbN0 * k; % 符号信噪比
sig = sqrt(1 / (2 * EsN0)); % 噪声标准差
for j = 1:n
% 生成随机MPSK符号
m = randi([0 M-1]);
x = exp(1j * 2 * pi * m / M);
% 加入高斯噪声
y = x + sig * (randn + 1j * randn);
% 解调
[~, idx] = max(real(y) .* real(x) + imag(y) .* imag(x));
% 判断是否出错
if idx ~= m + 1
errors(i) = errors(i) + 1;
end
end
end
Pe = errors / n; % 误码率
Pe_theory = qfunc(sqrt(2 * k * EbN0)); % 理论误码率
% 画图
semilogy(EbN0dB, Pe, 'o-', 'LineWidth', 2);
hold on;
semilogy(EbN0dB, Pe_theory, 'r--', 'LineWidth', 2);
grid on;
xlabel('Eb/N0(dB)');
ylabel('Pe');
legend('仿真', '理论');
```
运行上述代码,即可得到MPSK的误码率曲线。其中,`M`为MPSK的阶数,`EbN0dB`为信噪比范围,`k`为每个符号的比特数,`n`为发送的符号数,`errors`为误码数(用于计算误码率),`Pe`为仿真得到的误码率,`Pe_theory`为理论误码率。