?? psk.m
字號:
function [numofbiterror,numofbiterror_IQ] = PSK( snr_in_dB )
% snr_in_dB--signal to noise ratio in dB
N=10000;
[RX_I,RX_Q,data]=generate_random_data(N);
% the simulation of channel transmission
Es=1; % energy per symbol,Es=Eb
snr=10^(snr_in_dB/10);
sgma=sqrt(Es/(2*snr)); % Es=Eb
% the signal mapping
s00=[1 0];
s01=[0 1];
s11=[-1 0];
s10=[0 -1];
delta_t=2/8;
for i=1:length(RX_I)
n(1)=gngauss(sgma);
n(2)=gngauss(sgma);
if RX_I(i)==0 & RX_Q(i)==0
result(i,:)=s00+[n(1) n(2)];
elseif RX_I(i)==0 & RX_Q(i)==1
result(i,:)=s01+[n(1) n(2)];
elseif RX_I(i)==1 & RX_Q(i)==0
result(i,:)=s10+[n(1) n(2)];
else
result(i,:)=s11+[n(1) n(2)];
end;
result_new(i,1)=-(result(i,1)+result(i,2));
result_new(i,2)=-(result(i,1)-result(i,2));
% decision on the result of RX_I and RX_Q
if (result_new(i,1)>0 & result_new(i,2)>0)
deci1(i)=1;
deci2(i)=1;
elseif (result_new(i,1)<=0 & result_new(i,2)>0)
deci1(i)=0;
deci2(i)=1;
elseif (result_new(i,1)>0 & result_new(i,2)<=0)
deci1(i)=1;
deci2(i)=0;
else
deci1(i)=0;
deci2(i)=0;
end;
if (result_new(i,1)<=-1+delta_t)
result1_i(i)=0;
elseif (result_new(i,1)>-1+delta_t & result_new(i,1)<=-1+2*delta_t)
result1_i(i)=1;
elseif (result_new(i,1)>-1+2*delta_t & result_new(i,1)<=-1+3*delta_t)
result1_i(i)=2;
elseif (result_new(i,1)>-1+3*delta_t & result_new(i,1)<=-1+4*delta_t)
result1_i(i)=3;
elseif (result_new(i,1)>-1+4*delta_t & result_new(i,1)<=-1+5*delta_t)
result1_i(i)=4;
elseif (result_new(i,1)>-1+5*delta_t & result_new(i,1)<=-1+6*delta_t)
result1_i(i)=5;
elseif (result_new(i,1)>-1+6*delta_t & result_new(i,1)<=-1+7*delta_t)
result1_i(i)=6;
elseif (result_new(i,1)>-1+7*delta_t)
result1_i(i)=7;
end;
if (result_new(i,2)<=-1+delta_t)
result2_q(i)=0;
elseif (result_new(i,2)>-1+delta_t & result_new(i,2)<=-1+2*delta_t)
result2_q(i)=1;
elseif (result_new(i,2)>-1+2*delta_t & result_new(i,2)<=-1+3*delta_t)
result2_q(i)=2;
elseif (result_new(i,2)>-1+3*delta_t & result_new(i,2)<=-1+4*delta_t)
result2_q(i)=3;
elseif (result_new(i,2)>-1+4*delta_t & result_new(i,2)<=-1+5*delta_t)
result2_q(i)=4;
elseif (result_new(i,2)>-1+5*delta_t & result_new(i,2)<=-1+6*delta_t)
result2_q(i)=5;
elseif (result_new(i,2)>-1+6*delta_t & result_new(i,2)<=-1+7*delta_t)
result2_q(i)=6;
elseif (result_new(i,2)>-1+7*delta_t)
result2_q(i)=7;
end;
end;
% viterbi decoding
decode_out=viterbi(result1_i,result2_q,length(result1_i));
OK=find(decode_out(1:N)==data(1:N));
numofbiterror=N-length(OK);
OK_I=find(RX_I==deci1);
numofbiterror_I=N-length(OK_I)+8;
OK_Q=find(RX_Q==deci2);
numofbiterror_Q=N-length(OK_Q)+8;
numofbiterror_IQ=numofbiterror_I+numofbiterror_Q;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -