Open In App

Uniquely Decodable Code using MATLAB

Improve
Improve
Like Article
Like
Save
Share
Report

A code is distinct if each codeword is recognizable from every other (i.e., the planning from source messages to codewords is coordinated). A distinct code is extraordinarily decodable if each codeword is recognizable when drenched in a grouping of codewords or if the first source arrangement can be remade consummately from the encoded binary sequence.

Test for Unique Decodability:

  1. Consider two codewords A and B. A is of k bits and B is of n bits(k<n), if the first k bits of B are identical to A, then A is called a prefix of B, the remaining last n-k bits are called as the dangling suffix. Example: A = 010, B = 01001, the dangling suffix is 01.
  2. Construct a list of all the code words, examine all pair of code words to see if any codeword is a prefix of another, whenever such a pair is present add a dangling suffix to the list unless you have added the same dangling suffix to the list in a previous iteration.
  3. Keep repeating the procedure for the extended list until all codewords are compared.

Outcomes:

  • You get a dangling suffix which is a code word.
  • There is no dangling suffix present.
  • The dangling suffix is not a code word.
  • If you get point 5 as an outcome the code is not uniquely decodable.
  • In all other cases, it is uniquely decodable.

Examples:

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

Code:




% 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


Output:

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


Last Updated : 02 Sep, 2020
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads