Código decodificable de forma única con MATLAB

Un código es distinto si cada palabra de código es reconocible entre sí (es decir, se coordina la planificación desde los mensajes fuente hasta las palabras de código). Un código distinto es extraordinariamente decodificable si cada palabra de código es reconocible cuando está empapada en un grupo de palabras de código o si la disposición de la primera fuente puede rehacerse perfectamente a partir de la secuencia binaria codificada.

Prueba de decodificación única:

  1. Considere dos palabras de código A y B. A es de k bits y B es de n bits (k<n), si los primeros k bits de B son idénticos a A, entonces A se llama un prefijo de B, los últimos nk bits restantes se llaman como el sufijo colgante. Ejemplo: A = 010, B = 01001, el sufijo colgante es 01.
  2. Construya una lista de todas las palabras de código, examine todos los pares de palabras de código para ver si alguna palabra de código es un prefijo de otra, siempre que ese par esté presente agregue un sufijo colgante a la lista a menos que haya agregado el mismo sufijo colgante a la lista en una iteración anterior.
  3. Continúe repitiendo el procedimiento para la lista extendida hasta que se comparen todas las palabras clave.

Resultados:

  • Obtiene un sufijo colgante que es una palabra clave.
  • No hay ningún sufijo colgante presente.
  • El sufijo colgante no es una palabra clave.
  • Si obtiene el punto 5 como resultado, el código no es decodificable de forma única.
  • En todos los demás casos, es decodificable de forma única.

Ejemplos:

'0, 01, 011, 0111' is an Uniquely decodable code
'0, 1, 00, 11' is not an uniquely decodable code

Código:

% Given Code
code = {'0','01','011','0111'}; 
disp(code) 
  
i = 1;
flag1 = 0;
  
% Storing the code in temp variable 
temp = code;  
  
% Create datastore
ds = {};  
  
while i < length(temp)
  j = 1;
  while j < length(temp)
    c1 = temp{i};
    c2 = temp{j};
    l1 = length(c1);
    l2 = length(c2);         
  
    % To find dangling suffix
    if l1 < l2
      if c1 == c2(1 : l1)
          
        % Extract dangling suffix after comparing codewords
        tsuffix = c2(l1 + 1 : l2);
        l = length(ds);
          
        % Append tsuffix to ds
        if l == 0
            
          % If no dangling suffix available then tsuffix 
          % is new dangling suffix  
          ds = {tsuffix}; 
        else
          k = 1;
          while k <= l
              
            % Compare new tsuffix with 'k'th dangling suffix
            flag = strcmp(tsuffix, ds{k});
            if flag ~= 1; 
              k = k + 1;
            end
          end          
          if flag == 0
            
            % Attach tsuffix to dangling suffix array
            ds = [ds {tsuffix}];
            l = length(ds);
          end
        end     
        
        % Append tsuffix to code
        lt = length(temp);
        k = 1;
        while k <= lt
          
          % Compare each extracted dangling suffix 
          % with 'k'th original codeword
          flag = strcmp(tsuffix, temp{k});  
          if flag == 1
            flag1 = 1;
            disp('Code is not Uniquely decodable');
            break;
          else
            k = k + 1;
          end
        end       
        if flag == 0
          
          % Attach extracted dangling suffix array to codeword array
          temp = {temp(:) tsuffix};
          lt = length(temp);
        end
      end
    end   
    if flag1 == 1
      break;
    end
    j = j + 1;
  end   
  if flag1 == 1
    break;
  end
  i = i + 1;
end 
  
if flag1 == 0
  disp('Code is Uniquely Decodable');
end

Producción:

'0'    '01'    '011'    '0111'
Code is Uniquely Decodable

Publicación traducida automáticamente

Artículo escrito por sourabhnaikssj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *