Main Content

huffmandeco

ハフマン復号化による 2 値符号の復号化

説明

sig = huffmandeco(code,dict) は、入力符号ディクショナリ dict で記述されているハフマン符号を使用して数値ハフマン符号ベクトル code を復号化します。入力 dict は、N 行 2 列の cell 配列で、N は code を符号化する元の信号の識別可能なシンボル数です。dict の最初の列は識別可能なシンボルを表し、2 列目は対応するコードワードを表します。各コードワードは数値行ベクトルで表現されます。また、dict のコードワードを dict のその他のコードワードのプレフィックスにすることできません。関数 huffmandict を使用して dict を生成し、関数 huffmanenco を使用して code を生成できます。dict 内のすべてのシンボルが数値の場合、出力 sig はベクトルです。dict の信号値にアルファベットがある場合、sig は 1 次元の cell 配列です。

すべて折りたたむ

一意のシンボルを作成し、出現確率をそれらに代入します。シンボルのバイナリ表現に必要な最小ビット数を決定します。

symbols = 1:6;
p = [.5 .125 .125 .125 .0625 .0625];
bps = ceil(log2(max(symbols)));      % Bits per symbol

シンボルとその確率に基づいてハフマン ディクショナリを作成します。

dict = huffmandict(symbols,p);

ランダムなシンボルのベクトルを生成します。

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

ランダムなシンボルを符号化します。

code = huffmanenco(inputSig,dict);

データを復号化します。復号化されたシンボルが元のシンボルと一致することを確認します。

sig = huffmandeco(code,dict);
isequal(inputSig,sig)
ans = logical
   1

元の信号をバイナリに変換し、バイナリ シンボルの長さを求めます。

binarySig = int2bit(inputSig,bps);
seqLen = numel(binarySig)
seqLen = 300

ハフマン符号化したシンボルをバイナリに変換し、符号化されたバイナリ シンボルの長さを求めます。

binaryComp = int2bit(code,bps);
encodedLen = numel(binaryComp)
encodedLen = 672

cell 配列の形式で英数字シンボルを定義します。

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

ハフマン ディクショナリを定義します。信号文字の符号は数値でなければなりません。

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'}    {[    1 0]}
    {'a3'}    {[  1 1 0]}
    {[44]}    {[1 1 1 0]}
    {[55]}    {[1 1 1 1]}

英数字シンボルを符号化します。

enco = huffmanenco(inputSig,dict);

データを復号化します。復号化されたシンボルが元のシンボルと一致することを確認します。

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

isequal(inputSig,sig)
ans = logical
   1

入力引数

すべて折りたたむ

ハフマン符号。数値ベクトルとして指定します。この値は関数 huffmandict で生成される符号ディクショナリを使用して符号化されたハフマン符号でなければなりません。

データ型: double

ハフマン符号ディクショナリ。N 行 2 列の cell 配列として指定します。N は、関数によって符号化される識別可能なシンボルの数です。dict の最初の列は識別可能なシンボルを表し、2 列目は対応するコードワードを表します。各コードワードは数値行ベクトルで表現されます。また、dict のコードワードを dict のその他のコードワードのプレフィックスにすることできません。関数 huffmandict を使用することによって、dict を生成できます。

データ型: double | cell

出力引数

すべて折りたたむ

復号化された信号、数値ベクトル、数値 cell 配列、または英数字 cell 配列として返されます。

  • 入力符号ディクショナリ dict のすべてのシンボルが数値である場合、sig はベクトルです。

  • 入力符号ディクショナリ dict のシンボルにアルファベットがある場合、sig は 1 次元の cell 配列です。

参照

[1] Sayood, Khalid. Introduction to Data Compression. 2nd ed. San Francisco: Morgan Kaufmann Publishers, 2000.

バージョン履歴

R2006a より前に導入