(57)【要約】【課題】ＭＱ−Ｃｏｄｅｒ方式の符号器及び復号器における再正規化に係わる処理を高速化する。【解決手段】確率推定テーブルに、Ｑｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数Ｓｈｉｆｔ＿ａ値を追加する。復号器のＬＰＳシンボル変更処理後の再正規化処理において、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値を確率推定テーブルより取得し、バイトカウンタＣＴの値が該Ｓｈｉｆｔ＿ａ値以下ならばバイト入力処理３００２を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＡ，Ｃレジスタを左ビットシフトし、該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする処理３００３を実行する。このようなループの繰り返しのない再正規化処理はソフトウェアによっても高速に実行可能である。【選択図】図２０
2007215145.tif 000002
【特許請求の範囲】
【請求項１】
ＭＱ−Ｃｏｄｅｒ方式の復号器であって、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けて保持し、
ＬＰＳシンボル変更処理後の復号時再正規化処理において、バイトカウンタＣＴの値が、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタ及びＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことを特徴とする復号器。
【請求項２】
ＭＱ−Ｃｏｄｅｒ方式の復号器であって、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けて保持し、
ＬＰＳシンボル変更処理において、コンテクストのインデックス値に対応したＱｅＬＳＰ値をＡレジスタに設定し、
ＬＰＳシンボル変更処理後の復号時再正規化処理において、バイトカウンタＣＴの値がコンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことを特徴とする復号器。
【請求項３】
ＭＱ−Ｃｏｄｅｒ方式の符号器であって、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けて保持し、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてコンテクストのインデックス値に対応したＱｅ値がＡレジスタに設定された場合には、
ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、バイトカウンタＣＴの値がコンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタ及びＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことを特徴とする符号器。
【請求項４】
ＭＱ−Ｃｏｄｅｒ方式の符号器であって、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けて保持し、
ＬＰＳ符号化処理又はＭＰＳ符号化処理において、コンテクストのインデックス値に対応したＱｅ値をＡレジスタに設定すべき条件のときにＱｅ値に代えて該インデックス値に対応したＱｅＬＰＳ値をＡレジスタに設定し、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてＡレジスタにＱｅＬＰＳ値が設定された場合には、ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、バイトカウンタＣＴの値がコンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことを特徴とする符号器。
【請求項５】
コンピュータをＭＱ−Ｃｏｄｅｒ方式の復号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けてメモリに記憶させ、
ＬＰＳシンボル変更処理を実行させた後、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出されたＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたＳｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタとＣレジスタを左ビットシフトする操作及び該読み出されたＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させることを特徴とするプログラム。
【請求項６】
コンピュータをＭＱ−Ｃｏｄｅｒ方式の復号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けてメモリに記憶させ、
ＬＰＳシンボル変更処理を実行させ、この際にコンテクストのインデックス値に対応したＱｅＬＳＰ値をメモリより読み出させてＡレジスタに設定させ、
ＬＰＳシンボル変更処理後に復号時再正規化処理を実行させ、この復号時再正規化処理において、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出されたＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたＳｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該読み出されたＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させることを特徴とするプログラム。
【請求項７】
コンピュータをＭＱ−Ｃｏｄｅｒ方式の符号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むＬＰＳ符号化処理又はＭＰＳ符号化処理を実行させ、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてコンテクストのインデックス値に対応したＱｅ値がＡレジスタに設定された場合には、ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行させた後、該読み出したＳｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタ及びＣレジスタを左ビットシフトする操作及び該読み出したＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させることを特徴とするプログラム。
【請求項８】
コンピュータをＭＱ−Ｃｏｄｅｒ方式の符号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むＬＰＳ符号化処理又はＭＰＳ符号化処理を実行させ、
ＬＰＳ符号化処理又はＭＰＳ符号化処理において、コンテクストのインデックス値に対応したＱｅ値をＡレジスタに設定すべき条件のときにＱｅ値に代えて該インデックス値に対応したＱｅＬＰＳ値をメモリより読み出させてＡレジスタに設定させ、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてＡレジスタにＱｅＬＰＳ値が設定された場合には、ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行させ、その後に、該読み出されたＳｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該読み出されたＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させることを特徴とするプログラム。
【請求項９】
請求項５，６，７又は８に記載のプログラムが記録されたことを特徴とするコンピュータが読み取り可能な情報記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＭＱ−Ｃｏｄｅｒ方式の符号器及び復号器に係り、特に、かかる符号器及び復号器における再正規化に係わる処理の高速化に関する。
【背景技術】
【０００２】
算術符号化方式の一種であるＭＱ−Ｃｏｄｅｒは、例えばＪＰＥＧ２０００におけるエントロピー符号化に採用されている（例えば［非特許文献１］参照）。
【０００３】
ＭＱ−Ｃｏｄｅｒにおいては、確率区間分割のための乗算を不要にし、かつ、有限長のレジスタを用いて高い演算精度を得られるようにするため、確率区間幅を０．７５以上、１．５未満の範囲内に維持する再正規化（Renormalization）処理が行われる。
【０００４】
詳細は後述するが、この再正規化処理は、確率区間幅を保持するためのＡレジスタや符号生成用のＣレジスタを１ビットずつ左ビットシフトさせ、ＡレジスタのＬＳＢから数えて１６ビット目が”１”であるか確認する処理を繰り返すループを形成し、このループをＡレジスタの１６ビット目が”１”になるまで、すなわちＡレジスタの値が１６進数”０ｘ８０００”（十進数０．７５）以上になるまで繰り返す処理であったため、処理に時間がかかった。特に、ソフトウェアによりＭＱ−Ｃｏｄｅｒ方式の符号器又は復号器を実現する場合、ループ制御のオーバーヘッドが大きいため再正規化処理の高速化が難しい。
【０００５】
このような再正規化処理の高速化に関する従来技術の例が特許文献１に記載されている。この従来技術においては、再正規化処理のループの入り口で、Ａレジスタの各ビット値をＭＳＢ側から走査して最初に１が検出したビット位置によって再正規化に必要なＡレジスタの左ビットシフト回数を求める処理を行い、その回数分だけＡレジスタ及びＣレジスタの左ビットシフトを一気に行う。
【０００６】
【特許文献１】特許第３６２０５０６号公報
【非特許文献１】野水泰之，”次世代画像符号化方式  ＪＰＥＧ２０００”，        ２００１年２月１３日，株式会社トリケップス
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、上記特許文献１に記載の従来技術では、依然として再正規化のためのループの繰り返しが残るため、ソフトウェアによりＭＱ−Ｃｏｄｅｒ方式の符号器又は復号器を実現する場合に再正規化処理が高速化の大きなネックとなっていた。
【０００８】
よって、本発明の目的は、ソフトウェアによりＭＱ−Ｃｏｄｅｒ方式の符号器及び復号器を実現する場合においても、再正規化に係わる処理の大幅な高速化を可能にすることにある。
【課題を解決するための手段】
【０００９】
請求項１記載の発明は、ＭＱ−Ｃｏｄｅｒ方式の復号器であって、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けて保持し、
ＬＰＳシンボル変更処理後の復号時再正規化処理において、バイトカウンタＣＴの値が、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタ及びＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことを特徴とする復号器である。
【００１０】
請求項２記載の発明は、ＭＱ−Ｃｏｄｅｒ方式の復号器であって、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けて保持し、
ＬＰＳシンボル変更処理において、コンテクストのインデックス値に対応したＱｅＬＳＰ値をＡレジスタに設定し、
ＬＰＳシンボル変更処理後の復号時再正規化処理において、バイトカウンタＣＴの値がコンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことを特徴とする復号器である。
【００１１】
請求項３の発明は、ＭＱ−Ｃｏｄｅｒ方式の符号器であって、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けて保持し、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてコンテクストのインデックス値に対応したＱｅ値がＡレジスタに設定された場合には、
ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、バイトカウンタＣＴの値がコンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタ及びＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことを特徴とする符号器である。
【００１２】
請求項４記載の発明は、ＭＱ−Ｃｏｄｅｒ方式の符号器であって、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けて保持し、
ＬＰＳ符号化処理又はＭＰＳ符号化処理において、コンテクストのインデックス値に対応したＱｅ値をＡレジスタに設定すべき条件のときにＱｅ値に代えて該インデックス値に対応したＱｅＬＰＳ値をＡレジスタに設定し、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてＡレジスタにＱｅＬＰＳ値が設定された場合には、ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、バイトカウンタＣＴの値がコンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことを特徴とする符号器である。
【００１３】
請求項５記載の発明は、コンピュータをＭＱ−Ｃｏｄｅｒ方式の復号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けてメモリに記憶させ、
ＬＰＳシンボル変更処理を実行させた後、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出されたＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたＳｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタとＣレジスタを左ビットシフトする操作及び該読み出されたＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させる、ことを特徴とするプログラムである。
【００１４】
請求項６記載の発明は、コンピュータをＭＱ−Ｃｏｄｅｒ方式の復号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けてメモリに記憶させ、
ＬＰＳシンボル変更処理を実行させ、この際にコンテクストのインデックス値に対応したＱｅＬＳＰ値をメモリより読み出させてＡレジスタに設定させ、
ＬＰＳシンボル変更処理後に復号時再正規化処理を実行させ、この復号時再正規化処理において、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出されたＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたＳｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該読み出されたＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させる、
ことを特徴とするプログラムである。
【００１５】
請求項７記載の発明は、コンピュータをＭＱ−Ｃｏｄｅｒ方式の符号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むＬＰＳ符号化処理又はＭＰＳ符号化処理を実行させ、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてコンテクストのインデックス値に対応したＱｅ値がＡレジスタに設定された場合には、ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行させた後、該読み出したＳｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタ及びＣレジスタを左ビットシフトする操作及び該読み出したＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させる、ことを特徴とするプログラムである。
【００１６】
請求項８記載の発明は、コンピュータをＭＱ−Ｃｏｄｅｒ方式の符号器として動作させるプログラムであって、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むＬＰＳ符号化処理又はＭＰＳ符号化処理を実行させ、
ＬＰＳ符号化処理又はＭＰＳ符号化処理において、コンテクストのインデックス値に対応したＱｅ値をＡレジスタに設定すべき条件のときにＱｅ値に代えて該インデックス値に対応したＱｅＬＰＳ値をメモリより読み出させてＡレジスタに設定させ、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてＡレジスタにＱｅＬＰＳ値が設定された場合には、ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行させ、その後に、該読み出されたＳｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該読み出されたＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させる、ことを特徴とするプログラムである。
【００１７】
請求項９記載の発明は、請求項５，６，７又は８に記載の発明に係るプログラムが記録されたことを特徴とするコンピュータが読み取り可能な情報記録媒体である。
【発明の効果】
【００１８】
請求項１，２記載の発明は、ＬＰＳシンボル変更後の再正規化に係わる繰り返しループ処理を排除することにより復号器の高速化に大きく寄与するものである。また、請求項３，４記載の発明は、ＬＰＳ符号化処理及びＭＰＳ符号化処理においてＡレジスタへの設定操作が行われる場合に再正規化に係わる繰り返しループ処理を排除することにより符号器の高速化に大きく寄与するものである。請求項５，６，７，８記載の発明に係るプログラム又は請求項９記載の発明に係る情報記録媒体に記録されたプログラムをコンピュータにロードし実行させることにより、コンピュータを請求項１，２，３，４記載の発明に係る高速な復号器又は符号器として動作させることが可能になる、等々の効果を得られる。
【発明を実施するための最良の形態】
【００１９】
まず、ＭＱ−Ｃｏｄｅｒ方式の符号器及び復号器の構成について、本発明の理解に必要な限度で説明する。説明の便宜上、符号器及び復号器の構成を処理アルゴリズムの観点から説明するが、参照する各フローチャート中の各処理を符号器及び復号器の構成手段の機能と読み替え得ることは当然である。
【００２０】
［ＭＱ−Ｃｏｄｅｒ方式の符号器の概要］
図１は符号器のデータ入出力を示す。図示のように、符号器に符号化の対象である２値シンボル（Ｄ）と、該シンボルに関するコンテクスト（ＣＸ）が入力し、符号器より符号が出力される。
【００２１】
図２に符号器におけるＡレジスタとＣレジスタの構成を示す。ＡレジスタもＣレジスタも１６ビットの有効長を持つが、再正規化が生じた場合のＣレジスタのオーバーフローを避けるため２８ビット表現が用いられる。Ａレジスタ内の”ａ”ビットは現在の確率区間幅の値を表す。Ｃレジスタ内の”ｘ”ビットは符号レジスタであり、”ｓ”ビットはキャリーオーバーに対処するためのスペーサビット、”ｂ”ビットは完成した出力バイトをＣレジスタから除去するビット位置、”ｃ”はキャリービットを示す。
【００２２】
ＭＱ−Ｃｏｄｅｒでは、符号化時のシンボルの０と１の発生を実際に調べて確率推定を決定するのではなく、図３に示す確率推定テーブルのルックアップにより確率推定の決定を行う。この確率推定テーブルは、インデックス値、Ｑｅ値、ＮＭＰＳ、ＮＬＰＳ、ＳＷＩＴＣＨが格納されている。Ｑｅ値はＬＰＳの発生確率、ＮＭＰＳはＭＰＳ時に再正規化が起きた場合の次のインデックス値、ＮＬＰＳはＬＰＳ時に再正規化が起きた場合の次のインデックス値、ＳＷＩＴＣＨはＭＰＳ，ＬＰＳシンボルの逆転スイッチである。
【００２３】
図４に符号器の全体的な処理フローを示す。最初に符号器の初期化処理１０００が実行される。次に、１ビットのシンボル（Ｄ）とコンテクスト（ＣＸ）の取り込み処理１００１、当該シンボルに関する符号化処理１００２が繰り返される。最後のシンボルまで処理されると、終端処理であるＦＬＵＳＨ処理１００３が実行される。換言すれば、符号器は上記各処理に対応した処理手段からなり、そして、それら各手段は後述するような内部処理のための手段から構成される。
【００２４】
なお、コンピュータ上で符号器を実現する場合、以上の各処理１０００，１００２，１００４及び繰り返し制御処理１００３をコンピュータに実行させるためのプログラム、換言すれば、各処理に対応した手段としてコンピュータを機能させるためのプログラムがコンピュータにロードされることになる。また、処理実行に関連したＡ，Ｃレジスタ、その他のレジスタ、カウンタ、バイトバッファ、ポインタ等としてコンピュータの汎用レジスタ又はメモリが利用される。
【００２５】
図５は初期化処理１０００の内容を説明するためのフローチャートである。なお、図５に示されていないが、各コンテクスト（ＣＸ）に対するインデックス値（Ｉ（ＣＸ）と表記する）及びＭＰＳシンボル（ＭＰＳ（ＣＸ）と表記する）が、図６に示すようなデフォルト値に設定される。
【００２６】
まず、Ａレジスタに初期値”０ｘ８００”（十進数の０．７５）を設定し、Ｃレジスタに下限値０を設定し、バイトバッファのポインタＢＰをその開始位置ＢＰＳＴより１だけ小さい値に設定し、バイトカウンタＣＴの値を１２に設定する処理１１０１を実行する。次に、バイトバッファのＢＰの示す位置のバイトデータＢが”０ｘＦＦ”であるか判定する処理１１０２を行い、Ｂ＝”０ｘＦＦ”ならばバイトカウンタＣＴの値を１３に設定する処理１１０３を行う。
【００２７】
図７は符号化処理１００２の内容を説明するためのフローチャートである。まず、入力したシンボルＤが”０”であるか判定する処理１２０１を実行し、判定結果がＮｏならば現在のコンテクストＣＸに対するＭＰＳ（ＣＸ）が”１”であるか判定する処理１２０２を行う。処理１２０２の判定結果がＮｏならばＬＰＳ符号化処理１２０４を、判定結果がＹｅｓならばＭＰＳ符号化処理１２０５を実行する。処理１２０１の判定結果がＹｅｓの場合、ＭＰＳ（ＣＸ）が”０”であるか判定する処理１２０３を行い、その判定結果がＮｏならばＬＰＳ符号化処理１２０６を、判定結果がＹｅｓならばＭＰＳ符号化処理１２０７を実行する。ただし、ＬＰＳ符号化処理１２０４と同１２０６は同一の処理であり、また、ＭＰＳ符号化処理１２０５と同１２０７は同一の処理である。
【００２８】
図８はＬＰＳ符号化処理１２０４，１２０６の内容を説明するためのフローチャートである。まず現コンテクストＣＸのインデックス値Ｉ（ＣＸ）に対応したＱｅ値（これをＱｅ｛Ｉ（ＣＸ）｝と表す）を図３の確率推定テーブルより取得し、Ａレジスタの現在の値から該Ｑｅ値を減算した値をＡレジスタに設定する処理１３０１を行う。つまり、確率区間を現在のＬＰＳの確率推定であるＱｅ｛Ｉ（ＣＸ）｝を用いて分割する。そして、Ａレジスタの値がＱｅ｛Ｉ（ＣＸ）｝より小さいか判定する処理１３０２を行う。つまり、分割後のＭＰＳ副区間がＬＰＳ副区間より小さいかの判定を行う。その判定結果がＮｏならば、つまりＭＰＳ副区間がＬＰＳ副区間以上ならばＡレジスタにＱｅ｛Ｉ（ＣＸ）｝の値を設定する処理１３０３を行うが、判定結果がＹｅｓならば、つまりＬＰＳ副区間がＭＰＳ副区間より大きいならば、Ｃレジスタの現在の値にＱｅ｛Ｉ（ＣＸ）｝を加算した値をＣレジスタに設定する処理１３０４を行う。
【００２９】
次に、インデックス値Ｉ（ＣＸ）に対応したＳＷＩＴＣＨを確率推定テーブルより読み出し、それが”１”であるか判定する処理１３０５を行い、判定結果がＹｅｓならばＭＰＳ（ＣＸ）を反転する処理１３０６を行う。次に、インデックス値Ｉ（ＣＸ）に対応したＮＬＰＳ（これをＮＬＰＳ｛Ｉ（ＣＸ）｝と表す）を読み出し、これを現在のコンテクストＣＸに対する新しいインデックス値Ｉ（ＣＸ）に設定する処理１３０７を行い、次に符号化時再正規化処理１３０８を実行する。このようにＬＰＳ符号化処理では常に再正規化処理が行われる。
【００３０】
図９はＭＰＳ符号化処理１２０５，１２０７の内容を説明するためのフローチャートである。まず、確率推定テーブルよりＱｅ｛Ｉ（ＣＸ）｝を取得し、これをＡレジスタの値から減算した値をＡレジスタに設定する処理１４０１を行う。つぎにＡレジスタの値が”０ｘ８０００”（十進数０．７５）より小さいか判定する処理１４０２が行われる。具体的には、Ａレジスタの値と”０ｘ８０００”との論理積がとられ、その結果が”０”であるか判定する。Ａレジスタの値（確率区間）が０．７５より小さい場合にはＡレジスタのＬＳＢから数えて１６ビット目が必ず”０”であるため、上記論理積の結果は”０”になる。
【００３１】
処理１４０２の判定結果がＮｏならば、Ｃレジスタの値にＱｅ｛Ｉ（ＣＸ）｝を加算した値をＣレジスタに設定する処理１４０３を行う。再正規化処理は不要である。
【００３２】
処理１４０２の判定結果がＹｅｓならば、レジスタＡの値とＱｅ｛Ｉ（ＣＸ）｝の比較判定の処理１４０４を行い、Ａレジスタの値がＱｅ｛Ｉ（ＣＸ）｝より小さいときにはＱｅ｛Ｉ（ＣＸ）｝を新しい確率区間としてＡレジスタに設定する処理１４０６を行い、そうでなければＣレジスタの値からＱｅ｛Ｉ（ＣＸ）｝を減算した値をＣレジスタに設定する処理１４０５を行う。次に、インデックス値Ｉ（ＣＸ）に対応した次のインデックス値ＮＭＰＳ（ＮＭＰＳ｛Ｉ（Ｘ）｝と表す）を確率推定テーブルより取得し、これを現在のコンテクストＣＸに対する新しいインデックス値Ｉ（ＣＸ）とする処理１４０７を行い、最後に符号化時再正規化処理１４０８を実行する。なお、この符号化時再正規化処理１４０８と図８中の符号化時再正規化処理１３０８は同一の処理である。
【００３３】
図１０は符号化時再正規化処理１３０８，１４０８の内容を説明するためのフローチャートである。まず、ＡレジスタとＣレジスタを１ビットだけ左シフトし、バイトカウンタＣＴを１だけデクリメントする処理１５０１を実行する。次に、バイトカウンタＣＴの値が０であるか判定する処理１５０２を行い、その判定結果がＹｅｓならはバイト出力処理１５０３を行ってから、Ａレジスタの値が”０ｘ８０００”未満であるか判定する処理１５０４を行う。この判定結果がＹｅｓならば処理１５０１からのループが繰り返される。このループはＡレジスタの値が”０ｘ８０００”以上になると終了する。
【００３４】
なお、図１０中のバイト出力処理１５０３と図４中のＦＬＵＳＨ処理１００４の内容については、本発明の理解に必要とされないため説明を省略する。
【００３５】
［ＭＱ−Ｃｏｄｅｒ方式の復号器の概要］
図１１は復号器のデータ入出力を示す。図示のように、復号器に符号とコンテキスト（ＣＸ）が入力し、復号器より再生された２値シンボル（Ｄ）が出力される。
【００３６】
図１２に復号器におけるＡレジスタとＣレジスタの構成を示す。ＣレジスタはＣｈｉｇｈレジスタとＣｌｏｗレジスタに分割されているが、符号の読み込み時や再正規化時等にはＣｌｏｗレジスタとＣｈｉｇｈレジスタを結合した３２ビット構成のＣレジスタとして扱われる。復号時の比較処理にはＣｈｉｇｈレジスタのみ利用される。また、復号器においても、確率推定に図３に示した確率推定テーブルが利用される。
【００３７】
図１３に復号器の全体的処理フローを示す。最初に復号器の初期化処理２０００が実行される。次にコンテクストＣＸの読み込み処理２００１と復号処理２００２が、復号終了の判定処理２００３で終了と判定されまで繰り返し実行される。換言すれば、復号器は上記各処理に対応した処理手段からなり、そして、それら各手段は後述するような内部処理のための手段から構成される。
【００３８】
なお、コンピュータ上で復号器を実現する場合、以上の各処理２０００，２００１，２００２，２００３をコンピュータで実行させるためのプログラム、あるいは、各処理に対応した手段としてコンピュータを機能させるプログラムがコンピュータにロードされることになる。処理実行に関連したＡ，Ｃレジスタ、その他のレジスタ、カウンタ、バイトバッファ、ポインタ等としてコンピュータの汎用レジスタ又はメモリが利用される。
【００３９】
図１４は初期化処理２０００の内容を説明するためのフローチャートである。なお、図１３に示されていないが、符号器の場合と同様に、各コンテクスト（ＣＸ）に対するインデックス値（Ｉ（ＣＸ）と表記）とＭＰＳシンボル（ＭＰＳ（ＣＸ）と表記）が図６に示すようなデフォルト値に設定される。
【００４０】
まず、バイトバッファのポインタＢＰをバイトバッファの開始位置ＢＰＳＴに設定し、バイトバッファのＢＰで示される位置のバイトデータＢ（符号の最初のバイト）をＣｈｉｇｈレジスタの下位バイトにセットする処理２１０１を行う。次にバイト入力処理２１０２を実行するが、この処理内容は本発明の理解に必要でないため説明を省略する。次に、Ｃレジスタを７ビット左シフトし、バイトカウンタＣＴの値を７だけ減らし、Ａレジスタに初期値”０ｘ８０００”（十進数０．７５）を設定する処理２１０３を行う。
【００４１】
図１５は復号処理２００２の内容を説明するためのフローチャートである。まず、現在のコンテクストＣＸに対するインデックス値Ｉ（ＣＸ）に対応したＱｅ値であるＱｅ｛Ｉ（ＣＸ）｝を図３の確率推定テーブルから取得し、この値をＡレジスタの値から減算した結果をＡレジスタに設定する処理２２０１を行う。つまり、ＭＰＳ副区間を計算するわけである。次に、Ｃｈｉｇｈレジスタの値がＱｅ｛Ｉ８ＣＸ）｝より小さいか判定する処理２２０２を行い、その判定結果がＹｅｓならばＬＰＳシンボル変更処理２２０３を実行し、続き異復号時再正規化処理２２０４を実行する。
【００４２】
処理２２０２の判定結果がＮｏの場合、Ｃｈｉｇｈレジスタの値からＱｅ｛Ｉ（ＣＸ）｝を減算した結果をＣｈｉｇｈレジスタに設定する処理２２０５を行い、Ａレジスタの値が”０ｘ８０００”より小さいか判定する処理２２０６を行う。その判定結果がＮｏならば、現在のコンテクストＣＸのＭＰＳシンボルであるＭＰＳ（ＣＸ）を再生シンボルＤとして出力する処理２２０７を行う。処理２２０６の判定結果がＹｅｓの場合、ＭＰＳシンボル変更処理２２０８を実行し、続いて復号時再正規化処理２２０９を実行する。この復号時再正規化処理２２０９は復号時再正規化処理２２０４と同一処理である。
【００４３】
図１６はＬＰＳシンボル変更処理２２０３の内容を説明するためのフローチャートである。まず、Ａレジスタの値がＱｅ｛Ｉ（ＣＸ）｝より小さいか判定する処理２３０１を行う。この判定結果がＹｅｓならば、現コンテクストについてのＭＰＳ／ＬＰＳシンボルの交換は不要であるので処理２３０２を行う。この処理では、Ａレジスタに確率推定テーブルより取得したＱｅ｛Ｉ（ＣＸ）｝を設定し、現コンテクストのＭＰＳシンボルであるＭＰＳ（ＣＸ）を再生シンボルＤとして出力する。また、インデックス値Ｉ（ＣＸ）に対応したＮＭＰＳ｛（ＣＸ）｝を確率推定テーブルより取得し、これを現コンテクストに対する新しいインデックス値Ｉ（ＣＸ）とする。
【００４４】
処理２３０１の判定結果がＮｏの場合、確率推定テーブルよりＱｅ｛Ｉ（ＣＸ）｝を取得し、これをＡレジスタに設定し、現コンテクストのＭＰＳシンボルであるＭＰＳ（ＣＸ）を反転したシンボルを再生シンボルＤとして出力する処理２３０３を行う。次に、確率推定テーブルよりＳＷＩＴＣＨ｛Ｉ（ＣＸ）｝を取得し、それが”１”であるか判定する処理２３０４を行う。その判定結果がＹｅｓならば現コンテクストのＭＰＳシンボルを反転する処理２３０５をおこなった後、確率推定テーブルより現コンテクストＣＸのインデックス値Ｉ（ＣＸ）に対応したＮＬＰＳ｛Ｉ（ＣＸ）｝を取得し、これを現コンテクストの新しいインデックス値Ｉ（ＣＸ）とする処理２３０６を行う。
【００４５】
図１７はＭＰＳシンボル変更処理２２０８の内容を説明するためのフローチャートである。まず、Ａレジスタの値がＱｅ｛Ｉ（ＣＸ）｝より小さいか判定する処理２４０１を行う。この判定結果がＮｏならば、現コンテクストについてのＭＰＳ／ＬＰＳシンボルの交換は不要であるので処理２４０２を行う。この処理では、現コンテクストのＭＰＳシンボルであるＭＰＳ（ＣＸ）を再生シンボルＤとして出力する。また、インデックス値Ｉ（ＣＸ）に対応したＮＭＰＳ｛（ＣＸ）｝を確率推定テーブルより取得し、これを現コンテクストに対する新しいインデックス値Ｉ（ＣＸ）とする。
【００４６】
処理２４０１の判定結果がＹｅｓの場合、現コンテクストのＭＰＳシンボルであるＭＰＳ（ＣＸ）を反転したシンボルを再生シンボルＤとして出力する処理２４０３を行う。次に、確率推定テーブルよりＳＷＩＴＣＨ｛Ｉ（ＣＸ）｝を取得し、それが”１”であるか判定する処理２４０４を行う。その判定結果がＹｅｓならば現コンテクストのＭＰＳシンボルを反転する処理２４０５をおこなった後、確率推定テーブルより現コンテクストＣＸのインデックス値Ｉ（ＣＸ）に対応したＮＬＰＳ｛Ｉ（ＣＸ）｝を取得し、これを現コンテクストの新しいインデックス値Ｉ（ＣＸ）とする処理２４０６を行う。
【００４７】
図１８は復号時再正規化処理２２０４，２２０９の内容を説明するためのフローチャートである。まず、バイトカウンタＣＴの値が０であるか判定する処理２５０４を行い、その判定結果がＹｅｓならばバイト入力処理２５０５を行う。なお、このバイト入力処理２５０５は図１４中のバイト入力処理２１０２は同一処理である。次にＡレジスタＡ及びＣレジスタを１ビット左シフトし、バイトカウンタＣＴを１だけデクリメントする処理２５０６を行い、Ａレジスタの値が”０ｘ８０００”より小さいか判定する処理２５０７を行う。この判定結果がＹｅｓならば処理２５０４からのループを繰り返す。このループは、Ａレジスタの値が”０ｘ８０００”以上になったときに終了する。
【００４８】
次に、本発明の符号器及び復号器について、以上に説明した符号器及び復号器（従来の符号器及び復号器と呼ぶ）との相違点を中心に説明する。なお、便宜上、符号器及び復号器の構成を処理アルゴリズムの観点から説明するが、その際に参照する各フローチャート中の各処理は符号器及び復号器の構成手段の機能と読み替えることが可能であることは当然である。
【００４９】
［第１の実施形態］
本発明の第１の実施形態に係る復号器について説明する。本復号器のデータ入出力は図１１に示す通りである。本復号器におけるＣレジスタ及びＡレジスタの構成は図１２に示す通りである。また、本復号器の全体的な処理フローもしくは全体的構成は図１３のように表すことができる。ただし、後述するように、復号処理（復号処理手段）２００２の処理内容もしくは内部構成は従来の復号器と一部異なる。
【００５０】
本復号器においても、従来の復号器と同様に、確率推定に確率推定テーブルを利用する。ただし、本復号器では、図３に示した確率推定テーブルに、各インデックス値に対応付けたＳｈｉｆｔ＿ａ値を追加した図１９に示すような確率推定テーブルが用いられる。なお、Ｓｈｉｆｔ＿ａ値とインデックス値との組を確率推定テーブルとは別に用意するようにしてもよく、かかる態様も本実施形態に包含される。Ｓｈｉｆｔ＿ａ値は、対応したＱｅ値を左ビットシフトにより”０ｘ８０００”（０．７５）以上の値にするために必要な最小シフト回数である。
【００５１】
本復号器の復号処理２００２の処理フローは図１５のように表されるが、ＬＰＳシンボル変更処理２２０３の後の復号時再正規化処理２２０４の内容が従来の復号器と異なる。ＭＰＳシンボル変更処理２２０８の後の復号時再正規化処理２２０９の内容は従来の復号器と同じである。
【００５２】
図２０は本復号器における復号時再正規化処理２２０４の内容を説明するためのフローチャートである。まず、図１９の確率推定テーブルより現コンテクストＣＸのインデックス値Ｉ（ＣＸ）に対応したＳｈｉｆｔ＿ａ値（これをＳｈｉｆｔ＿ａ（Ｉ（ＣＸ））と表記する）を取得し、バイトカウンタＣＴの値がＳｈｉｔ＿ａ（Ｉ（ＣＸ））以下であるか判定する処理３００１を行い、判定結果がＹｅｓならばバイト入力処理３００２を行う。このバイト入力処理３００２は図１８のバイト入力処理２５０５と同一処理である。次に、Ａレジスタ及びＣレジスタをＳｈｉｆｔ＿ａ（Ｉ（ＣＸ））ビット分左シフトし、バイトカウンタＣＴをＳｈｉｆｔ＿ａ（Ｉ（ＣＸ））分デクリメントする処理３００３を実行する。
【００５３】
ＬＰＳシンボル変更処理２２０３（図１６）において、処理２３０２又は処理２３０３でＡレジスタに確率推定テーブルより取得されたＱｅ｛Ｉ（ＣＸ）｝が設定され、この値は変更されないため、図２０に示す処理によって再正規化を行うことができる。
【００５４】
このように、本復号器においては、復号時再正規化処理２２０４はループの繰り返しが全くないため、ソフトウェアによって本復号器を実現する場合に復号時再正規化処理２２０４を大幅に高速化することができる。
【００５５】
なお、ＭＰＳシンボル変更処理２２０８では図１７に示すようにＡレジスタの値を予め特定できないため、その後の復号時再正規化処理２２０９は従来の復号器と同様に図１８に示したループの繰り返し処理によって行われる。
【００５６】
以上の説明から理解されるように、従来の復号器と比較するならば、本復号器は、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けて保持し、
ＬＰＳシンボル変更処理後の復号時再正規化処理において、バイトカウンタＣＴの値が、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタ及びＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことに特徴がある。
【００５７】
コンピュータを本復号器として動作させることも容易である。コンピュータを従来の復号器として動作させるためのプログラムに比較すると、コンピュータを本復号器として動作させるためのプログラムは、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けてメモリに記憶させ、
ＬＰＳシンボル変更処理を実行させた後、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出されたＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたＳｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタとＣレジスタを左ビットシフトする操作及び該読み出されたＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させることに特徴がある。
【００５８】
［第２の実施形態］
本発明の第２の実施形態に係る復号器について説明する。本復号器のデータ入出力は図１１に示す通りである。本復号器のＣレジスタ及びＡレジスタの構成は図１２に示す通りである。また、本復号器の全体的な処理フロー（全体的構成）は図１３のように表すことができる。ただし、後述するように、復号処理２００２の内容は従来の復号器と一部異なる。
【００５９】
本復号器においても確率推定に確率推定テーブルを利用する。ただし、本復号器に利用される確率推定テーブルには、図２１に示すように、各インデックス値に対応付けて、Ｓｈｉｆｔ＿ａ値と、Ｑｅ値をＳｈｉｆｔ＿ａ回左ビットシフトした後の値であるＱｅＬＰＳ値が追加されている。なお、Ｓｈｉｆｔ＿ａ値、ＱｅＬＰＳ値及びインデックス値との組を確率推定テーブルとは別に用意するようにしてもよく、かかる態様も本実施形態に包含される。なお、Ｓｈｉｆｔ＿ａ値は、対応したＱｅ値を左ビットシフトにより”０ｘ８０００”（０．７５）以上の値にするために必要な最小シフト回数である。
【００６０】
本復号器の復号処理２００２の処理フローは図１５のように表されるが、ＬＰＳシンボル変更処理２２０３及び復号時再正規化処理２２０４の内容が従来の復号器と異なる。ＭＰＳシンボル変更処理２２０８及び復号時再正規化処理２２０９の内容は従来の復号器と同じである。
【００６１】
図２２は本復号器におけるＬＰＳシンボル変更処理２２０３のフローチャートである。図１５のフローチャートとの違いは、処理２３０２Ａ，２３０３Ａにおいて、確率推定テーブル（図２１）より取得したＱｅＬＰＳ｛Ｉ（ＣＸ）｝をＡレジスタに設定する点である。これ以外は図１６に示した処理内容と変わらない。
【００６２】
図２３は本復号器における復号時再正規化処理２２０４のフローチャートである。図２０に示した復号時再正規化処理の内容との違いは、処理３００３ＡでＡレジスタの左ビットシフト操作を行わない点である。これは、図２２の処理２３０２Ａ又は処理２３０３Ａで、Ａレジスタに必要な左ビットシフト操作後の（再正規化済みの）Ｑｅ値が設定されているからである。
【００６３】
このように、本復号器においては、復号時再正規化処理２２０４にループの繰り返しが全くないため、ソフトウェアによって本復号器を実現する場合に復号時再正規化処理２２０４を大幅に高速化することができる。
【００６４】
なお、ＭＰＳシンボル変更処理２２０８では図１７に示すようにＡレジスタの値を予め特定できないため、その後の復号時再正規化処理２２０９は図１８に示したループの繰り返し処理によって行われる。
【００６５】
以上の説明から理解されるように、従来の復号器と比較するならば、本復号器は、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けて保持し、
ＬＰＳシンボル変更処理において、コンテクストのインデックス値に対応したＱｅＬＳＰ値をＡレジスタに設定し、
ＬＰＳシンボル変更処理後の復号時再正規化処理において、バイトカウンタＣＴの値がコンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことに特徴がある。
【００６６】
コンピュータを本復号器として動作させることも容易である。コンピュータを従来の復号器として動作させるためのプログラムと比較すると、コンピュータを本復号器として動作させるためのプログラムは、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けてメモリに記憶させ、
ＬＰＳシンボル変更処理を実行させ、この際にコンテクストのインデックス値に対応したＱｅＬＳＰ値をメモリより読み出させてＡレジスタに設定させ、
ＬＰＳシンボル変更処理後に復号時再正規化処理を実行させ、この復号時再正規化処理において、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出されたＳｈｉｆｔ＿ａ値以下であることを条件にバイト入力処理を実行させ、その後に、該読み出されたＳｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該読み出されたＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させることに特徴がある。
【００６７】
［第３の実施形態］
本発明の第３の実施形態に係る符号器について説明する。本符号器のデータ入出力は図１に示す通りであり、そのＣレジスタ及びＡレジスタの構成は図２に示す通りである。また、本符号器の全体的な処理フローもしくは全体的構成は図４のように表すことができる。ただし、後述するように、符号化処理１００２の内容は従来の符号器と一部異なる。
【００６８】
本符号器においては、前記第１の実施形態に係る復号器と同様に図１９に示すようにＳｈｉｆｔ＿ａ値が追加された確率推定テーブルが用いられる。Ｓｈｉｆｔ＿ａ値とインデックス値との組を確率推定テーブルとは別に用意するようにしてもよく、かかる態様も本実施形態に包含される。前述した通り、Ｓｈｉｆｔ＿ａ値は、対応したＱｅ値を左ビットシフトにより”０ｘ８０００”（０．７５）以上の値にするために必要な最小シフト回数である。
【００６９】
本符号器の符号化処理１００２の処理フローは図７のように表されるが、ＬＰＳ符号化処理１２０４，１２０６及びＭＰＳ符号化処理１２０５，１２０７における符号化時再正規化処理の内容が以下に説明するように従来の符号器と一部異なる。
【００７０】
まず、ＬＰＳ符号化処理１２０４，１２０６の処理内容は図８に示す通りであるが、処理１３０４を経由した場合と処理１３０３を経由した場合とで符号化時再正規化処理１３０８の内容が異なる。すなわち、処理１３０４を経由した場合の符号化時再正規化処理１３０８は従来の符号器と同様の図１０に示すようなループの繰り返し処理となる。
【００７１】
一方、処理１３０３を経由した場合の符号化時正規化処理１３０８は図２４に示すようなフローとなる。まず、図１９の確率推定テーブルより現コンテクストＣＸのインデックス値Ｉ（ＣＸ）に対応したＳｈｉｆｔ＿ａ値（これをＳｈｉｆｔ＿ａ（Ｉ（ＣＸ））と表記する）を取得し、バイトカウンタＣＴの値がＳｈｉｔ＿ａ（Ｉ（ＣＸ））以下であるか判定する処理４００１を行い、判定結果がＹｅｓならばバイト出力処理４００２を行う。このバイト出力処理４００２は図１０のバイト出力処理１５０３と同一処理である。次に、Ａレジスタ及びＣレジスタをＳｈｉｆｔ＿ａ（Ｉ（ＣＸ））ビット分左シフトし、バイトカウンタＣＴをＳｈｉｆｔ＿ａ（Ｉ（ＣＸ））分デクリメントする処理４００３を実行する。
【００７２】
ＬＰＳ符号化処理（図８）の処理１３０３でＡレジスタに確率推定テーブルより取得されたＱｅ｛Ｉ（ＣＸ）｝が設定され、この値は変更されないため、図２４に示す処理によって再正規化を行うことができる。このようなループの繰り返しが全くない再正規化処理は、ソフトウェアによって高速に実行することができる。
【００７３】
また、ＭＰＳ符号化処理１２０５，１２０７の処理内容は図９に示す通りであるが、処理１４０６を経由した場合と経由しない場合とで符号化時再正規化処理１４０８の内容が異なる。すなわち、処理１４０６を経由しない場合の符号化時再正規化処理１４０８は従来の符号器と同様に図１０に示すループの繰り返し処理となる。
【００７４】
一方、処理１４０６を経由した場合の符号化時正規化処理１４０８は図２４に示すフローとなる。処理１４０６を経由した場合、Ａレジスタに図１９の確率推定テーブルより取得されたＱｅ｛Ｉ（ＣＸ）｝が設定され、この値は変更されないため、図２４に示す処理によって再正規化を行うことができる。このようなループの繰り返しが全くない再正規化処理はソフトウェアによって高速に実行することができる。
【００７５】
以上の説明から理解されるように、従来の符号器と比較するならば、本符号器は、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けて保持し、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてコンテクストのインデックス値に対応したＱｅ値がＡレジスタに設定された場合には、
ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、バイトカウンタＣＴの値がコンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタ及びＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことに特徴がある。
【００７６】
コンピュータを本符号器として動作させることも容易である。コンピュータを従来の符号器として動作させるためのプログラムと比較するならば、コンピュータを本符号器として動作させるためのプログラムは、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むＬＰＳ符号化処理又はＭＰＳ符号化処理を実行させ、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてコンテクストのインデックス値に対応したＱｅ値がＡレジスタに設定された場合には、ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行させた後、該読み出したＳｈｉｆｔ＿ａ値で示されるシフト回数だけＡレジスタ及びＣレジスタを左ビットシフトする操作及び該読み出したＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させることに特徴がある。
【００７７】
［第４の実施形態］
本発明の第４の実施形態に係る符号器について説明する。本符号器のデータ入出力は図１に示す通りである。本符号器のＣレジスタ及びＡレジスタの構成は図２に示す通りである。また、本符号器の全体的な処理フローもしくは全体的構成は図４のように表すことができる。ただし、後述するように、符号化処理１００２の内容は従来の符号器と一部異なる。
【００７８】
本符号器においては、前記第２の実施形態に係る復号器と同様に図２１に示すＳｈｉｆｔ＿ａ値とＱｅＬＰＳ値が追加された確率推定テーブルが用いられる。Ｓｈｉｆｔ＿ａ値、ＱｅＬＰＳ値及びインデックス値との組を確率推定テーブルとは別に用意するようにしてもよく、かかる態様も本実施形態に包含される。
【００７９】
本符号器の符号化処理１００２の処理フローは図７のように表されるが、ＬＰＳ符号化処理１２０４，１２０６及びＭＰＳ符号化処理１２０５，１２０７の内容が以下に説明するように従来の符号器と一部異なる。
【００８０】
まず、図２５は本符号器におけるＬＰＳ符号化処理１２０４，１２０６のフローチャートである。図８のフローチャートに示す処理内容との違い次の通りである。一つは、処理１３０３Ａにおいて、現コンテクストのインデックス値Ｉ（ＣＸ）に対応したＱｅＬＰＳ値を確率推定テーブルより取得し、これをＡレジスタに設定する点である。もう一つは、処理１３０３Ａを経由しない場合の符号化時再正規化処理１３０８は図１０に示すループの繰り返し処理となるが、処理１３０３Ａを経由した場合の符号化時再正規化処理１３０８は図２７に示すような処理となる点である。
【００８１】
また、図２６は本符号器におけるＭＰＳ符号化処理１２０５，１２０７のフローチャートである。図９のフローチャートに示す処理内容との違い次の通りである。一つは、処理１４０６Ａにおいて、現コンテクストのインデックス値Ｉ（ＣＸ）に対応したＱｅＬＰＳ値を確率推定テーブルより取得し、これをＡレジスタに設定する点である。もう一つは、処理１４０６Ａを経由しない場合の符号化時再正規化処理１４０８は図１０に示すループの繰り返し処理となるが、処理１４０６Ａを経由した場合の符号化時再正規化処理１４０８は図２７に示すような処理となる点である。
【００８２】
図２７に示した再正規化処理と図２４に示した再正規化処理との違いは、処理３００３ＡでＡレジスタの左ビットシフト操作を行わない点である。これは、図２５の処理１３０３Ａ又は図２６の処理１４０６Ａで、Ａレジスタに、必要な左ビットシフト操作後（再正規化済み）のＱｅ値が設定されているからである。このようなループの繰り返しのない符号化時再正規化処理はソフトウェアによって高速に実行可能である。
【００８３】
以上の説明から理解されるように、従来の符号器と比較するならば、本符号器は、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けて保持し、
ＬＰＳ符号化処理又はＭＰＳ符号化処理において、コンテクストのインデックス値に対応したＱｅ値をＡレジスタに設定すべき条件のときにＱｅ値に代えて該インデックス値に対応したＱｅＬＰＳ値をＡレジスタに設定し、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてＡレジスタにＱｅＬＰＳ値が設定された場合には、ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、バイトカウンタＣＴの値がコンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行した後、該Ｓｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該Ｓｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を行うことに特徴がある。
【００８４】
また、コンピュータを本符号器として動作させることも容易である。コンピュータを従来の符号器として動作させるためのプログラムと比較するならば、コンピュータを本符号器として動作させるためのプログラムは、コンピュータに、
確率推定テーブルの各インデックス値に対応したＱｅ値を左ビットシフトにより”０ｘ８０００”以上の値にするために必要な最小シフト回数を示すＳｈｉｆｔ＿ａ値及び該Ｓｈｉｆｔ＿ａ値で示される回数だけＱｅ値を左ビットシフトしたＱｅＬＳＰ値を、各インデックス値に対応付けてメモリに記憶させ、
符号化時再正規化処理を含むＬＰＳ符号化処理又はＭＰＳ符号化処理を実行させ、
ＬＰＳ符号化処理又はＭＰＳ符号化処理において、コンテクストのインデックス値に対応したＱｅ値をＡレジスタに設定すべき条件のときにＱｅ値に代えて該インデックス値に対応したＱｅＬＰＳ値をメモリより読み出させてＡレジスタに設定させ、
ＬＰＳ符号化処理又はＭＰＳ符号化処理においてＡレジスタにＱｅＬＰＳ値が設定された場合には、ＬＰＳ符号化処理又はＭＰＳ符号化処理内の符号化時再正規化処理において、コンテクストのインデックス値に対応したＳｈｉｆｔ＿ａ値をメモリより読み出させ、バイトカウンタＣＴの値が該読み出したＳｈｉｆｔ＿ａ値以下であることを条件にバイト出力処理を実行させ、その後に、該読み出されたＳｈｉｆｔ＿ａ値で示されるシフト回数だけＣレジスタを左ビットシフトする操作及び該読み出されたＳｈｉｆｔ＿ａ値だけバイトカウンタＣＴをデクリメントする操作を実行させることに特徴がある。
【００８５】
なお、前記各実施形態に係る復号器又は符号器としてコンピュータを動作させるためのプログラムを記録した磁気ディスク、光ディスク、光磁気ディスク、半導体記憶素子等のコンピュータが読み取り可能な各種情報記録（記憶）媒体も本発明に包含される。
【００８６】
また、前記各実施形態に係る符号器及び復号器をハードウェアによって実現することも可能であり、かかる態様も本発明に包含されることは当然である。
【００８７】
また、以上に説明した本発明の概念は、ＭＱ−Ｃｏｄｅｒに類似した他の符号化方式、例えば２値画像圧縮方式のＪＢＩＧ１で定義されているＱＭ−Ｃｏｄｅｒ方式の符号器又は復号器等に容易に応用可能である。
【図面の簡単な説明】
【００８８】
【図１】符号器のデータ入出力を示す図である。
【図２】符号器におけるＡレジスタ及びＣレジスタの構成を示す図である。
【図３】確率推定テーブルを示す図である。
【図４】符号器の全体的なフローチャートである。
【図５】符号器の初期化処理のフローチャートである。
【図６】インデックス値及びＭＰＳシンボルのデフォルト値を示す図である。
【図７】符号化処理のフローチャートである。
【図８】ＬＰＳ符号化処理のフローチャートである。
【図９】ＭＰＳ符号化処理のフローチャートである。
【図１０】符号化時正規化処理のフローチャートである。
【図１１】復号器のデータ入出力を示す図である。
【図１２】復号器におけるＡレジスタ及びＣレジスタの構成を示す図である。
【図１３】復号器の全体的なフローチャートである。
【図１４】復号器の初期化処理のフローチャートである。
【図１５】復号処理のフローチャートである。
【図１６】ＬＰＳシンボル変更処理のフローチャートである。
【図１７】ＭＰＳシンボル変更処理のフローチャートである。
【図１８】復号時再正規化処理のフローチャートである。
【図１９】本発明の第１の実施形態及び第２の実施形態に係る確率推定テーブルを示す図である。
【図２０】本発明の第１の実施形態に係る復号器における復号時再正規化処理のフローチャートである。
【図２１】本発明の第２の実施形態及び第２の実施形態に係る確率推定テーブルを示す図である。
【図２２】本発明の第２の実施形態に係るＬＰＳシンボル変更処理のフローチャートである。
【図２３】本発明の第２の実施形態に係る復号時再正規化処理のフローチャートである。
【図２４】本発明の第３の実施形態に係る符号化時再正規化処理のフローチャートである。
【図２５】本発明の第４の実施形態に係るＬＰＳ符号化処理のフローチャートである。
【図２６】本発明の第４の実施形態に係るＭＰＳ符号化処理のフローチャートである。
【図２７】本発明の第４の実施形態に係る符号化時再正規化処理のフローチャートである。
【符号の説明】
【００８９】
１００３    符号化処理
１２０４，１２０６    ＬＰＳ符号化処理
１２０５，１２０７    ＭＰＳ符号化処理
１３０８，１４０８    符号化時再正規化処理
２００２    復号処理
２２０３    ＬＰＳシンボル変更処理
２２０４，２２０９    復号時再正規化処理
２２０８    ＭＰＳシンボル変更処理
【図１】
2007215145.tif 000003
【図２】
2007215145.tif 000004
【図３】
2007215145.tif 000005
【図４】
2007215145.tif 000006
【図５】
2007215145.tif 000007
【図６】
2007215145.tif 000008
【図７】
2007215145.tif 000009
【図８】
2007215145.tif 000010
【図９】
2007215145.tif 000011
【図１０】
2007215145.tif 000012
【図１１】
2007215145.tif 000013
【図１２】
2007215145.tif 000014
【図１３】
2007215145.tif 000015
【図１４】
2007215145.tif 000016
【図１５】
2007215145.tif 000017
【図１６】
2007215145.tif 000018
【図１７】
2007215145.tif 000019
【図１８】
2007215145.tif 000020
【図１９】
2007215145.tif 000021
【図２０】
2007215145.tif 000022
【図２１】
2007215145.tif 000023
【図２２】
2007215145.tif 000024
【図２３】
2007215145.tif 000025
【図２４】
2007215145.tif 000026
【図２５】
2007215145.tif 000027
【図２６】
2007215145.tif 000028
【図２７】
2007215145.tif 000029