Main Content

huffmanenco

ハフマン符号化によるシンボルのシーケンスの符号化

説明

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

すべて折りたたむ

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

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

入力引数

すべて折りたたむ

圧縮する入力信号。ベクトル、cell 配列または英数字 cell 配列として指定します。sig はベクトル、cell 配列、英数字 cell 配列の形式をとることができます。sig が cell 配列の場合は、1 行 S 列または S 行 1 列の cell 配列でなければなりません。ここで、S はシンボル数です。

データ型: double | cell

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

データ型: double | cell

出力引数

すべて折りたたむ

入力ハフマン符号ディクショナリ dict の符号化された信号。ベクトルとして返されます。

参照

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

バージョン履歴

R2006a より前に導入