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

算術符号化

算術符号化は、データの圧縮法を提供し、アルファベットの数が少ないデータ ソースに適しています。算術符号の長さは、符号化されるシンボル数に対して固定されるのではなく、ソースのアルファベットから各シンボルが生成される統計的頻度に応じて異なります。ソースからの長いシーケンスに歪んだ分布があり、アルファベットの数が少ない場合、算術符号化による圧縮はハフマン符号化よりも優れています。

関数 arithenco および arithdeco は、算術符号化と復号化をサポートします。

算術符号化パラメーターの表現

算術符号化は、符号化するデータのソースに関する統計的な情報を必要とします。特に、関数 arithenco および arithdeco の入力引数 counts は、ソースのアルファベットで各シンボルが生成される頻度をリストします。ソースの一連のテスト データを検討することにより、頻度を決定することができます。アルファベット内の各シンボルの頻度が 0 以外であれば、テスト データのセットには任意のサイズを指定できます。

たとえば、典型的な 100 シンボルのテスト データにおいて、10 個の x、10 個の y、および 80 個の z を生成するソースからデータを符号化する前に、以下のように定義します。

counts = [10 10 80];

あるいは、22 個の x、23 個の y、185 個の z を含むソースで構成されるテスト データの大規模なセットの場合は、次のように定義します。

counts = [22 23 185];

算術符号の作成と復号化

3 つのシンボルをもつソースのシーケンスを符号化および復号化します。

シンボルを含むシーケンス ベクトルを {1,2,3} のセットから作成します。

seq = [3 3 1 3 3 3 3 3 2 3];

counts ベクトルを設定してテスト データの一般的な 100 シンボル セットから 1、2 および 3 をそれぞれ 10、20、70 個生成する符号化器を定義します。

counts = [10 20 70];

算術符号化器と算術復号化器の各関数を適用します。

code = arithenco(seq,counts);
dseq = arithdeco(code,counts,length(seq));

符号化器出力が元の入力シーケンスと一致することを確認します。

isequal(seq,dseq)
ans = logical
   1