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];

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

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 = de2bi(inputSig);
seqLen = numel(binarySig)
seqLen = 300

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

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

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'}    {1x2 double}
    {'a3'}    {1x3 double}
    {[44]}    {1x4 double}
    {[55]}    {1x4 double}

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

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 より前に導入