最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

huffmanenco

構文

comp = huffmanenco(sig,dict)

説明

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

すべて折りたたむ

一意のシンボルを作成し、出現確率をそれらに代入します。

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

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

dict = huffmandict(symbols,p);

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

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

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

comp = huffmanenco(sig,dict);

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

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

元の信号を 2 進数に変換し、その長さを求めます。

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

ハフマン符号化した信号を変換し、その長さを求めます。

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

ハフマン符号化したデータが必要としたのは 224 ビットでした。これは、符号化していないデータに比べて 25% の節約となります。

cell 配列の形式で英数字信号を定義します。

          sig = {'a2', 44, 'a3', 55, 'a1'}
sig=1×5 cell
    {'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
    {'a1'}    {[       0]}
    {'a2'}    {1x2 double}
    {'a3'}    {1x3 double}
    {[44]}    {1x4 double}
    {[55]}    {1x4 double}

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

comp = huffmanenco(sig,dict);

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

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

isequal(sig,dsig)
ans = logical
   1

参考文献

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

R2006a より前に導入