使用MATLAB实现:仿真双极性不归零码通过高斯白噪声信道后的误码率性能,画出误码率曲线。
时间: 2023-12-11 08:03:47 浏览: 88
基于MATLAB的BPSK调制仿真及性能分析.doc
下面是一个简单的MATLAB代码实现,演示了如何对双极性不归零码进行仿真,并计算其通过高斯白噪声信道后的误码率性能曲线。
```matlab
% 双极性不归零码(Bipolar Non-Return-to-Zero,BNRZ)信号
bits = [1 0 1 1 0 1 0 0 1 1]; % 待传输的二进制数据
Tb = 1; % 符号持续时间
t = 0:Tb/100:Tb-(Tb/100); % 符号采样时刻
n = length(bits); % 数据比特数
N = n*100; % 采样点数
signal = zeros(1,N); % 初始化信号向量
for i=1:n
if bits(i)==1
signal((i-1)*100+1:i*100) = -1;
else
signal((i-1)*100+1:i*100) = 1;
end
end
% 高斯白噪声信道
SNR_dB = 5; % 信噪比
SNR = 10^(SNR_dB/10); % 信噪比(线性值)
noise = sqrt(1/SNR)*randn(1,N); % 产生高斯白噪声
received_signal = signal + noise; % 接收信号
% 误码率性能
threshold = 0; % 判决门限
count = 0; % 错误比特数
for i=1:n
% 计算单个符号的能量
E = sum(received_signal((i-1)*100+1:i*100).^2);
% 判断是否发生误码
if E < threshold
count = count+1;
end
end
BER = count/n; % 计算误码率
% 绘制误码率性能曲线
SNR_dB = 0:1:10; % 信噪比范围
SNR = 10.^(SNR_dB/10); % 信噪比(线性值)
for i=1:length(SNR)
noise = sqrt(1/SNR(i))*randn(1,N); % 产生高斯白噪声
received_signal = signal + noise; % 接收信号
count = 0; % 错误比特数
for j=1:n
% 计算单个符号的能量
E = sum(received_signal((j-1)*100+1:j*100).^2);
% 判断是否发生误码
if E < threshold
count = count+1;
end
end
BER(i) = count/n; % 计算误码率
end
% 绘图
figure;
semilogy(SNR_dB,BER,'b.-');
axis([0 10 10^-5 0.5]);
xlabel('信噪比(dB)');
ylabel('误码率');
title('BNRZ信号通过高斯白噪声信道的误码率性能曲线');
grid on;
```
上述代码生成了一个误码率性能曲线,显示了BNRZ信号通过高斯白噪声信道的误码率随信噪比的变化情况。
阅读全文