% 4PAM调制信号在高斯信道下的性能仿真 clear all; close all; clc %% 参数设置 N = 1e6; % 参考帧数 Eb = 1; % 参考能量 M = 4; % 调制阶数 %% 产生调制信号 b = randi([0 M-1], 1, N); % 随机产生0~M-1的整数 s = 2*b-(M-1); % 4PAM调制信号 %% 产生高斯白噪声信号 SNR = 0:1:14; % 信噪比范围 Es = Eb*log2(M); % 符号能量 for i = 1:length(SNR) N0 = Es/(10^(SNR(i)/10)); % 噪声功率 n = sqrt(N0/2)*(randn(1, N)+1j*randn(1, N)); % 高斯白噪声 r = s + n; % 接收信号 r = r.'; % 转置,方便下一步计算 %% 多进制调制信号软输出检测 tau = 1.628; % 判决门限 for j = 1:N if real(r(j)) < -tau b_hat(j) = 0; elseif real(r(j)) < 0 b_hat(j) = 1; elseif real(r(j)) < tau b_hat(j) = 2; else b_hat(j) = 3; end end s_hat = 2*b_hat-(M-1); % 解调结果 %% 计算误符号率和误比特率 err_symbols(i) = sum(s~=s_hat)/N; % 误符号率 err_bits(i) = err_symbols(i)*log2(M); % 误比特率 end %% 绘制性能曲线 Pb_simb = err_bits; % 仿真误比特率 Pb_sims = err_symbols; % 仿真误符号率 figure semilogy(SNR, Pb_simb, 'b-*', 'LineWidth', 2); hold on semilogy(SNR, Pb_sims, 'g-*', 'LineWidth', 2); hold off grid on xlabel('SNR (dB)'); ylabel('Pb'); legend('理论误比特率曲线','理论误符号率曲线','仿真误比特率曲线','仿真误符号率曲线'); title('4PAM调制在高斯信道下的性能曲线');,添加理论误比特率曲线和理论误符号率曲线
时间: 2023-12-18 22:05:26 浏览: 72
在代码中添加如下部分即可:
```
%% 计算理论误符号率和误比特率
Pb_theory = qfunc(sqrt(2*log2(M)*Es./(N0))); % 理论误比特率
Ps_theory = 2*(1-1/sqrt(M))*Pb_theory; % 理论误符号率
%% 绘制性能曲线
semilogy(SNR, Pb_theory, 'r--', 'LineWidth', 2); hold on
semilogy(SNR, Ps_theory, 'm--', 'LineWidth', 2);
semilogy(SNR, Pb_simb, 'b-*', 'LineWidth', 2);
semilogy(SNR, Pb_sims, 'g-*', 'LineWidth', 2);
hold off
grid on
xlabel('SNR (dB)');
ylabel('Pb');
legend('理论误比特率曲线','理论误符号率曲线','仿真误比特率曲线','仿真误符号率曲线');
title('4PAM调制在高斯信道下的性能曲线');
```
其中,理论误比特率和误符号率的计算使用了Q函数(qfunc)和公式:
```
Pb_theory = qfunc(sqrt(2*log2(M)*Es./(N0))); % 理论误比特率
Ps_theory = 2*(1-1/sqrt(M))*Pb_theory; % 理论误符号率
```
相关问题
% 4PAM调制信号在高斯信道下的性能仿真 clear all; close all; clc %% 参数设置 N = 1e6; % 参考帧数 Eb = 1; % 参考能量 M = 4; % 调制阶数 %% 产生调制信号 b = randi([0 M-1], 1, N); % 随机产生0~M-1的整数 s = 2b-(M-1); % 4PAM调制信号 %% 产生高斯白噪声信号 SNR = 0:1:14; % 信噪比范围 Es = Eblog2(M); % 符号能量 for i = 1:length(SNR) N0 = Es/(10^(SNR(i)/10)); % 噪声功率 n = sqrt(N0/2)(randn(1, N)+1jrandn(1, N)); % 高斯白噪声 r = s + n; % 接收信号 r = r.'; % 转置,方便下一步计算 %% 多进制调制信号软输出检测 tau = 1.7; % 判决门限 for j = 1:N if real(r(j)) < -tau b_hat(j) = 0; elseif real(r(j)) < 0 b_hat(j) = 1; elseif real(r(j)) < tau b_hat(j) = 2; else b_hat(j) = 3; end end s_hat = 2b_hat-(M-1); % 解调结果 %% 计算误符号率和误比特率 err_symbols(i) = sum(s~=s_hat)/N; % 误符号率 err_bits(i) = err_symbols(i)log2(M); % 误比特率 end %% 绘制性能曲线 Pb_simb = err_bits; % 仿真误比特率 Pb_sims = err_symbols; % 仿真误符号率 figure semilogy(SNR, Pb_simb, 'b-', 'LineWidth', 2); hold on semilogy(SNR, Pb_sims, 'g-', 'LineWidth', 2); hold off grid on xlabel('SNR (dB)'); ylabel('Pb'); legend('理论误比特率曲线','理论误符号率曲线','仿真误比特率曲线','仿真误符号率曲线'); title('4PAM调制在高斯信道下的性能曲线'); 在这个程序基础上绘制4PAM理论误码率和理论误比特率曲线
可以使用Q函数和理论公式计算4PAM的理论误码率和理论误比特率。代码如下:
```
clear all; close all; clc;
%% 参数设置
M = 4; % 调制阶数
Eb = 1; % 参考能量
SNR = 0:1:14; % 信噪比范围
%% 计算理论误码率和误比特率
Pb_theory = 2*(1-1/sqrt(M))*qfunc(sqrt(3*Eb/(M-1)./10.^(SNR/10))); % 理论误码率
Pb_theory(Pb_theory<1e-6) = 1e-6; % 防止Pb为0
Pb_theory_log = log10(Pb_theory); % 以对数形式展示Pb
Pb_bits_theory = Pb_theory*log2(M); % 理论误比特率
Pb_bits_theory(Pb_bits_theory<1e-6) = 1e-6; % 防止Pb_bits为0
Pb_bits_theory_log = log10(Pb_bits_theory); % 以对数形式展示Pb_bits
%% 绘制性能曲线
figure
semilogy(SNR, Pb_theory_log, 'r-', 'LineWidth', 2); hold on
semilogy(SNR, Pb_bits_theory_log, 'm-', 'LineWidth', 2); hold off
grid on
xlabel('SNR (dB)');
ylabel('Pb and Pb_bits (log10)');
legend('理论误码率曲线', '理论误比特率曲线');
title('4PAM调制在高斯信道下的性能曲线');
```
运行程序后,将得到4PAM调制在高斯信道下的理论误码率和理论误比特率曲线。
MATLAB程序% 4PAM调制信号在高斯信道下的性能仿真 clear all; close all; clc %% 参数设置 N = 1e6; % 参考帧数 Eb = 1; % 参考能量 M = 4; % 调制阶数 %% 产生调制信号 b = randi([0 M-1], 1, N); % 随机产生0~M-1的整数 s = 2b-(M-1); % 4PAM调制信号 %% 产生高斯白噪声信号 SNR = 0:1:14; % 信噪比范围 Es = Eblog2(M); % 符号能量 for i = 1:length(SNR) N0 = Es/(10^(SNR(i)/10)); % 噪声功率 n = sqrt(N0/2)(randn(1, N)+1jrandn(1, N)); % 高斯白噪声 r = s + n; % 接收信号 r = r.'; % 转置,方便下一步计算 %% 多进制调制信号软输出检测 tau = 1.628; % 判决门限 for j = 1:N if real(r(j)) < -tau b_hat(j) = 0; elseif real(r(j)) < 0 b_hat(j) = 1; elseif real(r(j)) < tau b_hat(j) = 2; else b_hat(j) = 3; end end s_hat = 2b_hat-(M-1); % 解调结果 %% 计算误符号率和误比特率 err_symbols(i) = sum(s~=s_hat)/N; % 误符号率 err_bits(i) = err_symbols(i)log2(M); % 误比特率 end %% 绘制性能曲线 Pb_theory = qfunc(sqrt(3log2(M)/(M^2-1)10.^(SNR/10))); % 理论误比特率 Pb_simb = err_bits; % 仿真误比特率 Pb_sims = err_symbols; % 仿真误符号率 figure semilogy(SNR, Pb_theory, 'r-o', 'LineWidth', 2); hold on semilogy(SNR, Pb_symbols, 'm-o', 'LineWidth', 2); hold on semilogy(SNR, Pb_simb, 'b-', 'LineWidth', 2); hold on semilogy(SNR, Pb_sims, 'g-', 'LineWidth', 2); hold off grid on xlabel('SNR (dB)'); ylabel('Pb'); legend('理论误比特率曲线','理论误符号率曲线','仿真误比特率曲线','仿真误符号率曲线'); title('4PAM调制在高斯信道下的性能曲线'); 添加一个绘制理论误符号率的曲线
可以在程序中添加以下代码来绘制理论误符号率的曲线:
Pb_theory_symbols = qfunc(sqrt((2*log2(M)/(M^2-1))*10.^(SNR/10))); % 理论误符号率
semilogy(SNR, Pb_theory_symbols, 'k-o', 'LineWidth', 2);
legend('理论误比特率曲线','理论误符号率曲线','仿真误比特率曲线','仿真误符号率曲线','Location','best'); % 修改图例
title('4PAM调制在高斯信道下的性能曲线(包括误符号率)'); % 修改标题
完整代码如下:
clear all; close all; clc
%% 参数设置
N = 1e6; % 参考帧数
Eb = 1; % 参考能量
M = 4; % 调制阶数
%% 产生调制信号
b = randi([0 M-1], 1, N); % 随机产生0~M-1的整数
s = 2*b-(M-1); % 4PAM调制信号
%% 产生高斯白噪声信号
SNR = 0:1:14; % 信噪比范围
Es = Eb*log2(M); % 符号能量
for i = 1:length(SNR)
N0 = Es/(10^(SNR(i)/10)); % 噪声功率
n = sqrt(N0/2)*(randn(1, N)+1j*randn(1, N)); % 高斯白噪声
r = s + n; % 接收信号
r = r.'; % 转置,方便下一步计算
%% 多进制调制信号软输出检测
tau = 1.628; % 判决门限
for j = 1:N
if real(r(j)) < -tau
b_hat(j) = 0;
elseif real(r(j)) < 0
b_hat(j) = 1;
elseif real(r(j)) < tau
b_hat(j) = 2;
else
b_hat(j) = 3;
end
end
s_hat = 2*b_hat-(M-1); % 解调结果
%% 计算误符号率和误比特率
err_symbols(i) = sum(s~=s_hat)/N; % 误符号率
err_bits(i) = err_symbols(i)*log2(M); % 误比特率
end
%% 绘制性能曲线
Pb_theory = qfunc(sqrt(3*log2(M)/(M^2-1)*10.^(SNR/10))); % 理论误比特率
Pb_theory_symbols = qfunc(sqrt((2*log2(M)/(M^2-1))*10.^(SNR/10))); % 理论误符号率
Pb_simb = err_symbols; % 仿真误符号率
Pb_bits = err_bits; % 仿真误比特率
figure
semilogy(SNR, Pb_theory, 'r-o', 'LineWidth', 2);
hold on
semilogy(SNR, Pb_theory_symbols, 'k-o', 'LineWidth', 2);
semilogy(SNR, Pb_bits, 'b-', 'LineWidth', 2);
semilogy(SNR, Pb_simb, 'g-', 'LineWidth', 2);
hold off
grid on
xlabel('SNR (dB)');
ylabel('Pb');
legend('理论误比特率曲线','理论误符号率曲线','仿真误比特率曲线','仿真误符号率曲线','Location','best');
title('4PAM调制在高斯信道下的性能曲线(包括误符号率)');
阅读全文