function [c_ err] = chDeCoding(e, l, l2)
% trellis informace o sestavení kodéru
trellis = poly2trellis(4, [13 15], 13); % Struktura koderu


load('parameters.mat');
err = [0 0 0];

index = 0;
index2 = 0;
 

if(length(l2) >= 1),
    for i = 1:length(l2),
        % rozdělení toku do bloků
        K_pi = l2(i)/3;
        wk = e(index2+1:index2 + l2(i));
        vk_0 = zeros(K_pi,1); vk_1 = zeros(K_pi,1); vk_2 = zeros(K_pi,1);
        vk_0 = wk(1:K_pi)';
        for i2 = 1:K_pi,
            vk_1(i2) = wk(K_pi +2*i2 -1);
            vk_2(i2) = wk(K_pi +2*i2);
        end
        
        % Sub-block prokladani 5.1.4.1.1 - 3GPP TS 36.212 V8.8.0 str. 15
        D = l(i)+4;   % Počet bitů v bloku
        C_TC_subblock = 32; % Počet sloupců matice
        R_TC_subblock = ceil(D/C_TC_subblock);  % Počet řádků matice, zaokrouhlený nahoru na celá čísla
        Nd = (R_TC_subblock*C_TC_subblock) - D; % Počet plnících bitů        
        P = [0 16 8 24 4 20 12 28 2 18 10 26 6 22 14 30 1 17 9 25 5 21 13 29 3 19 11 27 7 23 15 31];

        y_dk_2 = zeros(K_pi,1);
        for k = 0:(K_pi-1),
            y_dk_2(mod(P(floor(k/R_TC_subblock)+1)+ C_TC_subblock*mod(k,R_TC_subblock)+1,K_pi)+1) = vk_2(k+1);
        end
        
        yP_dk_0 = reshape(vk_0,C_TC_subblock,R_TC_subblock);
        yP_dk_1 = reshape(vk_1,C_TC_subblock,R_TC_subblock);
        
        y_dk_0 = zeros(size(yP_dk_0,1),size(yP_dk_0,2));
        y_dk_1 = zeros(size(yP_dk_1,1),size(yP_dk_1,2));
        for i3 = 1:C_TC_subblock,
            y_dk_0(P(i3)+1,:) = yP_dk_0(i3,:);
            y_dk_1(P(i3)+1,:) = yP_dk_1(i3,:);
        end
        
        dk_0 = reshape(y_dk_0',K_pi,1);dk_0 = dk_0(Nd+1:K_pi);
        dk_1 = reshape(y_dk_1',K_pi,1);dk_1 = dk_1(Nd+1:K_pi);
        dk_2 = y_dk_2;dk_2 = dk_2(Nd+1:K_pi);
        
        [c_temp i_] = InternalInterleavingTurbo(1:l(i));
            hTDec  = comm.TurboDecoder('TrellisStructure', trellis...
            , 'InterleaverIndices', i_,'NumIterations', par.NIteraci);
        encodedData = reshape([dk_0 dk_1 dk_2]',l2(i)-3*Nd,1);
        receivedBits  = step(hTDec, encodedData*2-1);
        
        
        c_(index+1:index + l(i)) = receivedBits;
        % Zvýšení indexu
        index = index + l(i);
        index2 = index2 + l2(i);
    end
else
    display('Chyba funkce chDeCoding');
end
c_ = c_';
%% Kontrola správnosti dekódování
% Nepoužívá se, zařízeno jinak
err = [-1 -1 -1];
