用matlab 给出Eb/No(dB)与BER 误码性能关系图,包括理论误码性能和仿真实验误码性能。
时间: 2024-05-16 12:14:31 浏览: 139
要绘制Eb/No(dB)与BER误码性能关系图,需要进行以下步骤:
1. 确定调制方式和编码方式。这里以QPSK调制和卷积码为例。
2. 构建仿真模型。仿真模型包括信号生成、信道模拟、解调、译码等模块。
3. 设置仿真参数。包括信噪比范围、仿真次数、码率、码字长度等。
4. 进行仿真实验,生成Eb/No与BER的数据点。
5. 绘制理论误码性能曲线。可以使用公式计算理论误码率,然后绘制误码率与Eb/No的关系曲线。
6. 绘制仿真实验误码性能曲线。将仿真实验得到的Eb/No与BER数据点绘制成曲线。
以下是matlab代码示例:
```matlab
%% QPSK卷积码误码率性能仿真
clear all;
close all;
clc;
%% 设置参数
SNR_dB = 0:0.5:10; % 信噪比范围
M = 4; % QPSK调制
k = log2(M); % 符号比特数
n = 7; % 卷积码约束长度
K = 2; % 卷积码码率
N = 100000; % 仿真次数
EbN0 = 10.^(SNR_dB/10); % 信噪比
%% 构建仿真模型
% 生成QPSK信号
data = randi([0 M-1],N,k);
txSig = pskmod(data,M);
% 编码
trellis = poly2trellis(n,[171 133]); % 生成(2,1,7)卷积码的生成矩阵
encoded = convenc(data,trellis);
% 计算编码后的码字长度
N_encoded = length(encoded);
% 添加高斯白噪声
for i = 1:length(EbN0)
noise = sqrt(1/(2*K*EbN0(i)))*(randn(N_encoded,K)+1j*randn(N_encoded,K));
rxSig = txSig + noise;
% 解调
rxData = pskdemod(rxSig,M);
% 译码
decoded = vitdec(rxData,trellis,5*n,'trunc','hard');
% 计算误码率
BER(i) = sum(decoded~=data(:,1))/N;
end
%% 绘制误码率性能曲线
% 计算理论误码率
theoryBER = berawgn(SNR_dB,'psk',M,'nondiff');
% 绘制曲线
semilogy(SNR_dB,theoryBER,'r');
hold on;
semilogy(SNR_dB,BER,'bo-');
grid on;
xlabel('Eb/No(dB)');
ylabel('BER');
legend('理论误码率','仿真误码率');
```
运行上述代码,即可得到Eb/No与BER误码率性能关系图。
阅读全文