在信道編碼和誤碼課上,需要編一個bpsk的誤碼率的matlab程序,於是在參考了網上大神的代碼之後,有了我現在這個版本。。。
加了一些註釋,會更好理解吧。以下正文。
- 實驗目的
探究在不同信噪比的環境下BPSK(Binary Phase Shift Keying)二進制相移鍵控系統的誤碼率的計算,以及與實際誤碼率之間的對比。
- 實驗過程
- 產生10^7個隨機碼,隨機取+1,-1。
假設發送了10^7個bit的數據,我們把這些數據作爲數據樣本進行接下來的調製和解調,以及統計誤碼率等操作。
- 產生高斯白噪聲,利用randn函數產生10^7個僞隨機數,服從高斯分佈。
randn(random normal distribution)是一種產生標準正態分佈的隨機數或矩陣的函數,屬於MATLAB函數。返回一個n*n的隨機項的矩陣,根據實驗的要求我們產生10^7個服從高斯分佈的僞隨機數。
- 確定由0db~10db十一種信噪比。
便於對比在不通過的信噪比下的誤碼率。準備進行調製。
圖1 BPSK調製系統原理
- 對信號進行調製,加入高斯白噪聲。
在仿真時,假設R=1,M=2,Eb=1。
同時,針對以上十一種不同信噪比的情況,我們將高斯白噪聲加入其中。由於我們需要將BPSK的標準差乘上到標準正態分佈中以得到調製後的信號,基於正態分佈的性質:
如果 且a與b是實數,那麼 。
我們可以推得方差:
於是,進行化簡:
再進一步化簡,有:
得到標準差後,由性質就可以將高斯白噪聲加入調製中。
- 對收到的信號進行解調,統計誤碼數和誤碼率。
圖2 BPSK解調系統原理框圖
在AWGN信道中,BPSK信號相干的解調的理論誤碼率爲:
其中,r爲信噪比:
- 作圖比較實際誤碼率和理論誤碼率的曲線。
- 實驗結果
圖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); % S(i)是輸入的碼,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('仿真誤碼率曲線','理論誤碼率曲線');