?? simupe_qpsk.asv
字號:
%File_C6: simuPe_Qpsk.m
function [p]=simuPe_Qpsk(snr_in_dB)
%**** 對于給定信噪比的通信系統,估計差錯概率 ****
%數據調制采用QPSK
% snr_in_dB:給定信噪比, dB為單位
%p:差錯概率控制值
%**** 參數設置部分 ****
m=10;
E=1; %信號能量歸一化
SNR=10^(snr_in_dB/10); %計算信噪比值
sgma=sqrt(E/(2*SNR)); %計算給定信噪比條件下信道加性白噪聲的標準差
s11=-j;s10=-1;s00=j;s01=1;%定義QPSK信號:4種可能的取值
N=10000;
%產生待發送的二進制比特數據流:長度為2N
signal=rand(1,2*N);
qpsk=zeros(1,N); %定義經過調制后的信號序列
%產生調制后的信號序列qpsk
for i=1:N
if signal(2*i-1)<0.5
if signal(2*i)<0.5
qpsk(i)=s00;
else qpsk(i)=s01;
end;
else
if signal(2*i)<0.5
qpsk(i)=s10;
else qpsk(i)=s11;
end;
end;
end;
%用蒙特卡羅仿真估計差錯概率
numoferr=0; %差錯計數器初始化
%傳輸N個數據符號,統計符號差錯個數
for i=1:N
%產生信道的復值加性白噪聲
n=gngauss(sgma,m)+j*gngauss(sgma,m);
%接收機接收到的信號:考慮信道的加性白噪聲
r=qpsk(i)+n;
%計算r在四種可能的qpsk信號上的投影
d11=real(r*conj(s11));
d10=real(r*conj(s10));
d00=real(r*conj(s00));
d01=real(r*conj(s01));
%判決投影最大值
d_max=max([d11 d10 d00 d01]);
%檢測判決接收到的QPSK信號
if (d_max==d11)
decis_qpsk=s11;
elseif (d_max==d10)
decis_qpsk=s10;
elseif (d_max==d00)
decis_qpsk=s00;
else
decis_qpsk=s01;
end;
%檢測器判決結果與發送器發送的qpsk信號進行比較
if(decis_qpsk~=qpsk(i))
numoferr=numoferr+i; %差錯計數器累加1
end;
end;
%計算差錯概率的估計值
p=numoferr/N;
%End of script file
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -