⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 psk.m

📁 viterbi译码以及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 + -