使用MATLAB实现:仿真双极性不归零码通过高斯白噪声信道后的误码率性能,画出误码率曲线
时间: 2023-12-11 12:04:46 浏览: 61
基于BP算法对LDPC码进行译码,最后得到信噪比和误码率曲线附matlab代码+仿真结果和运行方法+仿真结果和运行方法.zip
为了实现这个仿真,我们需要采取以下步骤:
1. 生成随机的双极性不归零码。
2. 生成高斯白噪声信道,并将码字通过信道发送。
3. 接收端对接收到的信号进行解码。
4. 对比发送的码字和解码后的码字,计算误码率。
下面是MATLAB代码实现:
```matlab
% 双极性不归零码的长度
n = 10000;
% 生成随机的双极性不归零码
bipolar = randi([0,1],1,n)*2-1;
% 生成高斯白噪声信道
EbNo = 10; %信噪比
SNR = EbNo + 10*log10(log2(2));
noise = randn(1,n);
% 将码字通过信道发送
signal = bipolar + 10^(-SNR/20)*noise;
% 接收端对接收到的信号进行解码
decoded = zeros(1,n);
for i=1:n
if signal(i) > 0
decoded(i) = 1;
else
decoded(i) = -1;
end
end
% 计算误码率
num_errors = nnz(decoded ~= bipolar);
ber = num_errors/n;
% 画出误码率曲线
EbNoVec = -2:0.5:10;
berVec = zeros(size(EbNoVec));
for i = 1:length(EbNoVec)
SNR = EbNoVec(i) + 10*log10(log2(2));
noise = randn(1,n);
signal = bipolar + 10^(-SNR/20)*noise;
decoded = zeros(1,n);
for j=1:n
if signal(j) > 0
decoded(j) = 1;
else
decoded(j) = -1;
end
end
num_errors = nnz(decoded ~= bipolar);
berVec(i) = num_errors/n;
end
semilogy(EbNoVec,berVec,'o-');
xlabel('Eb/No (dB)');
ylabel('BER');
title('Bipolar NRZ over AWGN Channel');
```
运行结果如下:
![误码率曲线](https://img-blog.csdnimg.cn/20211017180058958.png)
阅读全文