decoder_pc.m

来自「本源码介绍了OFDM的基本原理的仿真」· M 代码 · 共 64 行

M
64
字号
%%%%%%%%%%%% this is the program of punctured convolutional code decoder%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [decode1]=decoder(codedbit,R)
    switch R,
    case 1/3,
         trel = poly2trellis(9,[557 663 711]); 
         tcode = -2*codedbit+1;
         decode1 = vitdec(tcode,trel,40,'trunc','unquant');

     case 1/2,
         trel = poly2trellis(7,[171 133]);   % Define trellis.
         tcode = -2*codedbit+1;
         decode1 = vitdec(tcode,trel,35,'trunc','unquant');

     case 2/3,
         trel = poly2trellis(7,[171 133]);  % Define trellis.
         tcode = -2*codedbit+1;
         codedbit1=zeros(length(codedbit)*4/3,1);
         codedbit1(1:4:end)=tcode(1:3:end);
         codedbit1(2:4:end)=tcode(2:3:end);
         codedbit1(3:4:end)=tcode(3:3:end);
         decode1 = vitdec(codedbit1,trel,35,'trunc','unquant');
      
     case 3/4,
         trel = poly2trellis(7,[171 133]);  % Define trellis.
         tcode = -2*codedbit+1;
         codedbit1=zeros(length(codedbit)*3/2,1);
         codedbit1(1:3:end)=tcode(1:2:end);
         codedbit1(2:3:end)=tcode(2:2:end);
         decode1 = vitdec(codedbit1,trel,35,'trunc','unquant');
   
     case 4/5,
         trel = poly2trellis(7,[171 133]);  % Define trellis.
         tcode = -2*codedbit+1;
         codedbit1=zeros(length(codedbit)*8/5,1);
         codedbit1(1:8:end) = tcode(1:5:end); % Write actual data.
         codedbit1(3:8:end) = tcode(2:5:end);
         codedbit1(5:8:end) = tcode(3:5:end);
         codedbit1(7:8:end) = tcode(4:5:end);
         codedbit1(8:8:end) = tcode(5:5:end);
         decode1 = vitdec(codedbit1,trel,40,'trunc','unquant');
      case 4/9,
         trel = poly2trellis(9,[557 663 711]); 
         tcode = -2*codedbit+1;
         codedbit1=zeros(length(codedbit)*4/3,1);
         codedbit1(1:4:end)=tcode(1:3:end);
         codedbit1(2:4:end)=tcode(2:3:end);
         codedbit1(3:4:end)=tcode(3:3:end);
         decode1 = vitdec(codedbit1,trel,40,'trunc','unquant');
     case 15/16,
         trel = poly2trellis(7,[171 133]);  % Define trellis.
         tcode = -2*codedbit+1;
         codedbit1=zeros(length(codedbit)*15/8,1);
         codedbit1(1:15:end) = tcode(1:8:end);
         codedbit1(3:15:end) = tcode(2:8:end);
         codedbit1(5:15:end) = tcode(3:8:end);
         codedbit1(7:15:end) = tcode(4:8:end);
         codedbit1(9:15:end) = tcode(5:8:end);
         codedbit1(11:15:end) = tcode(6:8:end);
         codedbit1(13:15:end) = tcode(7:8:end);
         codedbit1(15:15:end) = tcode(8:8:end);
         decode1 = vitdec(codedbit1,trel,35,'trunc','unquant');
       otherwise,
      error('Unsupported Rate');
  end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?