# 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'} {} {'a3'} {} {'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} {} {1x4 double} {} {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'} {} {'a3'} {} {'a1'} ```
`isequal(sig,dsig)`
```ans = logical 1 ```

## References

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