数字通信—BPSK在Rayleigh信道下误码率仿真
1 實驗原理
在本實驗中均是假設的準靜態(tài)平坦衰落,即多徑中每個徑到達的時間差都 差不多,遠小于一個符號的碼元周期。而且信道隨時間變化比較慢,在一個時 間選擇性衰落的周期內(nèi)。這樣經(jīng)過信道的相移就可以準確估計出來,首先根據(jù) 上個實驗已知 BPSK 調(diào)制在 AWGN 信道下的誤碼率為:
[P_{e}=mathrm{Q}left(sqrt{frac{2 varepsilon_{b}}{N_{0}}}ight)
ag{1}
]
由于可以估計出相位,此時的接收信號可以用下式表示:
[r(t)=alpha s(t)+n(t)
ag{2}
]
其中 $ alpha$ 就是對信號幅度的影響,即服從瑞利分布。對于某一個特定的 (alpha),此時的接收端信噪比變成了(frac{alpha^2varepsilon_{b}}{N_0}) ,所以此時的 BPSK 誤碼率可以表示成:
[P_{e,alpha}=mathrm{Q}left(sqrt{alpha^2frac{2 varepsilon_{b}}{N_{0}}}ight)
ag{3}
]
由于 (alpha) 是個隨機變量,所以應該對 (alpha) 進行積分運算求誤碼率:
[P_{e, B P S K}=int_{0}^{infty} P_{e,alpha}cdotunderbrace{frac{alpha}{sigma^{2}} e^{-frac{alpha^{2}}{2 sigma^{2}}}}_{ ext {Rayleigh }} d alpha
ag{4}
]
最終得到BPSK在瑞利信道下的理論誤碼率公式為:
[P_{e,BPSK}=frac{1}{2}left(1-sqrt{frac{ar{gamma}_{b}}{1+ar{gamma}_{b}}}ight)
ag{5}
]
其中 (ar{gamma}_{b}) 是平均信噪比,即:
[ar{gamma}_{b}=frac{varepsilon_{b}}{N_{0}} Eleft(alpha^{2}ight)
ag{6}
]
對于BPSK誤碼率和誤比特率是一樣的
2 實驗仿真
仿真結(jié)果如下圖所示:
瑞利衰落信道即服從復高斯分布,實部和虛部是均值為0、方差為(sigma^2)的獨立同分布高斯隨機變量。注意這里的方差和后面計算平均信噪比的 (Eleft(alpha^{2}ight)) 有關(guān):(Eleft(alpha^{2}ight)=2sigma^2)。仿真的時候要前后對應上。
未估計出信道指的是對經(jīng)過瑞利信道的信號直接進行接收判決,這時候基本上誤碼率在50%,和瞎猜一樣。
3 仿真代碼
%% 初始化參數(shù)
clc
clear
close all;
M = 2;
nsymbol = 100000; %原始數(shù)據(jù)長度
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;
% =====================
% 假設已經(jīng)估計出了信道相位
% =====================
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調(diào)制信號在Rayleigh信道下的性能')
xlabel('信噪比/dB');
ylabel('誤碼率');
legend('BPSK仿真誤碼率(未估計出信道)', 'BPSK仿真誤碼率(已估計出信道)',...
'BPSK理論誤碼率', 'AWGN信道下理論誤碼率');
總結(jié)
以上是生活随笔為你收集整理的数字通信—BPSK在Rayleigh信道下误码率仿真的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神奇的x -x,Lowbit函数的实现
- 下一篇: ubuntu 网卡双网口 配置_无线网卡