数字通信—BPSK在Rayleigh信道下误码率仿真
1 实验原理
在本实验中均是假设的准静态平坦衰落,即多径中每个径到达的时间差都 差不多,远小于一个符号的码元周期。而且信道随时间变化比较慢,在一个时 间选择性衰落的周期内。这样经过信道的相移就可以准确估计出来,首先根据 上个实验已知 BPSK 调制在 AWGN 信道下的误码率为:
\[P_{e}=\mathrm{Q}\left(\sqrt{\frac{2 \varepsilon_{b}}{N_{0}}}\right)
\tag{1}
\]
由于可以估计出相位,此时的接收信号可以用下式表示:
\[r(t)=\alpha s(t)+n(t)
\tag{2}
\]
其中 $ \alpha$ 就是对信号幅度的影响,即服从瑞利分布。对于某一个特定的 \(\alpha\),此时的接收端信噪比变成了\(\frac{\alpha^2\varepsilon_{b}}{N_0}\) ,所以此时的 BPSK 误码率可以表示成:
\[P_{e,\alpha}=\mathrm{Q}\left(\sqrt{\alpha^2\frac{2 \varepsilon_{b}}{N_{0}}}\right)
\tag{3}
\]
由于 \(\alpha\) 是个随机变量,所以应该对 \(\alpha\) 进行积分运算求误码率:
\[P_{e, B P S K}=\int_{0}^{\infty} P_{e,\alpha}\cdot\underbrace{\frac{\alpha}{\sigma^{2}} e^{-\frac{\alpha^{2}}{2 \sigma^{2}}}}_{\text {Rayleigh }} d \alpha
\tag{4}
\]
最终得到BPSK在瑞利信道下的理论误码率公式为:
\[P_{e,BPSK}=\frac{1}{2}\left(1-\sqrt{\frac{\bar{\gamma}_{b}}{1+\bar{\gamma}_{b}}}\right)
\tag{5}
\]
其中 \(\bar{\gamma}_{b}\) 是平均信噪比,即:
\[\bar{\gamma}_{b}=\frac{\varepsilon_{b}}{N_{0}} E\left(\alpha^{2}\right)
\tag{6}
\]
对于BPSK误码率和误比特率是一样的
2 实验仿真
仿真结果如下图所示:
- 瑞利衰落信道即服从复高斯分布,实部和虚部是均值为0、方差为\(\sigma^2\)的独立同分布高斯随机变量。注意这里的方差和后面计算平均信噪比的 \(E\left(\alpha^{2}\right)\) 有关:\(E\left(\alpha^{2}\right)=2\sigma^2\)。仿真的时候要前后对应上。
- 未估计出信道指的是对经过瑞利信道的信号直接进行接收判决,这时候基本上误码率在50%,和瞎猜一样。
3 仿真代码
%% 初始化参数
clc
clear
close all;
M = 2;
nsymbol = 100000; %原始数据长度
SNR_dB = 0:35; %信噪比dB形式
data_source = round(rand(1,nsymbol)); %生成二进制随机序列
%% 坐标点映射
data_send = (data_source - 1/2)*2;
%%
Eb = norm(data_send).^2/nsymbol; %每比特能量
snr = 10.^(SNR_dB/10);
N0 = Eb./snr;
sigma=sqrt(N0/2);
sigma_rayleigh = 1; %复高斯分布的方差,实部和虚部方差分别除以2
h=(normrnd(0,sqrt(sigma_rayleigh),...
[1 nsymbol])+i*normrnd(0,sqrt(sigma_rayleigh),[1 nsymbol]))/sqrt(2);
r = abs(h); %取幅度值
for Eb_N0 = 1:length(SNR_dB)
n=sigma(Eb_N0)*randn(1,nsymbol) + 1j*sigma(Eb_N0)*randn(1,nsymbol);
receive=data_send.*h+n; %加噪声
m1 = find(real(receive) > 0);
m2 = find(real(receive) <= 0);
redata(m1) = 1;
redata(m2) = 0;
% =====================
% 假设已经估计出了信道相位
% =====================
receive_estimated = data_send.*r+n; %「1」估计出相位后只影响幅度
%receive_estimated = receive./h; %「2」或者直接用接收信道除上CSI
m3 = find(real(receive_estimated) > 0);
m4 = find(real(receive_estimated) <= 0);
redata_estimated(m3) = 1;
redata_estimated(m4) = 0;
[total,~]=symerr(data_source,redata);
[total_estimated,~]=symerr(data_source,redata_estimated);
Pe_simu(Eb_N0) = total/nsymbol; %未估计出信道的仿真误码率
Pe_simu_estimated(Eb_N0) = total_estimated/nsymbol; %已估计出信道的仿真误码率
Pe_theory(Eb_N0) = ...
(1-sqrt(sigma_rayleigh*snr(Eb_N0)/(1+sigma_rayleigh*snr(Eb_N0))))/2; %理论误码率
Pe_theory_Awgn(Eb_N0) = qfunc(sqrt(2*snr(Eb_N0))); %高斯信道下的理论误码率
end
figure(1);
semilogy(SNR_dB,Pe_simu,'-r*',SNR_dB,Pe_simu_estimated,...
'M-X',SNR_dB,Pe_theory,'k-s',SNR_dB,Pe_theory_Awgn,'b-p');
grid on;
axis([0 35 10^-5 10^0])
title('BPSK调制信号在Rayleigh信道下的性能')
xlabel('信噪比/dB');
ylabel('误码率');
legend('BPSK仿真误码率(未估计出信道)', 'BPSK仿真误码率(已估计出信道)',...
'BPSK理论误码率', 'AWGN信道下理论误码率');