huffmandeco

Huffman decoder

Syntax

dsig = huffmandeco(comp,dict)

Description

dsig = huffmandeco(comp,dict) decodes the numeric Huffman code vector comp using the code dictionary dict. The argument dict is an N-by-2 cell array, where N is the number of distinct possible symbols in the original signal that was encoded as comp. The first column of dict represents the distinct symbols and the second column represents the corresponding codewords. Each codeword is represented as a numeric row vector, and no codeword in dict is allowed to be the prefix of any other codeword in dict. You can generate dict using the huffmandict function and comp using the huffmanenco function. If all signal values in dict are numeric, dsig is a vector; if any signal value in dict is alphabetical, dsig is a one-dimensional cell array.

Examples

collapse all

Create unique symbols, and assign probabilities of occurrence to them.

symbols = 1:6; 
p = [.5 .125 .125 .125 .0625 .0625];

Create a Huffman dictionary based on the symbols and their probabilities.

dict = huffmandict(symbols,p);

Generate a vector of random symbols.

sig = randsrc(100,1,[symbols;p]);

Encode the random symbols.

comp = huffmanenco(sig,dict);

Decode the symbols. Verify that the decoded symbols match the original symbols.

dsig = huffmandeco(comp,dict);
isequal(sig,dsig)
ans = logical
   1

Convert the original symbols to a binary symbols, and determine the length of the binary symbols.

binarySig = de2bi(sig);
seqLen = numel(binarySig)
seqLen = 300

Convert the Huffman-encoded symbols, and determine its length.

binaryComp = de2bi(comp);
encodedLen = numel(binaryComp)
encodedLen = 224

Define the alphanumeric symbols in cell array form.

sig = {'a2',44,'a3',55,'a1'}
sig=1×5 cell array
    {'a2'}    {[44]}    {'a3'}    {[55]}    {'a1'}

Define a Huffman dictionary. Codes for signal letters must be numeric.

dict = {'a1',0; 'a2',[1,0]; 'a3',[1,1,0]; 44,[1,1,1,0]; 55,[1,1,1,1]}
dict=5×2 cell array
    {'a1'}    {[       0]}
    {'a2'}    {1x2 double}
    {'a3'}    {1x3 double}
    {[44]}    {1x4 double}
    {[55]}    {1x4 double}

Encode the alphanumeric symbols.

comp = huffmanenco(sig,dict);

Decode the symbols. Verify that the decoded symbols match the original symbols.

dsig = huffmandeco(comp,dict)
dsig=1×5 cell array
    {'a2'}    {[44]}    {'a3'}    {[55]}    {'a1'}

isequal(sig,dsig)
ans = logical
   1

References

[1] Sayood, Khalid, Introduction to Data Compression, San Francisco, Morgan Kaufmann, 2000.

Introduced before R2006a