SOVA implementation (3)

Source: Internet
Author: User
function L_A = sova(Ly,G,Lu,ind_dec) % Copyright: Yufei Wu, 1998, MPRG lab, Virginia Tech for academic use% This implements Soft Output Viterbi Algorithm in trace back mode % Input: Ly     : Scaled received bits Ly=0.5*L_c*y=(2*a*rate*Eb/N0)*y%        G      : Code generator for the RSC code in binary matrix form%        Lu     : Extrinsic information from the previous decoder.%        ind_dec: Index of decoder=1/2%                  (assumed to be terminated in all-zero state/open)% Output: L_A  : Log-Likelihood Ratio (soft-value) of %                   estimated message input bit u(k) at each stage, %                 ln (P(u(k)=1|y)/P(u(k)=-1|y))lu = length(Ly)/2; % Number of y=[ys yp] in Lylu1 = lu+1; Infty = 1e2;[N,L] = size(G); Ns = 2^(L-1); % Number of statesdelta = 30;  % SOVA window size%Make decision after 'delta' delay. Tracing back from (k+delta) to k,% decide bit k when received bits for bit (k+delta) are processed.  % Set up the trellis defined by G.[nout,ns,pout,ps] = trellis(G);% Initialize the path metrics to -InftyMk(1:Ns,1:lu1)=-Infty; Mk(1,1)=0; % Only initial all-0 state possible% Trace forward to compute all the path metricsfor k=1:lu   Lyk = Ly(k*2-[1 0]); k1=k+1;   for s=1:Ns  % Eq.(9.4.44), Eq.(9.4.45)      Mk0 = Lyk*pout(s,1:2).' -Lu(k)/2 +Mk(ps(s,1),k);      Mk1 = Lyk*pout(s,3:4).' +Lu(k)/2 +Mk(ps(s,2),k);      if Mk0>Mk1, Mk(s,k1)=Mk0; DM(s,k1)=Mk0-Mk1; pinput(s,k1)=0;       else       Mk(s,k1)=Mk1; DM(s,k1)=Mk1-Mk0; pinput(s,k1)=1;      end   endend% Trace back from all-zero state or the most likely state for D1/D2% to get input estimates uhat(k), and the most likely path (state) shatif ind_dec==1, shat(lu1)=1;  else [Max,shat(lu1)]=max(Mk(:,lu1));  endfor k=lu:-1:1   uhat(k)=pinput(shat(k+1),k+1); shat(k)=ps(shat(k+1),uhat(k)+1);end% As the soft-output, find the minimum DM over a competing path %  with different information bit estimate.for k=1:lu   LLR = min(Infty,DM(shat(k+1),k+1));   for i=1:delta      if k+i<lu1        u_=1-uhat(k+i); % the information bit        tmp_state = ps(shat(k+i+1),u_+1);        for j=i-1:-1:0           pu=pinput(tmp_state,k+j+1); tmp_state=ps(temp_state,pu+1);        end        if pu~=uhat(k), LLR = min(LLR,DM(shat(k+i+1),k+i+1)); end      end   end   L_A(k) = (2*uhat(k)-1)*LLR; % Eq.(9.4.46)end

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.