BPSK誤碼率實驗 matlab源碼

    在信道編碼和誤碼課上,需要編一個bpsk的誤碼率的matlab程序,於是在參考了網上大神的代碼之後,有了我現在這個版本。。。

    加了一些註釋,會更好理解吧。以下正文。

  • 實驗目的

探究在不同信噪比的環境下BPSK(Binary Phase Shift Keying)二進制相移鍵控系統的誤碼率的計算,以及與實際誤碼率之間的對比。

  • 實驗過程
  1. 產生10^7個隨機碼,隨機取+1,-1。

假設發送了10^7個bit的數據,我們把這些數據作爲數據樣本進行接下來的調製和解調,以及統計誤碼率等操作。

 

  1. 產生高斯白噪聲,利用randn函數產生10^7個僞隨機數,服從高斯分佈。

randn(random normal distribution)是一種產生標準正態分佈隨機數矩陣的函數,屬於MATLAB函數。返回一個n*n的隨機項的矩陣,根據實驗的要求我們產生10^7個服從高斯分佈的僞隨機數。

 

  1. 確定由0db~10db十一種信噪比。

便於對比在不通過的信噪比下的誤碼率。準備進行調製。

圖1 BPSK調製系統原理

 

  1. 對信號進行調製,加入高斯白噪聲。

在仿真時,假設R=1,M=2,Eb=1。

同時,針對以上十一種不同信噪比的情況,我們將高斯白噪聲加入其中。由於我們需要將BPSK的標準差乘上到標準正態分佈中以得到調製後的信號,基於正態分佈的性質:

如果 https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D91/sign=770b4b4a3d7adab439d017428bd4bc17/b3119313b07eca80ea2ac1859a2397dda14483a1.jpg 且a與b是實數,那麼 https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D175/sign=3ec38e4466224f4a539977143cf69044/11385343fbf2b2111f2b7d2cc18065380cd78e4f.jpg 。

我們可以推得方差:

於是,進行化簡:

再進一步化簡,有:

得到標準差後,由性質就可以將高斯白噪聲加入調製中。

 

  1. 對收到的信號進行解調,統計誤碼數和誤碼率。

圖2 BPSK解調系統原理框圖

在AWGN信道中,BPSK信號相干的解調的理論誤碼率爲:

其中,r爲信噪比:

  1. 作圖比較實際誤碼率和理論誤碼率的曲線。

 

 

  • 實驗結果   

圖3 理論誤碼率與仿真誤碼率對比

  • 實驗程序

clc;

clear all;

% 產生10^7bit個隨機的+1,-1

N = 10000000;

for i=1:N

if rand <.5

 s(i)=-1;

else

s(i)=1;

 end

end

% 產生高斯白噪聲,randn函數產生10^7個正態分佈的僞隨機數

b=randn(1,N);

% 信噪比

EbNo=[0:1:10];

% 針對以上的情況的11種信噪比加入白噪聲

for j = 1:11

sigma(j) = power(10,(-EbNo(j)/20))/ sqrt (2);

 for i = 1:N

n(i)=sigma(j)*b(i);

y(i)=s(i)+n(i); % Si)是輸入的碼,n(i)爲噪聲

 end

 % 解碼,demo爲解碼後的結果

ER(j) = 0;

for i=1:N

 if y(i) > 0

 Demo(i) = 1;

else

Demo(i) = -1;

 end

 % 統計誤碼數,算出誤碼率,BER意爲bit error ratio,比特出錯概率,TBER意爲理論比特出錯概率,erfc爲單調增函數,計算誤碼率和信噪比的關係

if Demo(i) ~= s(i)

 ER(j) = ER(j) + 1;

 end

end

BER(j) = ER(j) / N;

TBER(j) = erfc(sqrt(power(10,EbNo(j)/10)))/2;

end

 % semilogy函數可以使用y軸的對數刻度繪製數據

figure

semilogy(EbNo,BER,'B-V',EbNo,TBER,'M-X');

grid on;

legend('仿真誤碼率曲線','理論誤碼率曲線');

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章