使用MATLAB实现:仿真双极性不归零码通过高斯白噪声信道后的误码率性能,画出误码率曲线
时间: 2023-12-11 17:03:47 浏览: 57
基于BP算法对LDPC码进行译码,最后得到信噪比和误码率曲线附matlab代码+仿真结果和运行方法+仿真结果和运行方法.zip
首先,我们需要生成双极性不归零码,并添加高斯白噪声信道。这可以通过以下代码实现:
```matlab
% 生成双极性不归零码
bits = randi([0 1], 1, 10000);
bp = 0.0001; % 位周期
t = bp/10:bp/10:1000*bp;
s = zeros(1,length(t));
for i = 1:length(bits)
if bits(i) == 1
s((i-1)*10+1:i*10) = 1;
else
s((i-1)*10+1:i*10) = -1;
end
end
% 添加高斯白噪声信道
EbNo = 0:2:16; % 信噪比范围
for j = 1:length(EbNo)
snr = EbNo(j) + 10*log10(bp) - 10*log10(2); % 计算信噪比
n = sqrt(1/(2*10^(snr/10)))*randn(1,length(s)); % 生成高斯白噪声
r = s + n; % 叠加信号和噪声
% 解调
bits_r = zeros(1,length(bits));
for i = 1:length(bits)
if r((i-1)*10+1) > 0
bits_r(i) = 1;
else
bits_r(i) = 0;
end
end
% 统计误码率
err(j) = sum(bits ~= bits_r)/length(bits);
end
```
然后,我们可以画出误码率曲线:
```matlab
% 画误码率曲线
semilogy(EbNo, err);
xlabel('Eb/No (dB)');
ylabel('BER');
title('Bipolar NRZ over Gaussian Channel');
grid on;
```
完整代码如下:
```matlab
bits = randi([0 1], 1, 10000);
bp = 0.0001; % 位周期
t = bp/10:bp/10:1000*bp;
s = zeros(1,length(t));
for i = 1:length(bits)
if bits(i) == 1
s((i-1)*10+1:i*10) = 1;
else
s((i-1)*10+1:i*10) = -1;
end
end
EbNo = 0:2:16; % 信噪比范围
for j = 1:length(EbNo)
snr = EbNo(j) + 10*log10(bp) - 10*log10(2); % 计算信噪比
n = sqrt(1/(2*10^(snr/10)))*randn(1,length(s)); % 生成高斯白噪声
r = s + n; % 叠加信号和噪声
bits_r = zeros(1,length(bits));
for i = 1:length(bits)
if r((i-1)*10+1) > 0
bits_r(i) = 1;
else
bits_r(i) = 0;
end
end
err(j) = sum(bits ~= bits_r)/length(bits);
end
semilogy(EbNo, err);
xlabel('Eb/No (dB)');
ylabel('BER');
title('Bipolar NRZ over Gaussian Channel');
grid on;
```
阅读全文