Jones符号化の手順は以下のとおりです。
F'l=INT( | Fl ── N | ×H+0.5)=INT( | 40 ── 101 | ×128+0.5)=51 |
F'u=INT( | Fu ── N | ×H+0.5)=INT( | 70 ── 101 | ×128+0.5)=89 |
区間幅= | H ─── 2w+s | = | 152 ── 29 | =0.296875 |
下限= | L ─── 2w+s | = | 204 ── 29 | =0.3984375 |
上限= | L+H ─── 2w+s | = | 204+152 ──── 29 | = | 356 ── 512 | =0.6953125 |
符号値:INT( | L ── N' | )=INT( | L ── 2w | ) |
符号値:INT( | L ── N' | )=INT( | 204 ── 27 | )=INT( | 11001100 ───── 10000000 | )=01 |
L ─── 2w+s | = | 204 ── 29 | = | 0.1100110000×28 ───────── 29 | =0.0110011000 |
こうして符号化されたデータを復号するためには、元データに含まれる全ての記号の種類と出現頻度、さらにEOFの頻度とスケールファクターNの値が必要です。 しかしEOF記号の頻度とスケールファクターの値の決定法を統一しておけば、圧縮後のデータに追加するのは元データに含まれる全ての記号の種類と出現頻度だけでよいことになります。 したがって、Jones符号化ではそのぶんが圧縮後のデータのオーバーヘッドとなります。
例として、4.1節の例と同じ「abcd」というデータを符号化してみましょう。
F'l=INT( | Fl ── N | ×H+0.5)=INT( | 0 ── 101 | ×128+0.5)=0 |
F'u=INT( | Fu ── N | ×H+0.5)=INT( | 40 ── 101 | ×128+0.5)=51 |
F'l=INT( | Fl ── N | ×H+0.5)=INT( | 40 ── 101 | ×204+0.5)=81 |
F'u=INT( | Fu ── N | ×H+0.5)=INT( | 70 ── 101 | ×204+0.5)=141 |
この時の実数の符号値= | 324 ── 211 | =0.1582031(本来の値=0.1568473) |
F'l=INT( | Fl ── N | ×H+0.5)=INT( | 70 ── 101 | ×240+0.5)=166 |
F'u=INT( | Fu ── N | ×H+0.5)=INT( | 90 ── 101 | ×240+0.5)=214 |
この時の実数の符号値= | 1960 ── 213 | =0.2392578(本来の値=0.2383769) |
F'l=INT( | Fl ── N | ×H+0.5)=INT( | 90 ── 101 | ×192+0.5)=171 |
F'u=INT( | Fu ── N | ×H+0.5)=INT( | 100 ── 101 | ×192+0.5)=190 |
この時の実数の符号値= | 17048 ─── 216 | =0.2601318(本来の値=0.2591341) |
F'l=INT( | Fl ── N | ×H+0.5)=INT( | 100 ── 101 | ×152+0.5)=150 |
F'u=INT( | Fu ── N | ×H+0.5)=INT( | 101 ── 101 | ×152+0.5)=152 |
この時の実数の符号値= | 1100672 ──── 222 | =0.2624206(本来の値=0.2614176) |
符号値:INT( | L ── 2w | )=INT( | 1100672 ──── 27 | ) |
=INT( | 100001100101110000000 ──────────── 27 | )=010000110010111=8599 |
同じ記号をハフマン符号化しますと、3章の4節で説明しましたように、
a | b | c | d |
0 | 10 | 110 | 111 |
と9ビットとなり、EOFの分だけ算術符号の方が長くなります。
3章の5節のハフマン符号の例と同じ「aabbccccddddeeeeeeeeffff」を算術符号化しますと、記号だけで60ビット、EOF記号を含めますと65ビットとなり、やはりEOFの分だけ算術符号の方が長くなります。 これは記号数が少なく語句が短いため、算術符号の利点が生かされないので致し方ないことです。