Skip to content
Related Articles
Get the best out of our app
GFG App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Uniquely Decodable Code using MATLAB

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

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

My Personal Notes arrow_drop_up
Last Updated : 02 Sep, 2020
Like Article
Save Article
Similar Reads