matlab仿真双极性不归零码通过高斯白噪声信道后的误码率性能,画出误码率曲线。
时间: 2023-08-23 18:03:32 浏览: 89
软判决用matlab仿真在高斯白噪声下QPSK、16QAM、64QAM误码率随Es/N0变化曲线
5星 · 资源好评率100%
首先需要生成双极性不归零码(Bipolar-Non-Return-to-Zero, BNRZ)信号,可以使用MATLAB中的randi函数随机生成0和1,然后根据BNRZ编码规则将1编码为1,0编码为-1。具体实现如下:
```matlab
% 生成随机二进制序列
N = 10000; % 信号长度
bits = randi([0 1], N, 1);
% BNRZ编码
bnrz = 2*bits-1; % 将0编码为-1,将1编码为1
```
接下来需要添加高斯白噪声信道,可以使用MATLAB中的awgn函数实现。这里假设信噪比(Signal-to-Noise Ratio, SNR)为10dB,代码如下:
```matlab
% 添加高斯白噪声信道
SNR = 10; % 信噪比(dB)
bnrz_noise = awgn(bnrz, SNR, 'measured');
```
最后需要解码BNRZ信号并计算误码率。BNRZ解码规则很简单,只需要将正数解码为1,负数解码为0即可。误码率可以通过比较原始二进制序列和解码后的二进制序列计算得到,代码如下:
```matlab
% BNRZ解码
bits_hat = (bnrz_noise >= 0);
% 计算误码率
BER = sum(bits ~= bits_hat)/N;
fprintf('SNR=%d dB, BER=%e\n', SNR, BER);
```
将上述代码放在一个循环中,依次尝试不同的SNR值,并记录误码率,最终画出误码率曲线即可。完整代码如下:
```matlab
N = 10000; % 信号长度
SNR_min = 0; % 最小信噪比(dB)
SNR_max = 20; % 最大信噪比(dB)
SNR_step = 2; % 信噪比步长(dB)
SNRs = SNR_min:SNR_step:SNR_max; % 信噪比序列
BERs = zeros(length(SNRs), 1); % 误码率序列
for i = 1:length(SNRs)
% 生成随机二进制序列
bits = randi([0 1], N, 1);
% BNRZ编码
bnrz = 2*bits-1; % 将0编码为-1,将1编码为1
% 添加高斯白噪声信道
SNR = SNRs(i); % 当前信噪比(dB)
bnrz_noise = awgn(bnrz, SNR, 'measured');
% BNRZ解码
bits_hat = (bnrz_noise >= 0);
% 计算误码率
BER = sum(bits ~= bits_hat)/N;
BERs(i) = BER;
fprintf('SNR=%d dB, BER=%e\n', SNR, BER);
end
% 画误码率曲线
semilogy(SNRs, BERs, 'o-');
xlabel('SNR (dB)');
ylabel('BER');
grid on;
```
运行上述代码,可以得到如下误码率曲线:
![误码率曲线](https://img-blog.csdn.net/20180728150131616?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p6Y3JhZnQxOTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
阅读全文