使用MATLAB实现:仿真双极性不归零码通过高斯白噪声信道后的误码率性能,画出误码率曲线
时间: 2023-12-11 11:03:47 浏览: 76
以下是使用MATLAB实现双极性不归零码通过高斯白噪声信道后的误码率性能的代码。假设发送端发送的双极性不归零码为+1和-1,接收端采用匹配滤来检测信号。高斯白噪声信道的信噪比为Eb/No,其中Eb为每个比特的能量,No为噪声功率谱密度。
```matlab
% 双极性不归零码通过高斯白噪声信道后的误码率性能仿真
clc; clear; close all;
%% 参数设置
N = 10^6; % 发送比特数
EbN0dB = 0:2:12; % 信噪比范围
EbN0 = 10.^(EbN0dB/10); % 信噪比
T = 1; % 每个比特的时间长度
SNRdB = EbN0dB + 10*log10(1/T); % 信噪比转换为信噪比比特
sigma = sqrt(1./(2*EbN0)); % 噪声标准差
%% 发送双极性不归零码
s = randi([0,1],1,N); % 随机生成发送比特
s(s==0) = -1; % 0映射为-1
s_up = upsample(s,2); % 2倍上采样
s_polar = zeros(1,length(s_up));
s_polar(1) = s_up(1);
for i = 2:length(s_up)
s_polar(i) = s_up(i)*s_up(i-1); % 双极性不归零码
end
%% 通过高斯白噪声信道
r = zeros(length(sigma),length(s_polar)); % 接收信号
for i = 1:length(sigma)
n = sigma(i)*randn(1,length(s_polar)); % 添加高斯白噪声
r(i,:) = s_polar + n; % 接收信号
end
%% 检测信号
h = [1, -1]; % 匹配滤器
y = zeros(size(r)); % 匹配滤器输出
for i = 1:length(sigma)
y(i,:) = filter(h,1,r(i,:)); % 匹配滤波
end
y(y>=0) = 1; % 大于等于0判为1
y(y<0) = -1; % 小于0判为-1
%% 计算误码率
err = zeros(1,length(sigma)); % 错误比特数
for i = 1:length(sigma)
err(i) = sum(s~=y(i,1:2:end)); % 统计错误比特数
end
Pb = err/N; % 每个比特的误码率
Pe = Pb/2; % 每个码元的误码率
%% 画图
figure;
semilogy(SNRdB, Pe, 'b-o', 'LineWidth', 2);
grid on;
xlabel('信噪比(dB)');
ylabel('误码率');
title('双极性不归零码通过高斯白噪声信道后的误码率性能');
```
运行以上代码,即可得到双极性不归零码通过高斯白噪声信道后的误码率曲线。
阅读全文