matlab 编写代码实现16psk和16QAM的理论误码率
时间: 2024-02-27 12:54:52 浏览: 22
好的,下面是实现 16PSK 和 16QAM 的理论误码率的 Matlab 代码:
```matlab
clear all;
close all;
% 16PSK 误码率计算
M = 16; % PSK 码元数
k = log2(M); % 每个码元的比特数
EbNo = 0:1:20; % 信噪比范围
EsNo = EbNo + 10*log10(k); % 符号能量与噪声功率比
% 理论误码率计算公式
theoryBer = 0.5*erfc(sqrt(EsNo*sin(pi/M))^2);
% 画图
semilogy(EbNo,theoryBer,'bs-');
axis([0 20 10^-5 1]);
grid on;
legend('16PSK 理论误码率');
xlabel('Eb/No (dB)');
ylabel('误码率');
% 16QAM 误码率计算
M = 16; % QAM 码元数
k = log2(M); % 每个码元的比特数
EbNo = 0:1:20; % 信噪比范围
EsNo = EbNo + 10*log10(k); % 符号能量与噪声功率比
% 理论误码率计算公式
theoryBer = (2*(sqrt(M)-1)/sqrt(M))*qfunc(sqrt(3*EsNo/(M-1)));
% 画图
semilogy(EbNo,theoryBer,'rs-');
axis([0 20 10^-5 1]);
grid on;
legend('16PSK 理论误码率','16QAM 理论误码率');
xlabel('Eb/No (dB)');
ylabel('误码率');
```
这段代码会分别计算 16PSK 和 16QAM 的理论误码率,并画出误码率随信噪比的变化曲线。其中,`M` 表示调制方式的码元数,`k` 表示每个码元的比特数,`EbNo` 表示信噪比范围,`EsNo` 表示符号能量与噪声功率比。在计算 16PSK 的理论误码率时,采用了公式:$P_b = \frac{1}{2}erfc(\sqrt{\frac{E_s}{N_0}sin^2(\frac{\pi}{M})})$;在计算 16QAM 的理论误码率时,采用了公式:$P_b = \frac{4}{log_2(M)}(1-\frac{1}{\sqrt{M}})(1-\sqrt{\frac{3}{M-1}})Q(\sqrt{\frac{3E_s}{M-1}})$。