3: 2004-06-08 (火) 09:06:40 [6] | 現: 2024-01-08 (月) 12:59:04 k-tan[7] [8] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | * tek2の技術的情報 | + | TITLE:x |
+ | * tek2の技術的情報 [#qa2a5700] | ||
-(by [[K]], 2004.06.08) | -(by [[K]], 2004.06.08) | ||
-そのうち書くと思うドキュメントの下書き | -そのうち書くと思うドキュメントの下書き | ||
Line 5: | Line 6: | ||
-ここでは展開手順をベースに書きます。圧縮のほうは、この展開手順で展開できるようなファイルを作ればいいだけですので。 | -ここでは展開手順をベースに書きます。圧縮のほうは、この展開手順で展開できるようなファイルを作ればいいだけですので。 | ||
- | * tek2圧縮 | + | * tek2圧縮 [#q76fd30d] |
-基本的に[[tek1]]とほとんど同じです。ということでここでは差異を中心に書きます。 | -基本的に[[tek1]]とほとんど同じです。ということでここでは差異を中心に書きます。 | ||
-最初に主な違いを要約すると次のとおりです。 | -最初に主な違いを要約すると次のとおりです。 | ||
--OSACMPヘッダの1バイト目が83→85に。 | --OSACMPヘッダの1バイト目が83→85に。 | ||
- | --最初のヘッダでbit1を1にして、bit2以降からいきなりtek2sのビットストリームを開始できる(この場合ブロック数は1)。 | + | --最初のヘッダでbit1を0にして、bit2以降からいきなりtek2sのビットストリームを開始できる(この場合ブロック数は1)。 |
--tek1sでのバイトストリーム開始位置算出のためのフィールドがなくなった(ビットストリームしかないため)。 | --tek1sでのバイトストリーム開始位置算出のためのフィールドがなくなった(ビットストリームしかないため)。 | ||
--無圧縮データはビットストリームに混ぜられている。 | --無圧縮データはビットストリームに混ぜられている。 | ||
Line 15: | Line 16: | ||
-ブロック数が2以上の場合は、tek1のときと同じくtek1hを利用します(つまりtek2hのようなものは存在しない)。 | -ブロック数が2以上の場合は、tek1のときと同じくtek1hを利用します(つまりtek2hのようなものは存在しない)。 | ||
- | * tek2s | + | * tek2s [#lbe8dec2] |
-ここでもtek1sとの違いを中心に書きます。 | -ここでもtek1sとの違いを中心に書きます。 | ||
-まず前述の通りtek1sで真っ先にあったs7符号はありません。いきなりビットストリームで、符号寿命Aの記述から始まるわけです。 | -まず前述の通りtek1sで真っ先にあったs7符号はありません。いきなりビットストリームで、符号寿命Aの記述から始まるわけです。 | ||
-また符号寿命Dなるものを定義して、これをやはり最初は寿命切れにしておきます。 | -また符号寿命Dなるものを定義して、これをやはり最初は寿命切れにしておきます。 | ||
-そしてbyのループで無圧縮バイトが1つ必要になったら、次の手順で無圧縮バイトを得ます(というかもはやtek2sでは無圧縮とはいいがたい気もしますが・・・まあ強いて言えばスライド辞書法的には無圧縮ということで)。 | -そしてbyのループで無圧縮バイトが1つ必要になったら、次の手順で無圧縮バイトを得ます(というかもはやtek2sでは無圧縮とはいいがたい気もしますが・・・まあ強いて言えばスライド辞書法的には無圧縮ということで)。 | ||
- | --(1)もし符号寿命Dが寿命切れだったら、tek2s専用パラメータ群とこの寿命を読み込む。 | + | --(1)もし符号寿命Eが寿命切れだったら、tek2s専用パラメータ群とこの寿命を読み込む。 |
---フォーマット的には、寿命、パラメータ群の順番 | ---フォーマット的には、寿命、パラメータ群の順番 | ||
- | --(2)符号寿命Dを1カウント進めて年をとらせる。 | + | --(2)符号寿命Eを1カウント進めて年をとらせる。 |
--(3)内部バイト番号をUC0で取得(常に0-255の範囲)。それを256バイトの「内部番号→無圧縮バイト」変換テーブルで変換。 | --(3)内部バイト番号をUC0で取得(常に0-255の範囲)。それを256バイトの「内部番号→無圧縮バイト」変換テーブルで変換。 | ||
- | -符号寿命Dのデフォルトは8192です。 | + | -符号寿命Eのデフォルトは8192です。 |
-さてtek2sパラメータについては次のような構成です。 | -さてtek2sパラメータについては次のような構成です。 | ||
--ブロックの最初でなければ、更新ビットがある。 | --ブロックの最初でなければ、更新ビットがある。 | ||
Line 44: | Line 45: | ||
-これでおしまいです。 | -これでおしまいです。 | ||
- | * このアルゴリズムについて | + | * このアルゴリズムについて [#ke519569] |
-tek2sのアルゴリズムは、UC0が小さい数字には短い符号、大きい数字には大きな符号、を割り当てる傾向に着目して、無圧縮バイト部分を頻度順に適当にソートしてその順序を内部コードとして、その内部コードをUC0で符号化すれば無圧縮部分もそれなりに圧縮できるのではないかというものです。 | -tek2sのアルゴリズムは、UC0が小さい数字には短い符号、大きい数字には大きな符号、を割り当てる傾向に着目して、無圧縮バイト部分を頻度順に適当にソートしてその順序を内部コードとして、その内部コードをUC0で符号化すれば無圧縮部分もそれなりに圧縮できるのではないかというものです。 | ||
-UC0はハフマン法に比べれば単純な符号なので圧縮率は劣りますが、それでも結構がんばっていて、tek2はLHAと結構いい勝負をします。スライド辞書法のバッファサイズを上げてやれば多くのケースで勝てるくらいの成績です。 | -UC0はハフマン法に比べれば単純な符号なので圧縮率は劣りますが、それでも結構がんばっていて、tek2はLHAと結構いい勝負をします。スライド辞書法のバッファサイズを上げてやれば多くのケースで勝てるくらいの成績です。 | ||
-またtek2sでは、いかにtek1のルーチンを流用しつつそれなりの圧縮率を得るかに、心を砕きました。おかげで、tek1にわずかに追加するだけで、tek1/tek2の両対応展開ルーチンが作れます。 | -またtek2sでは、いかにtek1のルーチンを流用しつつそれなりの圧縮率を得るかに、心を砕きました。おかげで、tek1にわずかに追加するだけで、tek1/tek2の両対応展開ルーチンが作れます。 | ||
- | * こめんと欄 | + | * こめんと欄 [#s6597a4b] |
#comment | #comment |
(This host) = http://osask.net