(57)【特許請求の範囲】
【請求項１】
有限状態マシン（以下、ＦＳＭ）を利用し、
複数のビットの各ビット毎に、それぞれが一対の端点を持つ２つの部分区間に分割される数値区間を指定するステップ、
前記各ビット毎に、前記２つの部分区間のどちらの部分区間が優勢シンボルに関連付けられているか、及び、前記各ビットが優勢シンボルと同一であるか否かに基づいて、前記区間の前記２つの部分区間のうちの一方の部分区間を選択するステップ、及び
各区間毎に、前記選択された一方の部分区間の一対の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット（一致しない最初のビットは含まない）に対応した０個以上のビットを出力するステップ、
により、複数ビットを符号化するための符号化方法において、
第１のテーブルより第１の分割インデックス値を取得するステップ、及び
前記第１の分割インデックス値を利用して第２のテーブルより第２の分割インデックス値を取得するステップをさらに含むことを特徴とする符号化方法。
【請求項２】
前記分割インデックス値がＦＳＭ状態及び確率クラスに基づいて取得されることを特徴とする請求項１記載の符号化方法。
【請求項３】
確率クラスに基づいてマスクを生成するステップ、
ＦＳＭ状態に基づいてテーブルより第１の値を取得するステップ、
前記マスクと前記第１の値の論理積に基づいて第２の値を生成するステップ、
前記ＦＳＭ状態と前記第２の値により前記第１のテーブルにより第１の分割インデック値を取得するステップを更に含むことを特徴とする請求項２記載の符号化方法。
【請求項４】
前記論理積結果中の１をカウントしてカウント値を生成し、このカウント値が前記第２の値となることを特徴とする請求項３記載の符号化方法。
【請求項５】
一致しないビットを最上位ビット位置まで左シフトし、下位ビットに、部分区間の端点が下側端点ならば０のビットを、上側端点ならば１のビットをそれぞれ充填するステップをさらに含むことを特徴とする請求項１記載の符号化方法。
【請求項６】
文脈モデル、及び
前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するＦＳＭコーダーからなり、
前記ＦＳＭコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ２つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット（一致しない最初のビットは含まない）に対応した０個以上のビットを出力することによってビットを符号化する圧縮／伸長システムにおいて、
前記ＦＳＭコーダーが、統合型のＦＳＭ符号化／復号化テーブルと、独立した確率推定ルックアップテーブル及びビット生成ルックアップテーブルを含むことを特徴とする圧縮／伸長システム。
【請求項７】
文脈モデル、及び
前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するＦＳＭコーダーからなり、
前記ＦＳＭコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ２つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット（一致しない最初のビットは含まない）に対応した０個以上のビットを出力することによってビットを符号化する圧縮／伸長システムにおいて、
前記ＦＳＭコーダーが、確率推定とビット生成の両方を行うための単一のルックアップテーブルを含むことを特徴とする圧縮／伸長システム。
【請求項８】
文脈モデル、及び
前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するＦＳＭコーダーからなり、
前記ＦＳＭコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ２つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット（一致しない最初のビットは含まない）に対応した０個以上のビットを出力することによってビットを符号化する圧縮／伸長システムにおいて、
前記ＦＳＭコーダーが、
多重文脈確率推定を行う第１の部分、
確率推定状態をその記述情報へ変換し、ｌｉｋｅｌｙ指示に応じて、符号化されていないビットを生成する変換部、
前記変換部より与えられる各確率推定値に応じて０個以上の符号語を生成し、かつ、符号化データストリームに応じて前記ｌｉｋｅｌｙ指示を生成するビット生成ルックアップテーブルを含む、符号化されていないビットと符号化されたビットの間の変換のためのビット生成部、及び
前記ビット生成ルックアップテーブルより符号語を受け取るように接続され、符号化時に符号化データ出力を発生するため可変長の符号語を結合してバイト群にするパック部からなることを特徴とする圧縮／伸長システム。
【請求項９】
前記文脈モデルと結合された可逆ウェーブレット変換部をさらに含むことを特徴とする請求項６〜８のいずれか１項記載の圧縮／伸長システム。
【請求項１０】
前記ＦＳＭコーダーと結合され、符号化データ及び信号を出力するヘッダ処理部をさらに含むことを特徴とする請求項６〜８のいずれか１項記載の圧縮／伸長システム。
【請求項１１】
前記ビット生成ルックアップテーブルが冗長エントリーを含まないことを特徴とする請求項８記載の圧縮／伸長システム。
【請求項１２】
前記符号化データストリームのバイト群の可変長シフト操作を行って可変長符号語にするアンパック部をさらに含むことを特徴とする請求項８記載の圧縮／伸長システム。
【請求項１３】
確率状態に応じた確率クラスを生成する確率クラス部、
優勢シンボル（以下、ＭＰＳ）が発生して確率状態の更新が必要なときの次の確率推定状態を生成するＭＰＳ確率状態部、
劣勢シンボル（以下、ＬＰＳ）が発生して確率状態の更新が必要なときの次の確率推定状態を生成するＬＰＳ確率状態部、
ＭＰＳを切り替える必要があるときに切り替え指示を発生する切り替え部、
及び
確率状態が第１の所定値以下のときに更新指示を発生する更新部をさらに含むことを特徴とする請求項８記載の圧縮／伸長システム。
【請求項１４】
前記ＭＰＳ確率状態部が、現在の確率推定状態を、現在の確率状態の値に基づいたある値域内の整数だけインクリメント又はデクリメントすることによって次の確率推定状態を生成することを特徴とする請求項１３記載の圧縮／伸長システム。
【請求項１５】
前記切り替え指示が信号からなることを特徴とする請求項１３記載の圧縮／伸長システム。
【請求項１６】
確率状態が第１の所定値以下であるか第２の所定値と等しいときに前記切り替え指示がアサートされることを特徴とする請求項１３記載の圧縮／伸長システム。
【請求項１７】
前記更新指示が信号からなることを特徴とする請求項１３記載の圧縮／伸長システム。
【請求項１８】
前記ビット生成部が、符号化されていないビットと符号化されたビットとの間の変換を行うためのビット生成ロジックからなることを特徴とする請求項８記載の圧縮／伸長システム。
【請求項１９】
前記ビット生成ロジックが、前記符号語を与える第１の出力と、前記符号語のサイズを指示する第２の出力を有することを特徴とする請求項１８記載の圧縮／伸長システム。
【請求項２０】
前記ビット生成ロジックが、前記区間を定義する次のスタート値及び次のストップ値を発生することを特徴とする請求項１８記載の圧縮／伸長システム。
【請求項２１】
前記ビット生成ロジックが発生した前記スタート値及び前記ストップ値を受け取るように接続されたスタートレジスタ及びストップレジスタをさらに含み、前記スタートレジスタ及び前記ストップレジスタが前記ビット生成ロジックの入力にも接続されることを特徴とする請求項２０記載の圧縮／伸長システム。
【請求項２２】
前記ビット生成部が、符号化の終わりでフラッシングのための符号語を生成することを特徴とする請求項８記載の圧縮／伸長システム。
【請求項２３】
前記ビット生成部が、そのフラッシングのためのフラッシュ指示を通知されると、所定の符号語を出力するための符号語を生成するフラッシュロジックをさらに含むことを特徴とする請求項８記載の圧縮／伸長システム。
【請求項２４】
前記フラッシュ指示がフラッシュ信号からなることを特徴とする請求項２３記載の圧縮／伸長システム。
【請求項２５】
符号化データを表す符号語及びフラッシングのための所定の符号語を受け取るように接続されたマルチプレクサをさらに含み、該マルチプレクサがその入力の一つを前記ビット生成部の出力として選択するため前記フラッシュ指示を受け取るように接続されることを特徴とする請求項２３記載の圧縮／伸長システム。
【請求項２６】
確率推定値及びＦＳＭ状態に応じて、第１の分割値と、ＭＰＳが発生し確率推定状態の更新が必要な場合の次の確率推定状態と、ＬＰＳが発生し確率推定状態の更新が必要な場合の次の確率推定状態とを生成する状態展開部、
前記第１の分割値と入力コードストリームを比較して第２の分割値を出力するコンパレータ、
前記コンパレータ及び前記状態展開部と接続され、ｌｉｋｅｌｙ指示を発生するｌｉｋｅｌｙロジック、
前記次の確率推定状態及び前記ｌｉｋｅｌｙ指示を受け取るように接続され、前記ｌｉｋｅｌｙ指示に基づいて前記次の確率推定状態の一方を出力するマルチプレクサ、及び
前記第１の分割値、前記ｌｉｋｅｌｙ指示及び区間指示に応じて、符号語を生成する符号語生成部をさらに含むことを特徴とする請求項８記載の圧縮／伸長システム。
【請求項２７】
前記区間指示が、前記区間の始まりと終わりをそれぞれ示すスタート値とストップ値からなることを特徴とする請求項２６記載の圧縮／伸長システム。
【請求項２８】
前記状態展開部が、
確率推定値に応じたマスク値を発生する第１の部分、
前記ＦＳＭ状態に応じた値を発生する第２の部分、
前記第１の部分の出力と前記第２の部分の出力の論理積演算を行うように接続されたゲートロジック、
前記ゲートロジックの出力を受け取り、該出力に応じた選択信号を発生するように接続された第３の部分、
前記選択信号及び前記ＦＳＭ状態に応じて、ＭＰＳが発生して更新が必要な場合のための次の確率推定状態を生成する次状態ＭＰＳ部、
前記選択信号及び前記ＦＳＭ状態に応じて、ＬＰＳが発生して更新が必要な場合のための次の確率推定状態を生成する次状態ＬＰＳ部、
前記選択信号及び前記ＦＳＭ状態に応じて、どちらの部分区間がＭＰＳの発生に関連付けられるかの指示を発生する第４の部分、及び
前記選択信号及び前記ＦＳＭ状態に応じて前記第２の分割値を生成する第５の部分からなることを特徴とする請求項２６記載の圧縮／伸長システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データの符号化及び復号化の分野に係り、特に、有限状態マシン（ＦＳＭ）を利用するデータの符号化及び復号化に関する。
【０００２】
【従来の技術】
データ圧縮は、大量データの記憶及び伝送のために極めて有用な手段である。例えば、文書のファクシミリ送信のような画像伝送に要する時間は、圧縮を利用して、その画像の再生に必要なビット数を減らすと、著しく短縮される。
【０００３】
入力したファイルもしくはデータセットが、デシジョン（decision）モデルの管理下で一連のデシジョンに変換される圧縮システムがある。各デシジョンは、それに関連した尤度を持ち、この尤度に基づいて一つの出力コードが生成されて圧縮ファイルに追加される。これらの符号化システムを実現するために、圧縮システムは３つの要素、すなわちデシジョン・モデル、確率推定方法及びビットストリーム・ジェネレータを有する。デシジョン・モデルは、入力データを受け取ってデシジョンの集合へ変換し、圧縮システムはそのデシジョンの集合を利用してデータを符号化する。デシジョン・モデルは、一般に文脈モデルと呼ばれる。確率推定方法は、各デシジョンの尤度の確率推定値を発生する手順である。ビットストリーム・ジェネレータは、最終的なビットストリーム符号化を行って出力コードを生成するもので、この出力コードが圧縮データセットもしくは圧縮ファイルである。デシジョン・モデル、ビットストリーム・ジェネレータの一方でも両方でも有効に圧縮を行うことができる。
【０００４】
バイナリ・コーダーは、データを一連のバイナリ・デシジョンとして符号化するタイプの符号化復号化システムである。
【０００５】
有限状態マシン（ＦＳＭ）コーダーは、当該技術分野において周知のバイナリ・エントロピーコーダーである。ＦＳＭコーダーは、ロスレスの多重文脈バイナリ・エントロピーコーダーである。ビット生成（ビットと既知又は推定の確率値を与えられてビットストリームを生成する）と、確率推定（同じ文脈の過去のデータに基づき確率値を推定する）の両方に有限状態マシン（ＦＳＭ）が利用される。ＦＳＭコーダーは、符号化時には、一連のビットと、それに関連した文脈とを受け取って、それらビットを可能な限り少ないデータで表現する符号化ビットストリームを発生する。ＦＳＭコーダーは、復号化時には、符号化ビットストリームと文脈の系列を受け取り、元のビット系列を再生する。ＦＳＭコーダーの一例は、米国特許第5,272,478（発明の名称：Method  and  Apparatus  for  Entropy  Encoding、1993年12月21日発行）に述べられている。また、米国特許第5,475,388号（発明の名称：Method  and  Apparatus  for  Using  Finite  State  Machines  to  Perform  Channel  Modulation  and  Error  Correction  and  Entropy  Coding、1995年12月12日発行）も参照されたい。
【０００６】
バイナリ・エントロピーコーダーは、画像圧縮システムのロスレス符号化復号化部として利用できる。これらシステムは、５０％超の確率のシンボルの符号化を可能とし、かつ、被圧縮データのビット毎に独立した文脈変化（確率推定値の変化）を許容することによって、最大限の圧縮が可能である。他のバイナリ・エントロピーコーダーとして、ＩＢＭ社のＱコーダー、ＩＢＭ社／三菱社のＱＭコーダー、米国特許第5,381,145号（発明の名称：Method  and  Apparatus  for  Parallel  Encoding  and  Decoding  of  Data、1995年１月10日発行）及び米国特許第5,583,500号（発明の名称：Method  and  Apparatus  for  Parallel  Encoding  and  Decoding  of  Data、1996年１月10日発行）に述べられているＡＢＳコーダーがある。
【０００７】
ＦＳＭコーダーは、ソフトウェアにより比較的高速、簡易に実装できる。ＦＳＭコーダーは、現在、本発明の譲受法人によって標準化提案がなされている可逆ウェーブレット・ベースの画像圧縮システムに採用されている。
【０００８】
【発明が解決しようとする課題】
本発明の目的は、ＦＳＭを利用する符号化方法、符号化装置又は符号化復号化装置（コーダー）の性能を向上させること、また、ハードウェアによる実装に好適なＦＳＭコーダーを提供すること、ソフトウェアによる実装に好適な構成のＦＳＭコーダーを提供すること、ハードウェアとソフトウェアの組合せによる実装に好適な構成なＦＳＭコーダーを提供すること等である。これらの目的、その他の目的については以下の説明によって明確になろう。
【０００９】
【課題を解決するための手段】
上記目的を達成するための本発明は、以下に列挙した方法、装置及びシステムを包含する。
【００１０】
請求項１の発明は、有限状態マシン（以下、ＦＳＭ）を利用し、
複数のビットの各ビット毎に、それぞれが一対の端点を持つ２つの部分区間に分割される数値区間を指定するステップ、
前記各ビット毎に、前記２つの部分区間のどちらの部分区間が優勢シンボルに関連付けられているか、及び、前記各ビットが優勢シンボルと同一であるか否かに基づいて、前記区間の前記２つの部分区間のうちの一方の部分区間を選択するステップ、及び
各区間毎に、前記選択された一方の部分区間の一対の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット（一致しない最初のビットは含まない）に対応した０個以上のビットを出力するステップ、
により、複数ビットを符号化するための符号化方法において、
第１のテーブルより第１の分割インデックス値を取得するステップ、及び
前記第１の分割インデックス値を利用して第２のテーブルより第２の分割インデックス値を取得するステップをさらに含むことを特徴とする。
【００１１】
請求項２の発明は、請求項１記載の符号化方法において、前記分割インデックス値がＦＳＭ状態及び確率クラスに基づいて取得されることを特徴とする。
【００１２】
請求項３の発明は、請求項２記載の符号化方法において、確率クラスに基づいてマスクを生成するステップ、
ＦＳＭ状態に基づいてテーブルより第１の値を取得するステップ、
前記マスクと前記第１の値の論理積に基づいて第２の値を生成するステップ、
前記ＦＳＭ状態と前記第２の値により前記第１のテーブルにより第１の分割インデック値を取得するステップを更に含むことを特徴とする。
【００１３】
請求項４の発明は、請求項３記載の符号化方法において、前記論理積結果中の１をカウントしてカウント値を生成し、このカウント値が前記第２の値となることを特徴とする。
【００１４】
請求項５の発明は、請求項１記載の符号化方法において、一致しないビットを最上位ビット位置まで左シフトし、下位ビットに、部分区間の端点が下側端点ならば０のビットを、上側端点ならば１のビットをそれぞれ充填するステップをさらに含むことを特徴とする。
【００１５】
請求項６の発明は、文脈モデル、及び
前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するＦＳＭコーダーからなり、
前記ＦＳＭコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ２つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット（一致しない最初のビットは含まない）に対応した０個以上のビットを出力することによってビットを符号化する圧縮／伸長システムにおいて、
前記ＦＳＭコーダーが、統合型のＦＳＭ符号化／復号化テーブルと、独立した確率推定ルックアップテーブル及びビット生成ルックアップテーブルを含むことを特徴とする。
【００１６】
請求項７の発明は、文脈モデル、及び
前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するＦＳＭコーダーからなり、
前記ＦＳＭコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ２つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット（一致しない最初のビットは含まない）に対応した０個以上のビットを出力することによってビットを符号化する圧縮／伸長システムにおいて、
前記ＦＳＭコーダーが、確率推定とビット生成の両方を行うための単一のルックアップテーブルを含むことを特徴とする。
【００１７】
請求項８の発明は、文脈モデル、及び
前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するＦＳＭコーダーからなり、
前記ＦＳＭコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ２つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット（一致しない最初のビットは含まない）に対応した０個以上のビットを出力することによってビットを符号化する圧縮／伸長システムにおいて、
前記ＦＳＭコーダーが、
多重文脈確率推定を行う第１の部分、
確率推定状態をその記述情報へ変換し、ｌｉｋｅｌｙ指示に応じて、符号化されていないビットを生成する変換部、
前記変換部より与えられる各確率推定値に応じて０個以上の符号語を生成し、かつ、符号化データストリームに応じて前記ｌｉｋｅｌｙ指示を生成するビット生成ルックアップテーブルを含む、符号化されていないビットと符号化されたビットの間の変換のためのビット生成部、及び
前記ビット生成ルックアップテーブルより符号語を受け取るように接続され、符号化時に符号化データ出力を発生するため可変長の符号語を結合してバイト群にするパック部からなることを特徴とする。
【００１８】
請求項９の発明は、請求項６〜８のいずれか１項記載の圧縮／伸長システムにおいて、前記文脈モデルと結合された可逆ウェーブレット変換部をさらに含むことを特徴とする。
【００１９】
請求項１０の発明は、請求項６〜８のいずれか１項記載の圧縮／伸長システムにおいて、前記ＦＳＭコーダーと結合され、符号化データ及び信号を出力するヘッダ処理部をさらに含むことを特徴とする。
【００２０】
請求項１１の発明は、請求項８記載の圧縮／伸長システムにおいて、前記ビット生成ルックアップテーブルが冗長エントリーを含まないことを特徴とする。
【００２１】
請求項１２の発明は、請求項８記載の圧縮／伸長システムにおいて、前記符号化データストリームのバイト群の可変長シフト操作を行って可変長符号語にするアンパック部をさらに含むことを特徴とする。
【００２２】
請求項１３の発明は、請求項８記載の圧縮／伸長システムにおいて、確率状態に応じた確率クラスを生成する確率クラス部、
優勢シンボル（以下、ＭＰＳ）が発生して確率状態の更新が必要なときの次の確率推定状態を生成するＭＰＳ確率状態部、
劣勢シンボル（以下、ＬＰＳ）が発生して確率状態の更新が必要なときの次の確率推定状態を生成するＬＰＳ確率状態部、
ＭＰＳを切り替える必要があるときに切り替え指示を発生する切り替え部、
及び
確率状態が第１の所定値以下のときに更新指示を発生する更新部をさらに含むことを特徴とする。
【００２３】
請求項１４の発明は、請求項１３記載の圧縮／伸長システムにおいて、前記ＭＰＳ確率状態部が、現在の確率推定状態を、現在の確率状態の値に基づいたある値域内の整数だけインクリメント又はデクリメントすることによって次の確率推定状態を生成することを特徴とする。
【００２４】
請求項１５の発明は、請求項１３記載の圧縮／伸長システムにおいて、前記切り替え指示が信号からなることを特徴とする。
【００２５】
請求項１６の発明は、請求項１３記載の圧縮／伸長システムにおいて、確率状態が第１の所定値以下であるか第２の所定値と等しいときに前記切り替え指示がアサートされることを特徴とする。
【００２６】
請求項１７の発明は、請求項１３記載の圧縮／伸長システムにおいて、前記更新指示が信号からなることを特徴とする。
【００２７】
請求項１８の発明は、請求項８記載の圧縮／伸長システムにおいて、前記ビット生成部が、符号化されていないビットと符号化されたビットとの間の変換を行うためのビット生成ロジックからなることを特徴とする。
【００２８】
請求項１９の発明は、請求項１８記載の圧縮／伸長システムにおいて、前記ビット生成ロジックが、前記符号語を与える第１の出力と、前記符号語のサイズを指示する第２の出力を有することを特徴とする。
【００２９】
請求項２０の発明は、請求項１８記載の圧縮／伸長システムにおいて、前記ビット生成ロジックが、前記区間を定義する次のスタート値及び次のストップ値を発生することを特徴とする。
【００３０】
請求項２１の発明は、請求項２０記載の圧縮／伸長システムにおいて、前記ビット生成ロジックが発生した前記スタート値及び前記ストップ値を受け取るように接続されたスタートレジスタ及びストップレジスタをさらに含み、前記スタートレジスタ及び前記ストップレジスタが前記ビット生成ロジックの入力にも接続されることを特徴とする。
【００３１】
請求項２２の発明は、請求項８記載の圧縮／伸長システムにおいて、前記ビット生成部が、符号化の終わりでフラッシングのための符号語を生成することを特徴とする。
【００３２】
請求項２３の発明は、請求項８記載の圧縮／伸長システムにおいて、前記ビット生成部が、そのフラッシングのためのフラッシュ指示を通知されると、所定の符号語を出力するための符号語を生成するフラッシュロジックをさらに含むことを特徴とする。
【００３３】
請求項２４の発明は、請求項２３記載の圧縮／伸長システムにおいて、前記フラッシュ指示がフラッシュ信号からなることを特徴とする。
【００３４】
請求項２５の発明は、請求項２３記載の圧縮／伸長システムにおいて、符号化データを表す符号語及びフラッシングのための所定の符号語を受け取るように接続されたマルチプレクサをさらに含み、該マルチプレクサがその入力の一つを前記ビット生成部の出力として選択するため前記フラッシュ指示を受け取るように接続されることを特徴とする。
【００３５】
請求項２６の発明は、請求項８記載の圧縮／伸長システムにおいて、確率推定値及びＦＳＭ状態に応じて、第１の分割値と、ＭＰＳが発生し確率推定状態の更新が必要な場合の次の確率推定状態と、ＬＰＳが発生し確率推定状態の更新が必要な場合の次の確率推定状態とを生成する状態展開部、
前記第１の分割値と入力コードストリームを比較して第２の分割値を出力するコンパレータ、
前記コンパレータ及び前記状態展開部と接続され、ｌｉｋｅｌｙ指示を発生するｌｉｋｅｌｙロジック、
前記次の確率推定状態及び前記ｌｉｋｅｌｙ指示を受け取るように接続され、前記ｌｉｋｅｌｙ指示に基づいて前記次の確率推定状態の一方を出力するマルチプレクサ、及び
前記第１の分割値、前記ｌｉｋｅｌｙ指示及び区間指示に応じて、符号語を生成する符号語生成部をさらに含むことを特徴とする。
【００３６】
請求項２７の発明は、請求項２６記載の圧縮／伸長システムにおいて、前記区間指示が、前記区間の始まりと終わりをそれぞれ示すスタート値とストップ値からなることを特徴とする。
【００３７】
請求項２８の発明は、請求項２６記載の圧縮／伸長システムにおいて、前記状態展開部が、
確率推定値に応じたマスク値を発生する第１の部分、
前記ＦＳＭ状態に応じた値を発生する第２の部分、
前記第１の部分の出力と前記第２の部分の出力の論理積演算を行うように接続されたゲートロジック、
前記ゲートロジックの出力を受け取り、該出力に応じた選択信号を発生するように接続された第３の部分、
前記選択信号及び前記ＦＳＭ状態に応じて、ＭＰＳが発生して更新が必要な場合のための次の確率推定状態を生成する次状態ＭＰＳ部、
前記選択信号及び前記ＦＳＭ状態に応じて、ＬＰＳが発生して更新が必要な場合のための次の確率推定状態を生成する次状態ＬＰＳ部、
前記選択信号及び前記ＦＳＭ状態に応じて、どちらの部分区間がＭＰＳの発生に関連付けられるかの指示を発生する第４の部分、及び
前記選択信号及び前記ＦＳＭ状態に応じて前記第２の分割値を生成する第５の部分からなることを特徴とする。
【００３８】
【発明の実施の形態】
以下の説明において、信号名、ビット数など、様々な具体例が示される。しかし、当業者には、そのような具体例によらずに本発明を実施し得ることは明白であろう。他方、本発明をいたずらに難解にしないため、周知の構造やびデバイスはブロック図として表し、詳しくは示さない。
【００３９】
以下の詳細説明には、コンピュータメモリ内のデータビットに対する操作のアルゴリズム及び記号表現によって表された部分がある。このようなアルゴリズムの記述及び表現は、データ処理技術分野の当業者によって、その研究の内容を他の当業者に対し最も効率的に伝えるために用いられる手段である。あるアルゴリズムがあり、それが概して期待した結果に至る自己矛盾のないステップ系列だと考えられるとする。これらのステップは、物理量を物理的に処理する必要があるものである。必ずという訳ではないが、これらの物理量は記憶、転送、結合、比較、その他の処理が可能な電気的または磁気的信号の形をとるのが普通である。これらの信号をビット、値、要素、記号、文字、用語、数値等で表わすのが、主に慣用上の理由から、便利な場合があることが分かっている。
【００４０】
しかしながら、このような用語や同様の用語は、適切な物理量と関係付けられるべきであり、また、これら物理量につけた便宜上のラベルに過ぎないということに留意すべきである。以下の説明から明らかなように、特に断わらない限り、「処理」「演算」「計算」「判定」「表示」等々の用語を用いて論じることは、コンピュータシステムのレジスタ及びメモリの内部の物理的（電子的）な量として表現されたデータを処理して、コンピュータシステムのメモリまたはレジスタ、同様の情報記憶装置、情報伝送装置あるいは表示装置の内部の同様に物理量として表現された他のデータへ変換する、コンピュータシステムあるいは同様の電子演算装置の作用及びプロセスを指すものである。
【００４１】
また、後述のように、本発明は、本明細書において述べる操作を実行するための装置にも関係するものである。この装置は、希望する目的に専用に作ってもよいし、あるいは、汎用コンピュータを内蔵のコンピュータ・プログラムにより選択的に駆動または再構成したものでもよい。このようなコンピュータ・プログラムは、コンピュータが読み取り可能な、どのような種類の記憶媒体に格納してもよい。例えば、これに限定されるものではないが、フロッピーディスク、光ディスク、ＣＤ−ＲＯＭ、光磁気ディスクなどの任意の種類のディスク、リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード又は光カードなど、電子的命令の格納に適した、コンピュータのシステムバスに接続された任意種類の媒体でよい。本明細書に提示したアルゴリズムは、本質的に、いかなる特定のコンピュータ、その他の装置とも関わりがない。様々な汎用マシンを、本明細書に述べたところに従ったプログラムに利用してもよいが、必要な方法のステップの実行用に、より特化した装置を作るほうが好都合であるかもしれない。これら多様なマシンに要求される構造は以下の説明から明らかになろう。さらに、いかなる特定のプログラミング言語とも関連付けることなく本発明を説明する。本明細書における説明から理解されるように、様々なプログラミング言語を用いて本発明の内容を実現できる。
【００４２】
本発明は、性能を向上するように設計されたＦＳＭコーダーとＦＳＭベースのコーダーシステムを提供する。ハードウェアに好適な構成、ソフトウェアに好適な構成、又は、ハードウェアとソフトウェアの組合せに好適な構成がある。
【００４３】
本発明のＦＳＭコーダーは、可逆ウェーブレットによる圧縮を利用したシステムのエントロピーコーダーとして用いることができる。
【００４４】
図１は、本発明の圧縮／伸長システムの一実施例のブロック図である。図１において、画像データ１０５は、可逆ウェーブレット変換部１０１に入力され、又は可逆ウェーブレット変換部１０１より出力される。この可逆ウェーブレット変換部１０１は、順変換部と逆変換部からなる。可逆ウェーブレット変換部１０１は、文脈モデル１０２と結合される。文脈モデル１０２はＦＳＭコーダー１０３とも結合され、ＦＳＭコーダー１０３はヘッダ処理部１０４とも結合される。ヘッダ処理部１０４は、符号化データ及び信号１０８を生成し又は受け取る。一実施例では、符号化データ及び信号１０８は、タグ付きのコードストリームからなる。このように、文脈モデル１０２とのインターフェースに加えて、ＦＳＭコーダー１０３の符号化データが、ヘッダ処理部１０４に生成／利用されるタグ付きコードストリームに含まれている。
【００４５】
図１に示すＦＳＭコーダー・ベースのシステムの基本動作は、次のとおりである。符号化時においては、入力データである画像データ１０５が、可逆ウェーブレット変換部１０１の可逆ウェーブレット順変換部によって、係数の系列に変換される。各係数は複数ビット長である。可逆ウェーブレット変換部１０１から出力された係数のビットは、文脈モデル１０２によって文脈ビンに分類される。各文脈ビン毎に１つの確率推定値が格納されており、これはＦＳＭコーダー１０３の内部の確率推定マシン（ＰＥＭ）によって生成される。一実施例では、この確率推定値はカウンタの値と同様の１つの状態である。一実施例では、この状態の１つのビットは、その文脈で０又は１のほうが発生する可能性が高いかどうかを表す。これは優勢シンボル又はＭＰＳと呼ばれる。その他のビットは、ＭＰＳの（劣勢シンボル（ＬＰＳ）に対する）約５０％から約１００％までのスキュー（ＰＳＴＡＴＥ）を表す、すなわち、ＭＰＳが（ＬＰＳと比べて）どのくらい発生する可能性が高いかを表している。
【００４６】
後述の状態マシン更新規則は、現在の状態と０又は１の発生を仮定したときに、ＰＳＴＡＴＥと、その文脈ビンで発生する可能性が高いビットを更新するために何をすべきかを規定する。一実施例では、この更新規則は、ＭＰＳとＰＳＴＡＴＥを管理するために１文脈あたり１０ビットだけ規定する。一般に更新規則は、ＭＰＳが生じた時にＰＳＴＡＴＥをある量増加させ、ＬＰＳ（劣勢シンボル）が生じた時にＰＳＴＡＴＥをある量減少させる。一実施例では、スキューは１６個の確率クラス（ＰＣＬＡＳＳ）に分割される。各ＰＣＬＡＳＳは、一つの確率範囲として用いられる。
【００４７】
ＦＳＭコーダー１０３は、各ＰＣＬＡＳＳ毎にビットを符号化する有限状態マシン（ＦＳＭ）を含んでいる。確率が５０％を越えるビットを符号化するために、ビットが全く出力されず、情報がＦＳＭの状態に一時的に格納されることがある。このエントロピーコーダーの状態によって、まだ出力されていないビットを復号化器が正しく認識できるようにするためには、どんなビットパターンを次に出力すればよいか指示される。
【００４８】
図２は、２値画像データ１１５を処理するためのＦＳＭコーダー・ベースの圧縮／伸長システムの別の実施例を示すブロック図である。図２において、１１２は文脈モデル、１１３はＦＳＭコーダー（エントロピーコーダー）、１１４はヘッダ処理部（オプション）であり、それぞれ図１中の同一名称の部分に対応するものである。１１８は符号化データ及び信号である。ここで、２値画像の画素は符号化済みの近傍画素の２進値に基づいて１０２４文脈中の１つの文脈に分類される。これはＪＰＩＧ標準と同様である。そのような近傍画素に基づく２つの文脈例も図２に示されている。
【００４９】
可逆ウェーブレット・ベースの圧縮／伸長システムと２値画像圧縮／伸長システムに関連して本発明システムを説明したが、本発明は、ウェーブレット・ベースでない他のシステムにも適用可能である。また、画像データに関連して図１及び図２を説明したが、画像以外の種類のデータや情報、例えば音声やテキスト、コンピュータの実行ファイルやデータファイルなども処理可能である。
【００５０】
［ルックアップテーブル（ＬＵＴ）ベースのＦＳＭコーダー］
本発明は、大部分が１つ又はそれ以上のルックアップテーブル（ＬＵＴ）として実装されたソフトウェアのＦＳＭコーダーを提供する。この本発明のＦＳＭコーダーは、例えば、符号化対象ビット用のアドレス入力、エントロピーコーダー状態用のアドレス入力、及び／又は、ＰＣＬＡＳＳもしくはＰＳＴＡＴＥのためのアドレス入力を持つ複数のＬＵＴを使用する。一実施例では、ＰＣＬＡＳＳは、あるバイナリ・デシジョンに対する実際の確率推定値が含まれる一つのクラスであり、ある確率範囲として用いられる。一実施例では、ＰＳＴＡＴＥは、バイナリ・デシジョンの確率推定状態である。ＰＣＬＡＳＳとＰＳＴＡＴＥは、バイナリ・デシジョン以外のものの確率に対応させてもよい。一実施例では、符号化対象ビット用アドレス入力は１ビットからなり、エントロピーコーダー状態は６ビットからなり、ＰＣＬＡＳＳは４ビットからなり、ＰＳＴＡＴＥは９ビットからなる。このようなアドレッシング方法によれば、全体のアドレスサイズは１１ビット又は１６ビットであり、２Ｋ又は６４ＫのＬＵＴエントリーを必要とする。ＦＳＭコーダーの復号化部のソフトウェアによる実装の中には、（符号化対象ビットに代えて）符号化されたデータをＬＵＴの入力として用いるものもある。この符号化データは例えば８ビット長である。このようにすると、ＬＵＴの入力アドレスのサイズは１８ビット又は２３ビットに増加し、２５６Ｋ又は８ＭのＬＵＴエントリーを必要とする。
【００５１】
本発明の一実施例では、前述の符号化器用テーブル程度のサイズの単一のテーブルが、符号化と復号化の両方に利用される。すなわち、復号化と符号化のためにテーブルを別々に用意する必要はない。復号化器用の大きなＬＵＴをなくせば、コストはかなり削減される。
【００５２】
図３は、統合型のＦＳＭ符号化／復号化テーブルを持ち、独立した確率推定ＬＵＴとビット生成ＬＵＴを使うＦＳＭコーダー（符号化器／復号化器）のブロック図である。図３において、文脈（ｃｏｎｔｅｘｔ）メモリ２０１は、確率推定（ｐｒｏｂａｂｉｌｉｔｙ  ｅｓｔｉｍａｔｉｏｎ）テーブル２０２、マルチプレクサ（ＭＵＸ）２０３、確率推定（ｐｒｏｂａｂｉｌｉｔｙ  ｅｓｔｉｍａｔｉｏｎ）ロジック２０５、及びビット（ｂｉｔ）ロジック２０４と結合されている。確率推定テーブル２０２はＭＵＸ２０３及び確率推定ロジック２０５、並びにエントロピー符号化復号化（ｅｎｔｒｏｐｙ  ｃｏｄｉｎｇ）テーブル２０６にも結合されている。確率推定ロジック２０５は、ＭＵＸ２０３、ビットロジック２０４及びＭＵＸ２０９にも結合されている。エントロピー符号化復号化テーブル２０６は、エントロピー符号化復号化状態（ｅｎｔｒｏｐｙ  ｃｏｄｉｎｇ  ｓｔａｔｅ）ストレージ２０７、ビットロジック２０４及びＭＵＸ２０８，２０９，２１０に結合されている。ＭＵＸ２０８，２０９，２１０はビットロジック２０４にも結合されている。ＭＵＸ２１０はエントロピー符号化復号化状態ストレージ２０７にも結合されている。
【００５３】
符号化時の動作は以下のとおりである。ＬＵＴの値や確率推定ロジックの動作などの詳細については、後に詳しく述べる。ビット幅を示すが、それは例に過ぎない。ソフトウェアでは、ビット幅は８ビットの倍数又はソフトウェアを実行するコンピュータのワード・サイズの倍数に切り上げられるのが一般的である。
【００５４】
まず、ｃｏｎｔｅｘｔ（文脈ビン）２１１を用いて文脈メモリ２０１をアドレス指定する。ｃｏｎｔｅｘｔ２１１に応じて、文脈メモリ２０１は、確率推定状態ＰＳＴＡＴＥであるｐｓｔａｔｅ２１４とＭＰＳであるｍｐｓ２１５を出力する。アドレスのビット数（及びメモリロケーション数）はアプリケーション次第である。一実施例では、５４０個のメモリロケーションが使用され、文脈メモリ２０１はｐｓｔａｔｅ２１４として９ビット、ｍｐｓ２１５として１ビットを出力する。図２に示す１０ビットの２値テンプレートは、１０２４個のメモリロケーションを必要とする。
【００５５】
ｐｓｔａｔｅ２１４が入力されると、確率推定テーブル２０２（一実施例ではＬＵＴ）はいくつかの出力を発生する。確率推定テーブル２０２は確率推定値ｐｃｌａｓｓ２１９を出力する。確率推定テーブル２０２は、ＭＰＳが発生し、かつ、ＰＳＴＡＴＥの更新が必要なときには次の確率推定状態ＰＳＴＡＴＥも出力する。確率推定テーブル２０２は、ＬＰＳが発生し、かつ、ＰＳＴＡＴＥの更新が必要なときには、次のＰＳＴＡＴＥと、ＭＰＳを（０から１へ、又は１から０へ）切り替えるべきか否か（ｓｗｉｔｃｈ指示２１８として表されている）も出力する。一実施例では、この切り替え（ｓｗｉｔｃｈ）指示２１８は１ビットの信号である。ＭＰＳが発生した時に出力される次の確率推定状態と、ＬＰＳが発生した時に出力される次の確率推定状態は、ここでは、それぞれｍｐｓ＿ｐｓｔａｔｅ２１６とｌｐｓ＿ｐｓｔａｔｅ２１７と呼ばれる。
【００５６】
ｍｐｓ＿ｐｓｔａｔｅ２１６とｌｐｓ＿ｐｓｔａｔｅ２１７は、ｐｓｔａｔｅ２１４とともにＭＵＸ２０３に入力する。確率推定ロジック２０５は、ＭＵＸ２０３に入力した確率推定状態の中から、次の確率推定状態ｎｅｘｔ＿ｐｓｔａｔｅ２１３を選び出す選択指示（例えば信号（信号群））２２０を出力する。一実施例では、ｐｓｔａｔｅ２１４が２１４以下の場合に、選択指示２２０は、入力ビットがＭＰＳであるかＬＰＳであるかによってｍｐｓ＿ｐｓｔａｔｅ２１６又はｌｐｓ＿ｐｓｔａｔｅ２１７をそれぞれ選択し、ｐｓｔａｔｅ２１４が２１４より大きく、かつビットが出力される場合には、選択指示２２０は、入力ビットがＭＰＳであるかＬＰＳであるかによってｍｐｓ＿ｐｓｔａｔｅ２１６又はｌｐｓ＿ｐｓｔａｔｅ２１７をそれぞれ選択する。他方、ｐｓｔａｔｅ２１４が２１４より大きく、かつビットが全く出力されない（符号化時）か消費されない（復号化時）場合には、選択指示２２０はｐｓｔａｔｅ２１４をｎｅｘｔ＿ｐｓｔａｔｅ２１３として選択する。
【００５７】
エントロピー符号化復号化テーブル２０６は、ｐｃｌａｓｓ２１９と、エントロピー符号化復号化状態ストレージ２０７から出るＦＳＭ状態（ＦＳＭ＿ｓｔａｔｅ）２３６を受け取るように結合されている。一実施例では、エントロピー符号化復号化状態ストレージ２０７はレジスタ、その他の一時的なバッファ、キュー又は記憶機構からなる。エントロピー符号化復号化テーブル２０６は、ビット生成ＬＵＴとして働く。最初は、エントロピー符号化復号化状態は０である。エントロピー符号化復号化テーブル２０６は、符号語（例えばビットパターン、トークン、シンボルなど）のｃｗ（符号語）＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８を、符号化データストリームとして出力する。ｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８は、符号化器にＭＰＳが入力されたときと、ＬＰＳが入力されたときとにそれぞれ出力される符号語である。一実施例では、ｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８は８ビットの符号語である。
【００５８】
また、エントロピー符号化復号化テーブル２０６は、その入力に応じて、出力ビット数の指示も出力する。すなわち、エントロピー符号化復号化テーブル２０６は、符号語のサイズ、すなわち実際のビットパターンからなるｃｗ＿ｍｐｓ２２７及びｃｗ＿ｌｐｓ２２８のビット数をそれぞれ示すｓｉｚｅ＿ｍｐｓ２３０及びｓｉｚｅ＿ｌｐｓ２３１を出力する。一実施例では、ｓｉｚｅ＿ｍｐｓ２３０とｓｉｚｅ＿ｌｐｓ２３１はそれぞれ４ビットからなる。エントロピー符号化復号化テーブル２０６の出力には、ｓｔａｔｅ＿ｍｐｓ２３３とｓｔａｔｅ＿ｌｐｓ２３４もあり、これらは、ＭＰＳ又はＬＰＳが出力される場合の次のエントロピーコーダー状態をそれぞれ示す。一実施例では、ｓｔａｔｅ＿ｍｐｓ２３３とｓｔａｔｅ＿ｌｐｓ２３４はいずれも６ビットからなる。
【００５９】
ビットロジック２０４は、符号化対象ビット（ｂｉｔ＿ｉｎ）２２２をｍｐｓ２１５と比較し、それらが同一のときには、確からしい旨のｌｉｋｅｌｙ指示（例えば信号（群））２２３を発生する。他方、同一でないときには、ｌｉｋｅｌｙ指示２２３はアサートされない。
【００６０】
ｌｉｋｅｌｙ指示２２３が真であるとき（すなわち、アサートされたとき）には、ＭＵＸ２０８，２０９，２１０より、ｃｗ＿ｍｐｓ２２７、ｓｉｚｅ＿ｍｐｓ２３０及びｓｔａｔｅ＿ｍｐｓ２３３が、出力ビットストリーム（ｃｏｄｅｄ＿ｄａｔａ＿ｏｕｔ２２９）、出力サイズ（ｓｉｚｅ２３２）、及び、（エントロピー符号化復号化状態ストレージ２０７に格納される）次のＦＳＭ状態ｎｅｘｔ＿ＦＳＭ＿ｓｔａｔｅ２３５として、それぞれ出力される。ｌｉｋｅｌｙ指示２２３が真でないときには、ｃｗ＿ｌｐｓ２２８、ｓｉｚｅ＿ｌｐｓ２３１及びｓｔａｔｅ＿ｌｐｓ２３４がＭＵＸ２０８，２０９，２１０よりそれぞれ出力される。
【００６１】
確率推定ロジック２０５は、次のＭＰＳの指示であるｎｅｘｔ＿ｍｐｓ２１２を決定し、また、次のＰＳＴＡＴＥの指示であるｎｅｘｔ＿ｐｓｔａｔｅ２１３を、現在の確率推定状態ｐｓｔａｔｅ２１４にするか、更新後の値であるｐｓｔａｔｅ＿ｍｐｓ２１６とｐｓｔａｔｅ＿ｌｐｓ２１７の一方にするか制御する。一実施例では、ＬＰＳが発生し、かつ、ＰＳＴＡＴＥが４以下であるか２６２であるときに、確率推定ロジック２０５はｎｅｘｔ＿ｍｐｓ２１２を切り替えるべきと判断する。ｎｅｘｔ＿ｐｓｔａｔｅ２１３の選択制御のために、ＭＵＸ２０３の選択入力に対する選択指示２２０を発生するロジックも含まれている。
【００６２】
ｎｅｘｔ＿ｍｐｓ２１２とｎｅｘｔ＿ｐｓｔａｔｅ２１３は、ｃｏｎｔｅｘｔ２１１に基づいたアドレスによってアドレス指定された文脈メモリ２０１のロケーションに書き込まれる。一実施例では、このアドレスはｃｏｎｔｅｘｔ２１１であり、書き込まれるデータはｎｅｘｔ＿ｍｐｓ２１２とｎｅｘｔ＿ｐｓｔａｔｅ２１３である。
【００６３】
このようにして、確率推定とＦＳＭビット生成のテーブルが分離したＬＵＴベースのコーダーは符号化を行う。
【００６４】
このＬＵＴベースのコーダーは、同様の方法で復号化を行う。復号化を開始するため、文脈メモリ２０１がｃｏｎｔｅｘｔ２１１によってアドレス指定される。ｃｏｎｔｅｘｔ２１１に応じて、文脈メモリ２０１はｐｓｔａｔｅ２１４とｍｐｓ２１５を出力する。前述のように、アドレスのビット数（及びメモリロケーション数）はアプリケーション次第である。一実施例では、文脈メモリ２０１は、ｐｓｔａｔｅ２１４として９ビットを、ｍｐｓ２１５として１ビットを、出力する。
【００６５】
ｐｓｔａｔｅ２１４に応じて、確率推定テーブル２０２は確率推定値ｐｃｌａｓｓ２１９を出力する。一実施例では、ｐｃｌａｓｓ２１９は４ビットからなる。確率推定テーブル２０２は、ＭＰＳが発生し、かつＰＳＴＡＴＥの更新が必要であるときには、次のＰＳＴＡＴＥを出力する。この場合、次のＰＳＴＡＴＥはｍｐｓ＿ｐｓｔａｔｅ２１６である。一実施例では、ＰＳＴＡＴＥの更新が必要となるのは、ｐｓｔａｔｅ２１４が２１４以下であるか、ｐｓｔａｔｅ２１４が２１４より大きく、かつビットが消費される場合である。一実施例では、ｍｐｓ＿ｐｓｔａｔｅ２１６は９ビットである。また、確率推定テーブル２０２は、ＬＰＳが発生し、かつＰＳＴＡＴＥの更新が必要なときには、次のＰＳＴＡＴＥと、ＭＰＳの（０から１へ、又は１から０への）切り替え指示を出力する。この場合、次のＰＳＴＡＴＥはｌｐｓ＿ｐｓｔａｔｅ２１７によって指示され、ＭＰＳを切り替えるか否かはｓｗｉｔｃｈ指示（例えば信号（群））２１８によって指示される。一実施例では、ｌｐｓ＿ｐｓｔａｔｅ２１７とｓｗｉｔｃｈ指示２１８は、それぞれ９ビットと１ビットである。
【００６６】
エントロピー符号化復号化テーブル２０６は、ｐｃｌａｓｓ２１９と、（エントロピー符号化復号化状態ストレージ２０７からの）ＦＳＭ＿ｓｔａｔｅ２３６を受け取るように結合されている。これらの入力に応じて、エントロピー符号化復号化テーブル（ビット生成ＬＵＴ）２０６は、実際のビットパターン（例えば符号語、トークン、シンボルなど）からなるｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８の実際のビット数、並びに、符号語のｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８のそれぞれのサイズであるｓｉｚｅ＿ｍｐｓ２３０とｓｉｚｅ＿ｌｐｓ２２８を出力する。ｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８は、復号化時には利用されないので、符号化専用の態様では発生する必要はない。一実施例では、これらのサイズ指示はそれぞれ４ビットであるが、符号語は８ビット長である。エントロピー符号化復号化テーブル２０６は、次のエントロピーコーダー状態としてｓｔａｔｅ＿ｍｐｓ２３３とｓｔａｔｅ＿ｌｐｓ２３４も出力する。一実施例では、これら次のエントロピーコーダー状態は６ビットからなる。なお、エントロピーコーダー状態は最初は０である。
【００６７】
この復号化プロセスにおいて、エントロピー符号化復号化テーブル２０６は、符号化ストリーム中のＭＰＳビットパターンとＬＰＳビットパターンの間隔を示す分割値（ｓｐｌｉｔ値）２２６も出力する。一実施例では、ｓｐｌｉｔ値２２６は８ビットのデータからなる。エントロピー符号化復号化テーブル２０６は、ｓｐｌｉｔ値２２６の「００００００００」側のビットパターンがＭＰＳを表すか否かを示すｆｐｓ指示又は値２２５も出力する。一実施例では、ｆｐｓ値２２５は１ビット値である。ｓｐｌｉｔ値２２６とｆｐｓ値２２５の利用方法については後に詳述する。
【００６８】
ビットロジック２０４は、ｆｐｓ値２２５及びｓｐｌｉｔ値２２６並びにｍｐｓ２１５及びｄａｔａ＿ｉｎ２２１を受け取るように接続されている。これら入力に応じて、ビットロジック２０４は、ビットストリームｄａｔａ＿ｉｎ２２１の８ビットをｓｐｌｉｔ値２２６と比較し、図２０に示す真理値表に従ってｌｉｋｅｌｙ指示（信号（信号群））２２３を発生する。
【００６９】
ｌｉｋｅｌｙ指示２２３が真ならば、ｓｔａｔｅ＿ｍｐｓ２３３がｎｅｘｔ＿＿ＦＳＭ＿ｓｔａｔｅ２３５としてＭＵＸ２１０より出力され、エントロピー符号化復号化状態ストレージ２０７に格納される。また、ｌｉｋｅｌｙ指示２２３が真ならば、ｓｉｚｅ＿ｍｐｓ２３０がＭＵＸ２０９より出力され、復号化に使用済みでもう必要でない符号化データのビット数を指定する。これによって、ｄａｔａ＿ｉｎ２２１をシフト入力するシフトレジスタ（煩雑化を避けるため図示されていない）の制御が可能になる。他方、ｌｉｋｅｌｙ指示２２３が真でなければ、ｓｉｚｅ＿ｌｐｓ２３１とｓｔａｔｅ＿ｌｐｓ２３４がＭＵＸ２０９，２１０よりそれぞれ出力される。なお、ｄａｔａ＿ｏｕｔ２２９は、復号化時には利用されない（すなわち「何でも構わない」）。
【００７０】
また、復号化時に、確率推定ロジック２０５は次のＭＰＳ値を決定し、それをｎｅｘｔ＿ｍｐｓ２１２として出力する。一実施例では、ｎｅｘｔ＿ｍｐｓ２１２は１ビット値である。一実施例では、このＭＰＳ値は、ＬＰＳが発生し、かつ、ＰＳＴＡＴＥが４以下であるか２６２であるときに切り替えられる。確率推定ロジック２０５はまた、次のＰＳＴＡＴＥが、ｐｓｔａｔｅ２１４で示される現在のＰＳＴＡＴＥであるか、ｍｐｓ＿ｐｓｔａｔｅ２１６又はｌｐｓ＿ｐｓｔａｔｅ２１７で示される更新されたＰＳＴＡＴＥ値の一方であるか制御する。確率推定ロジック２０５は、この選択を、ＭＵＸ２０３に対する選択指示（例えば信号（信号群））２２０を用いて制御する。ＭＵＸ２０３の出力がｎｅｘｔ＿ｐｓｔａｔｅ２１３である。
【００７１】
ｎｅｘｔ＿ｍｐｓ２１２とｎｅｘｔ＿ｐｓｔａｔｅ２１３は共に、ｃｏｎｔｅｘｔ２１１によりアドレス指定された文脈メモリ２０１のロケーションに書き込まれる。
【００７２】
文脈メモリ２０１は、符号化でも復号化でも入力は同じであることに注意されたい。また、復号化動作又は符号化動作を有効にするためのイネーブル・ロジックは示さていないが、当業者には明白であろう。
【００７３】
なお、図３のコーダーは、本明細書において説明した他のコーダーと同様に、２つの独立したデータ入力を有し、その一つは符号化データ用、もう一つは符号化されていないデータ用のものである。一実施例では、コーダーは、これら２種類のデータを同じ入力又はポートで受け取り、コーダーの関連部分すなわち選択ロジックにどちらの種類のデータを現在受け取っているか知らせるための周知のロジック及び／又は１つ以上の符号化／復号化制御信号を用いる。このような入力構造を、本明細書に述べるどの実施例にも採用できる。
【００７４】
図４は、単一のＬＵＴで確率推定とビット生成の両方を行う構成のＦＳＭコーダーを示す。単一のＬＵＴを使うことにより、ソフトウェアによる実装に使われる操作（命令）が減るが、ＬＵＴは大きくなる。
【００７５】
符号化時の動作は以下のとおりである。まず、ｃｏｎｔｅｘｔ２１１を用いて文脈メモリ２０１をアドレス指定する。ｃｏｎｔｅｘｔ２１１に応じて、文脈メモリ２０１はｐｓｔａｔｅ２１４とｍｐｓ２１５を出力する。アドレスのビット数（及びメモリロケーション数）はアプリケーション次第である。一実施例では、５４０個のメモリロケーションが使用され、文脈メモリ２０１はｐｓｔａｔｅ２１４として９ビット、ｍｐｓ２１５として１ビットを出力する。
【００７６】
ｐｓｔａｔｅ２１４が入力されると、確率推定及びビット生成のための統合型テーブル（ｃｏｍｂｉｎｅｄ  ｍｅｍｏｒｙ）３０１は、ＭＰＳが発生し、かつ、ＰＳＴＡＴＥの更新が必要なときには次の確率推定状態ＰＳＴＡＴＥを出力する。一実施例では、ＰＳＴＡＴＥの更新が必要となるのは、ｐｓｔａｔｅ２１４が２１４以下の時、又は、ｐｓｔａｔｅ２１４が２１４より大きく、かつビットが出力される（符号化の場合）か消費される（復号化の場合）場合である。一実施例では、ｍｐｓ＿ｐｓｔａｔｅ２１６は９ビットである。統合型テーブル３０１は、ＬＰＳが発生し、かつＰＳＴＡＴＥの更新が必要なときには、次のＰＳＴＡＴＥと、ＭＰＳの（０から１へ、又は１から０への）切り替え指示すなわちｓｗｉｔｃｈ指示２１８も出力する。一実施例では、ｓｗｉｔｃｈ指示２１８は１ビット信号である。ＭＰＳが発生した時の次の確率推定状態とＬＰＳが発生した時の次の確率推定状態は、それぞれｍｐｓ＿ｐｓｔａｔｅ２１６とｌｐｓ＿ｐｓｔａｔｅ２１７である。ｍｐｓ＿ｐｓｔａｔｅ２１６とｌｐｓ＿ｐｓｔａｔｅ２１７は、ｐｓｔａｔｅ２１４と共にＭＵＸ２０３に入力する。確率推定ロジック２０５は、ＭＵＸ２０３に入力された確率推定状態から、次の確率推定状態であるｎｅｘｔ＿ｐｓｔａｔｅ２１３を選ぶ選択指示（例えば信号（信号群））２２０を出力する。
【００７７】
統合型テーブル３０１は、エントロピー符号化復号化状態ストレージ２０７からＦＳＭ状態すなわちＦＳＭ＿ｓｔａｔｅ２３６を受け取るように接続されている。一実施例では、エントロピー符号化復号化状態ストレージ２０７は、レジスタ、一時的なバッファ、キュー又はその他の記憶機構からなる。統合型テーブル３０１は、ビット生成ＬＵＴとして働く。最初は、エントロピー符号化復号化状態は０であり、統合型テーブル３０１は、符号語（ビットパターン）であるｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８を符号化データストリームとして出力する。一実施例では、ｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８は８ビットの符号語である。統合型テーブル３０１は、出力ビット数指示も出力する。すなわち、統合型テーブル３０１は、符号語のサイズ、つまり実際のビットパターンからなるｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８のビット数をそれぞれ示すｓｉｚｅ＿ｍｐｓ２３０とｓｉｚｅ＿ｌｐｓ２３１を出力する。一実施例では、ｓｉｚｅ＿ｍｐｓ２３０とｓｉｚｅ＿ｌｐｓ２３１はそれぞれ４ビットからなる。統合型テーブル３０１の出力には、ｓｔａｔｅ＿ｍｐｓ２３３とｓｔａｔｅ＿ｌｐｓ２３４もあり、これらは、ＭＰＳ又はＬＰＳが出力される場合の次のエントロピーコーダー状態をそれぞれ示す。一実施例では、ｓｔａｔｅ＿ｍｐｓ２３３とｓｔａｔｅ＿ｌｐｓ２３４はいずれも６ビットからなる。
【００７８】
ビットロジック２０４は、符号化対象ビットであるｂｉｔ＿ｉｎ２２２をｍｐｓ２１５と比較し、それらが同一のときにｌｉｋｅｌｙ指示２２３をアサートする（ｌｉｋｅｌｙ指示２２３は真である）。他方、同一でないときにはｌｉｋｅｌｙ指示２２３はアサートされない（ｌｉｋｅｌｙ指示は真でない）。
【００７９】
ｌｉｋｅｌｙ指示２２３が真のときには（アサートされているときには）、ＭＵＸ２０８，２０９，２１０より、ｃｗ＿ｍｐｓ２２７、ｓｉｚｅ＿ｍｐｓ２３０及びｓｔａｔｅ＿ｍｐｓ２３３がそれぞれ出力ビットストリームｄａｔａ＿ｏｕｔ２２９、ｓｉｚｅ指示２３２及び（エントロピー符号化復号化状態ストレージ２０７に格納される）ｎｅｘｔ＿ＦＳＭ＿ｓｔａｔｅ２３５に出力される。ｌｉｋｅｌｙ指示２２３が真でないときには、ｃｗ＿ｌｐｓ２２８、ｓｉｚｅ＿ｌｐｓ２３１及びｓｔａｔｅ＿ｌｐｓ２３４がＭＵＸ２０８，２０９，２１０よりそれぞれ出力される。
【００８０】
確率推定ロジック２０５は、ｎｅｘｔ＿ｍｐｓ２１２を決定し、また、次のＰＳＴＡＴＥすなわちｎｅｘｔ＿ｐｓｔａｔｅ２１３を、ｐｓｔａｔｅ２１４により示される現在のＰＳＴＡＴＥにするか、更新後の値であるｍｐｓ＿ｐｓｔａｔｅ２１６又はｌｐｓ＿ｐｓｔａｔｅ２１７にするか制御する。この制御は、ＭＵＸ２０３に対する選択指示２２０を発生することによって行われることは、前述の通りである。
【００８１】
ｎｅｘｔ＿ｍｐｓ２１２とｎｅｘｔ＿ｐｓｔａｔｅ２１３は、ｃｏｎｔｅｘｔ２１１によってアドレス指定された文脈メモリ２０１のロケーションに書き込まれる。すなわち、アドレスはｃｏｎｔｅｘｔ２１１からなり、書き込まれるデータはｎｅｘｔ＿ｍｐｓ２１２とｎｅｘｔ＿ｐｓｔａｔｅ２１３からなる。
【００８２】
図４のコーダーの復号化動作も同様である。まず、ｃｏｎｔｅｘｔ２１１によって文脈メモリ２０１をアドレス指定する。ｃｏｎｔｅｘｔ２１１に応じて、文脈メモリ２０１はｐｓｔａｔｅ２１４とｍｐｓ２１５を出力する。アドレスのビット数（及びメモリロケーション数）はアプリケーション次第である。一実施例では、文脈メモリ２０１はｐｓｔａｔｅ２１４として９ビット、ｍｐｓ２１５として１ビットを出力する。
【００８３】
ｐｓｔａｔｅ２１４が入力されると、統合型テーブル３０１は、ＭＰＳが発生し、かつＰＳＴＡＴＥの更新が必要であるときには、次の確率推定状態ＰＳＴＡＴＥを出力する。統合型テーブル３０１は、ＬＰＳが発生し、かつＰＳＴＡＴＥの更新が必要なときには、次のＰＳＴＡＴＥと、ＭＰＳの（０から１へ、又は１から０への）切り替え指示すなわちｓｗｉｔｃｈ指示２１８を出力する。一実施例では、ｓｗｉｔｃｈ指示２１８は１ビットの信号である。ＭＰＳが発生した時とＬＰＳが発生した時の次の確率推定状態はそれぞれｍｐｓ＿ｐｓｔａｔｅ２１６とｌｐｓ＿ｐｓｔａｔｅ２１７である。ｍｐｓ＿ｐｓｔａｔｅ２１６とｌｐｓ＿ｐｓｔａｔｅ２１７は、ｐｓｔａｔｅ２１４と共にＭＵＸ２０３に入力する。確率推定ロジック２０５は、ＭＵＸ２０３に入力した確率推定状態より、次の確率推定状態ｎｅｘｔ＿ｐｓｔａｔｅ２１３を選択するための選択指示２２０を出力する。
【００８４】
（エントロピー符号化復号化状態ストレージ２０７から出力される）ＦＳＭ＿ｓｔａｔｅ２３６も統合型テーブル（ＬＵＴ）３０１に入力される。一実施例では、エントロピー符号化復号化状態ストレージ２０７は、レジスタ、一時的なバッファ、キュー又はその他の記憶機構からなる。統合型テーブル３０１はビット生成ＬＵＴとして働く。最初は、エントロピー符号化復号化状態は０である。統合型テーブル３０１は、符号語（ビットパターン、トークン、シンボルなど）であるｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８を出力し、これらはｌｉｋｅｌｙ指示２２３がアサートされているか否かに応じて符号化データストリームとなる。一実施例では、ｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８は８ビットの符号語である。復号化器専用の実施例ではｃｗ＿ｌｐｓ２２７とｃｗ＿ｌｐｓ２２８は必要でない。統合型テーブル３０１は、出力ビット数の指示も出力する。すなわち、統合型テーブル３０１は、符号語のサイズ、つまり実際のビットパターンからなるｃｗ＿ｍｐｓ２２７とｃｗ＿ｌｐｓ２２８のビット数をそれぞれ示すｓｉｚｅ＿ｍｐｓ２３０とｓｉｚｅ＿ｌｐｓ２３１も出力する。一実施例では、ｓｉｚｅ＿ｍｐｓ２３０とｓｉｚｅ＿ｌｐｓ２３１は４ビットからなる。統合型テーブル３０１の出力には、ｓｔａｔｅ＿ｍｐｓ２３３とｓｔａｔｅ＿ｌｐｓ２３４もあり、これらはＭＰＳ又はＬＰＳが出力される場合の次のエントロピーコーダー状態をそれぞれ示す。一実施例では、ｓｔａｔｅ＿ｍｐｓ２３３とｓｔａｔｅ＿ｌｐｓ２３４は６ビットからなる。
【００８５】
図４のビットロジック２０４の動作は、ｓｐｌｉｔ値２２６とｆｐｓ値２２５を利用して復号化を実行することも含めて、図３に関連して述べたものと同様である。
【００８６】
ｌｉｋｅｌｙ指示２２３が真のときには、ＭＵＸ２１０よりｓｔａｔｅ＿ｍｐｓ２３３がｎｅｘｔ＿ＦＳＭ＿ｓｔａｔｅ２３５として出力され、エントロピー符号化復号化状態ストレージ２０７に格納される。また、ｌｉｋｅｌｙ指示２２３が真のときに、復号化に使用済みでもう必要でない符号化データのビット数を指定するため、ｓｉｚｅ＿ｍｐｓ２３０がＭＵＸ２０９より出力される。これにより、ｄａｔａ＿ｉｎ２２１をシフト入力するシフトレジスタ（煩雑化を避けるため図示されていない）の制御が可能になる。他方、ｌｉｋｅｌｙ指示２２３が真でなければ、ｓｉｚｅ＿ｌｐｓ２３１とｓｔａｔｅ＿ｌｐｓ２３４がＭＵＸ２０９，２１０よりそれぞれ出力される。なお、復号化時は、ｄａｔａ＿ｏｕｔ２２９は利用されない（すなわち「何でも構わない」）。
【００８７】
確率推定ロジック２０５は、ｎｅｘｔ＿ｍｐｓ２１２を決定し、また、次のＰＳＴＡＴＥすなわちｎｅｘｔ＿ｐｓｔａｔｅ２１３を、現在のＰＳＴＡＴＥすなわちｐｓｔａｔｅ２１４にするか、更新後の値であるｍｐｓ＿ｐｓｔａｔｅ２１６又はｌｐｓ＿ｐｓｔａｔｅ２１７にするか制御する。この制御は、ＭＵＸ２０３に対する選択指示２２０を発生することによって行われることは、前述の通りである。
【００８８】
ｎｅｘｔ＿ｍｐｓ２１２とｎｅｘｔ＿ｐｓｔａｔｅ２１３は、ｃｏｎｔｅｘｔ２１１によってアドレス指定された文脈メモリ２０１のロケーションに書き込まれる。すなわち、アドレスはｃｏｎｔｅｘｔ２１１からなり、書き込まれるデータはｎｅｘｔ＿ｍｐｓ２１２とｎｅｘｔ＿ｐｓｔａｔｅ２１３からなる。
【００８９】
図２１に、さまざまなＬＵＴのサイズをまとめて示す。図２１の表を見ると、復号化のための分割点（split points)を持つ単一の符号化／復号化テーブルを用いると、コードストリームを入力として利用する復号化専用テーブルを用いるよりも、かなりのコスト削減になることが分かる。図２１の表において、「分離」とラベル付けされたＬＵＴは「確率推定専用」ＬＵＴを必要とするが、「統合」とラベル付けされたＬＵＴは「確率推定専用」ＬＵＴを必要としない。
【００９０】
［ロジック・ベースのＦＳＭコーダー］
本発明の一実施例によれば、ＦＳＭコーダーはハードウェアにより実装される。以下の説明で、そのような実施例を少なくとも一つ述べる。説明の一部は、代表的なハードウェア記述言語Ｖｅｒｉｌｏｇによって記述される。
【００９１】
本発明のＦＳＭコーダーは、ハードウェアコストが減少する。一実施例では、エントロピーコーダー（ビット生成）ルックアップテーブルのサイズがかなり縮小され、ある実施例では、冗長なエントリーが使われないほぼ最小サイズまで縮小される。ロジックで、全ての必要情報を冗長性のないＬＵＴエントリーより生成する。符号語のビットパターンと長さを、そのＬＵＴで生成する必要はない。それらは、ロジックで生成されるからである。
【００９２】
図５は、本発明のＦＳＭコーダーの一実施例のブロック図である。確率状態展開部（ｐｅｍ＿ｅｘｐａｎｄ部）４０１は多重文脈確率推定部（ｐｅｍ＿ｃｏｄｅ部）４０２及びビット生成部（ｂｉｔ＿ｇｅｎｅｒａｔｅ部）４０３に接続されている。ｐｅｍ＿ｃｏｄｅ部４０２は、ｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３にも接続されている。パック部（ｐａｃｋ部）４０４とアンパック部（ｕｎｐａｃｋ部）４０５もｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３に接続されている。
【００９３】
ｐｅｍ＿ｃｏｄｅ部４０２は、文脈メモリを内蔵し、多重文脈確率推定を行う。ｐｅｍ＿ｅｘｐａｎｄ部４０１は、ｐｓｔａｔｅ２１４のようなＰＳＴＡＴＥを、そのＰＳＴＡＴＥを記述する情報に変換する。ｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３は、ｐｃｌａｓｓ２１９のようなＰＣＬＡＳＳに応じて、符号化されていないビットと符号化されたビットの間の変換を行う。ｐａｃｋ部４０４は、符号化時に、可変長符号語群を結合してバイト群にする。他方、ｕｎｐａｃｋ部４０５は、復号化時に、符号化データストリームのバイト群の可変長シフト操作を行う。
【００９４】
このＦＳＭコーダー４００に対する入力は以下のとおりである。
ｂｉｔ＿ｉｎ２２２
ｐｅｍ＿ｃｏｄｅ部４０２への入力で、符号化期間に符号化対象のビットを表す。
ｄａｔａ＿ｉｎ２２１
ｕｎｐａｃｋ部４０５への入力で、符号化データ（復号化期間のビットストリーム）を表す。一実施例ではデータは１バイトずつ入力されるが、これ以外のサイズでデータ入力をしてもよい。
ｃｏｎｔｅｘｔ２１１
文脈ビン（文脈メモリのアドレス）で、ｐｅｍ＿ｃｏｄｅ部４０２に入力される。
ｃｌｏｃｋ４１０
システムクロックで、ｐｅｍ＿ｃｏｄｅ部４０２、ｐａｃｋ部４０４、ｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３、ｕｎｐａｃｋ部４０５に入力される。
一実施例では、このｃｌｏｃｋ入力４１０はＦＳＭコーダーのイネーブル信号として利用される。
ｅｎａｂｌｅ４１４
ｐｅｍ＿ｃｏｄｅ部４０２、ｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３、ｐａｃｋ部４０４及びｕｎｐａｃｋ部４０５に受け取られるように結合される制御指示（例えば信号（信号群））で、現クロックサイクルでの１ビットの符号化又は復号化を有効にする。
ｅｎｃｏｄｅ４１５
符号化又は復号化を選択する制御指示（例えば信号（信号群））。
ｆｌｕｓｈ４１３
符号化の最後でのフラッシングを有効にする制御指示（例えば信号（信号群））。ｆｌｕｓｈ信号４１３はｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３の内容を強制出力させる。フラッシングは符号化の最後に行われる操作で、ｃｏｄｅｓｔｒｅａｍ４１９へまだ出力されてない情報があれば、それが全て出力される。ｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３がフラッシングを完了すると、ｐａｃｋ部４０４に対するｂｇ＿ｄｏｎｅ＿ｆｌｕｓｈ信号４１６がアサートされる。ｂｇ＿ｄｏｎｅ＿ｆｌｕｓｈ信号４１６及びｆｌｕｓｈ信号４１３に応じて、ｐａｃｋ部４０４はそれ自体のフラッシングをする。フラッシングを完了すると、ｐａｃｋ部４０４はｄｏｎｅ＿ｆｌｕｓｈ信号４２４をアサートする。
ｒｅｓｅｔ４１１
ｐｅｍ＿ｃｏｄｅ部４０２、ｐａｃｋ部４０４、ｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３及びｕｎｐａｃｋ部４０５の内部の全ての記憶要素（例えばフリップフロップ）に対する非同期初期化指示（例えば信号（信号群））。
ｒｅｓｅｔ４１１がデアサートされると、ｐｅｍ＿ｃｏｄｅ部４０２内の文脈メモリなどの内部メモリはクリアされる。
【００９５】
このＦＳＭコーダー４００の出力は次のとおりである。
ｄａｔａ＿ｏｕｔ２２９
符号化時の符号化データ（ビットストリーム）。一実施例ではデータは１バイトずつ出力されるが、これ以外のサイズでデータを出力してもよい。
ｄａｔａ＿ｏｕｔ＿ｒｅａｄｙ４２３
現クロックサイクルのｄａｔａ＿ｏｕｔ２２９が有効であることを示す制御指示（例えば信号（信号群））。
ｂｉｔ＿ｏｕｔ２２４
復号化されたビット。
ｒｅｓｅｔ＿ｄｏｎｅ４２１
リセットが完了したことを示す制御指示（例えば信号（信号群））。一実施例では、ｒｅｓｅｔ＿ｄｏｎｅ４２１は、ｒｅｓｅｔ４１１をデアサートした後に全内部メモリがクリアされたことを示す。
ｄｏｎｅ＿ｆｌｕｓｈ４２４
ｆｌｕｓｈ信号４１３をアサートした後にフラッシングが完了したことを示す制御指示（例えば信号（信号群））。
【００９６】
ｐｅｍ＿ｅｘｐａｎｄ部４０１は、ｃｏｎｔｅｘｔ２１１に応じｐｅｍ＿ｃｏｄｅ部４０２より出力されるｐｓｔａｔｅ２１４に応じて、ｐｃｌａｓｓ２１９を発生する。ｐｅｍ＿ｅｘｐａｎｄ部４０１は、ＭＰＳが発生したときの次のＰＳＴＡＴＥの指示すなわちｍｐｓ＿ｐｓｔａｔｅ２１６と、ＬＰＳが発生したときの次のＰＳＴＡＴＥの指示すなわちｌｐｓ＿ｐｓｔａｔｅ２１７も発生する（ＭＰＳを切り替える必要がある場合）。ｍｐｓ＿ｐｓｔａｔｅ２１６とｌｐｓ＿ｐｓｔａｔｅ２１７は共に、ＰＳＴＡＴＥの更新が必要な時に用いられるＰＳＴＡＴＥを表す。ｐｅｍ＿ｅｘｐａｎｄ部４０１は、ＭＰＳの（０から１へ、又は１から０への）切り替えを指示するｓｗｉｔｃｈ指示２１８も発生する。
【００９７】
ｐｅｍ＿ｅｘｐａｎｄ部４０１は、ｕｐｄａｔｅ指示４１２によって、ＰＳＴＡＴＥの更新が必要か否かの指示も行う。一実施例では、ｕｐｄａｔｅ指示（例えば信号（信号群））４１２がアサートされると、ＭＰＳ値の如何にかかわらずＰＳＴＡＴＥが更新される。他方、ｕｐｄａｔｅ指示４１２がアサートされない（すなわち、真でない）場合、更新が行われるのは、符号語を発生もしくは利用するときに、符号語のサイズが０より大きいとき、又は出力のサイズが０未満であるときのみである。出力のサイズは出力符号語のサイズによって表され、この出力符号語のサイズはｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３より出るｓｉｚｅ指示４１８によって示される。
【００９８】
ｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３は、ｐｃｌａｓｓ２１９に応じてビット生成を行い、また、符号化対象のビットであるｂｉｔ＿ｉｎ２２２がＭＰＳ（例えば図６のＭＰＳ５２０）と同じであるか否かを指示する。この比較はｐｅｍ＿ｃｏｄｅ部４０２内で行われるが、これについては図６で詳しく述べる（例えば、コンパレータ５１２）。ｂｉｔ＿ｉｎ２２２がＭＰＳと同じならば、ｌｉｋｅｌｙ指示２２３がアサートされる。この場合、ｌｉｋｅｌｙ指示２２３は、符号化できる見込みがあることを示し、ｐｅｍ＿ｃｏｄｅ部４０２に入力される。ｐｅｍ＿ｃｏｄｅ部４０２は、ｌｉｋｅｌｙ指示２２３に応じて、ｌｉｋｅｌｙ指示２２３が真ならばｂｉｔ＿ｏｕｔ２２４をＭＰＳにし、ｌｉｋｅｌｙ指示２２３が真でなければ、その反対にする。
【００９９】
ｐｅｍ＿ｃｏｄｅ部４０２は、その入力信号に基づいて、次のＰＳＴＡＴＥであるｐｓｔａｔｅ２１４を発生し、また、復号化時には復号化ビットをｂｉｔ＿ｏｕｔ２２４として出力する。しかし、符号化時には、ｂｉｔ＿ｏｕｔ２２４は無視され、ｅｎｃｏｄｅ＿ｌｉｋｅｌｙ指示４２２がアサートされ、これはｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３に受け取られる。復号化時には、ｅｎｃｏｄｅ指示４１５はアサートされず、ｕｎｐａｃｋ部４０５はデータバイトを可変長の符号語にアンパックする。この可変長符号語はｃｏｄｅｓｔｒｅａｍ４１９としてｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３へ出力される。また、ｕｎｐａｃｋ部４０５は、現在の入力データであるｄａｔａ＿ｉｎ２２１が消費されたことを示すｄａｔａ＿ｉｎ＿ｎｅｘｔ信号４２０を出力して、次のデータビットを要求する。
【０１００】
ｃｏｄｅｓｔｒｅａｍ４１９及びｐｃｌａｓｓ２１９に応じて、ｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３はｃｏｄｅｗｏｒｄ４１７とｓｉｚｅ指示４１８を発生する。ｃｏｄｅｗｏｒｄ４１７とｓｉｚｅ指示４１８に応じて、ｐａｃｋ部４０４は可変長の符号語群を結合しバイト群にする。
【０１０１】
一実施例では、符号化と復号化を同一にするように文脈モデルを更新するためにｂｉｔ＿ｏｕｔ信号２２４が利用される。ｐａｃｋ部４０４は、復号化時には利用されない。これら各部については、より詳細に後述する。
図５に示した構成のＶｅｒｉｌｏｇ記述例を図２２及び図２３に示す。
【０１０２】
［多重文脈確率推定］
文脈メモリを内蔵し多重文脈確率推定を行うｐｅｍ＿ｃｏｄｅ部４０２の一実施例のブロック図を図６に示す。
【０１０３】
図６において、メモリイネーブル（ｍｅｍｏｒｙ＿ｅｎａｂｌｅ）ロジック５０２は更新（ｕｐｄａｔａ）指示４１２、ｓｉｚｅ指示４１８及びイネーブル（ｅｎａｂｌｅ）指示４１４を受け取るように接続されている。これらの入力に応じてｍｅｍｏｒｙ＿ｅｎａｂｌｅロジック５０２は出力を発生し、この出力はＯＲゲート５０５の一方の入力に結合される。リセット（ｒｅｓｅｔ）指示４１１はリセット（ｒｅｓｅｔ）カウンタ５０３とリセット完了（ｒｅｓｅｔ＿ｄｏｎｅ）ロジック５０４の入力に結合される。ｒｅｓｅｔカウンタ５０３の出力は、ｒｅｓｅｔ＿ｄｏｎｅロジック５０４のもう一つの入力と、ＭＵＸ５０７の一方の入力に結合される。ｒｅｓｅｔ＿ｄｏｎｅロジック５０４の出力は、ＭＵＸ５０７，５０８，５０９及びＯＲゲート５０５の否定入力に結合される選択信号である。ｒｅｓｅｔ＿ｄｏｎｅロジック５０４の出力はまた、リセット完了（ｒｅｓｅｔ＿ｄｏｎｅ）指示４２１として送出される。ＯＲゲート５０５の出力は文脈メモリ５０１の書き込みイネーブル入力（ＷＥ）に結合される。
【０１０４】
ＭＵＸ５０７，５０８，５０９は２入力のマルチプレクサである。ＭＵＸ５０７の他方の入力は、ｃｏｎｔｅｘｔ２１１と結合されている。ＭＵＸ５０８は、初期ＰＳＴＡＴＥとＭＵＸ５０６の出力を受け取るように接続されている。一実施例では、初期ＰＳＴＡＴＥは２６２である。これ以外の初期ＰＳＴＡＴＥを用いることもできる。初期ＰＳＴＡＴＥは適応化の高速化を考慮して選ぶ。高速適応化に関する詳細は、「Method  and  Apparatus  for  Encoding  and  Decoding  Data」なる発明の名称で１９９６年１２月１７日に出願され、本発明の譲受法人に譲渡され、かつ、ここに援用されるところの米国特許出願第０８／７６８，２３７号を参照されたい。
【０１０５】
ＭＵＸ５０６の各入力は、ｍｐｓ＿ｐｓｔａｔｅ２１６とｌｐｓ＿ｐｓｔａｔｅ２１７を受け取るように接続され、それら入力の一方が、ＭＵＸ５０６の選択入力に結合されたｌｉｋｅｌｙ指示２２３に応じて選択される。ＭＵＸ５０９の各入力は、初期化値（例えば、一実施例では０）と、ＭＰＳ更新（ＭＰＳ＿ｕｐｄａｔｅ）ロジック５１０の出力を受け取るように接続されている。ＭＰＳ＿ｕｐｄａｔｅロジック５１０の各入力は、ｌｉｋｅｌｙ指示２２３、ｓｗｉｔｃｈ指示２１８、及び文脈メモリ５０１から出力されるＭＰＳ５２０を受け取るように接続されている。各ＭＵＸ５０７，５０８，５０９の出力は文脈メモリ５０１の入力に接続されている。
【０１０６】
文脈メモリ５０１から出力されるＭＰＳ５２０は、コンパレータ５１１の一方の入力とコンパレータ５１２の一方の入力に結合される。コンパレータ５１１の他方の入力はｌｉｋｅｌｙ指示２２３であり、コンパレータ５１２の他方の入力はｂｉｔ＿ｉｎ２２２である。煩雑化を避けるため示されていないが、クロック（ｃｌｏｃｋ）４１０は全てのレジスタとカウンタに結合されている。
【０１０７】
ｒｅｓｅｔ指示４１１はｒｅｓｅｔカウンタ５０３を０にクリアする。ｒｅｓｅｔ指示４１１がデアサートされた後、ｒｅｓｅｔカウンタ５０３は文脈メモリ５０１の各文脈メモリロケーションのアドレスを生成し、初期ＰＳＴＡＴＥと初期ＭＰＳが各文脈メモリロケーションに書き込まれる。これら初期値の書き込みは、ｒｅｓｅｔ＿ｄｏｎｅロジック５０４から出力されるｒｅｓｅｔ＿ｄｏｎｅ信号４２１に関連し、ＭＵＸ５０７，５０８，５０９を利用して行われる。ｒｅｓｅｔ＿ｄｏｎｅ信号４２１は、ＭＵＸ５０７，５０８，５０９の選択信号として働き、ＭＵＸ５０７でｒｅｓｅｔカウンタ５０３から出る文脈メモリアドレスを、ＭＵＸ５０８で初期ＰＳＴＡＴＥを、ＭＵＸ５０９で初期ＭＰＳを、それぞれ選択する。一実施例では、初期ＰＳＴＡＴＥ値の２６２と初期ＭＰＳ値の０が文脈メモリ５０１のメモリロケーションに書き込まれる。全てのメモリロケーションの初期化後、ｒｅｓｅｔ＿ｄｏｎｅロジック５０４はｒｅｓｅｔ＿ｄｏｎｅ信号４２１をアサートする。
【０１０８】
符号化時には、文脈メモリ５０１は、その書き込みイネーブル（ＷＥ）入力がアサートされた時に書き込まれる。文脈メモリ５０１のＷＥ入力は、ＯＲゲート５０５の出力が高電位の時にアサートされる。ＯＲゲート５０５の出力が高電位になるのは、ｒｅｓｅｔ＿ｄｏｎｅロジック５０４の出力が低電位の時、すなわちリセットが完了した時、あるいは、ｍｅｍｏｒｙ＿ｅｎａｂｌｅロジック５０２の出力が低電位の時である。
【０１０９】
文脈メモリ５０１への書き込み時に、リセット状態でなければ、ｃｏｎｔｅｘｔ２１１による文脈メモリアドレスがＭＵＸ５０７を介して、次の確率推定状態がＭＵＸ５０８を介して、ＭＰＳがＭＵＸ５０９を介して、それぞれ与えられる。ＭＵＸ５０８の入力はＭＵＸ５０６の出力であるが、この出力はｍｐｓ＿ｐｓｔａｔｅ２１６かｌｐｓ＿ｐｓｔａｔｅ２１７であり、そのいずれか一方がｌｉｋｅｌｙ指示２２３に基づいて選ばれる。ＭＰＳ＿ｕｐｄａｔｅロジック５１０より与えられるＭＰＳ値は、ｓｗｉｔｃｈ指示２１８がアサートされていて、かつ、ＬＰＳが発生した場合にはＭＰＳ値の補数である。
【０１１０】
文脈メモリ５０１に書き込まれるデータは、ｌｉｋｅｌｙ指示２２３により選ばれたＰＳＴＡＴＥと、ＭＰＳであるが、このＭＰＳはｌｉｋｅｌｙ指示２２３が０でｓｗｉｔｃｈ指示２１８が１の時に変更される。一実施例では、ＭＵＸ５０６は、ｌｉｋｅｌｙ指示２２３が真ならばｍｐｓ＿ｐｓｔａｔｅ２１６を出力し、そうでなければ、ｌｐｓ＿ｐｓｔａｔｅ２１７を出力する。ＭＰＳ＿ｕｐｄａｔｅロジック５１０の出力は、ｓｗｉｔｃｈ指示２１８と、ｌｉｋｅｌｙ指示２２３を否定したものとのＡＮＤをとった結果を、ＭＰＳとＸＯＲしたものである。
【０１１１】
文脈メモリ５０１の出力はｐｓｔａｔｅ２１４とＭＰＳ５２０である。符号化の場合、符号化対象のビット（ｂｉｔ＿ｉｎ２２２）がコンパレータ５１２によってＭＰＳ５２０と比較され、ｅｎｃｏｄｅ＿ｌｉｋｅｌｙ指示４２２が生成される。一実施例では、ｅｎｃｏｄｅ＿ｌｉｋｅｌｙ指示４２２は、ＭＰＳ５２０とｂｉｔ＿ｉｎ２２２とのＸＮＯＲをとることによって生成されるが、このＭＰＳ５２０は文脈メモリ５０１のエントリーの１ビットで表される。なお、ｅｎｃｏｄｅ＿ｌｉｋｅｌｙ指示４２２をｌｉｋｅｌｙ指示２２３へフィードバックするためのロジック（不図示）が用いられる。これについては後に詳しく述べる。復号化の場合、ｌｉｋｅｌｙ指示２２３がコンパレータ５１１によってＭＰＳ５２０と比較されることにより復号化ビット（ｂｉｔ＿ｏｕｔ２２４）が生成される。一実施例では、ｂｉｔ＿ｏｕｔ２２４は、ＭＰＳ５２０とｌｉｋｅｌｙ指示２２３のＸＮＯＲをとることにより生成される。このＸＮＯＲをとることは、ＭＰＳ５２０とｌｉｋｅｌｙ指示２２３のマッチングをとることと等価である。
【０１１２】
図６においては、メモリは一つだけ使用されており、このメモリは一つの文脈に関する情報を出力する。速度を上げるため、並列メモリを使用してもよい。既に復号化されたビットは次のビットのための文脈をもたらすことが多い。このような文脈モデルへのフィードバックは、ここではビット−文脈遅延と呼ぶが、速度を低下させることがある。速度を上げるための一つの方法は、前ビットの両方の値のために使われる文脈ビンに対応した複数のメモリ出力を用意することである。メモリアクセスを、前ビットの生成と並行して（パイプライン化して）行ってもよい。その２つの文脈ビンのうちの適切な文脈ビンを、前ビットが分かった時に選択すればよい。選択操作は一般にメモリアクセスよりずっと高速である。複数の出力を持つ一つのメモリを使用してもよいし、複数のメモリを使用してもよい。
【０１１３】
メモリアクセスをパイプライン化した場合、同じメモリロケーションが連続的に（すなわち、ある最少数の連続したクロックサイクル間に）２度アクセスされた時に古い情報を利用してはならない。あるメモリロケーションが読み出されたならば、そのメモリロケーションは、更新値がメモリに書き戻されるまでは再び読み出してはならない。後続の読み出しでは、メモリを読み出すのではなく、既にメモリの外部にある値を使用して処理を施さなければならない。
図６に示した構成のＶｅｒｉｌｏｇ記述例を図２４及び図２５に示す。
【０１１４】
［確率状態展開］
図７は、ｐｓｔａｔｅ２１４を当該ＰＳＴＡＴＥを記述する情報に変換し、それを出力するｐｅｍ＿ｅｘｐａｎｄ部４０１の一実施例のブロック図である。
【０１１５】
図７において、確率状態展開（ｐｅｍ＿ｅｘｐａｎｄ）部４０１は、確率クラス部（ｐｃｌａｓｓ部）６０１、ＭＰＳ確率状態部（ｍｐｓ＿ｐｓｔａｔｅ部）６０２、ＬＰＳ確率状態部（ｌｐｓ＿ｐｓｔａｔｅ部）６０３、切り替え部（ｓｗｉｔｃｈ部）６０４及び更新部（ｕｐｄａｔｅ部）６０５からなり、これら各部はｐｓｔａｔｅ２１４を受け取るように接続され、それに対応した出力を発生する。
【０１１６】
ｐｃｌａｓｓ部６０１は、ｐｓｔａｔｅ２１４に応じてｐｃｌａｓｓ２１９を発生する。一実施例では、この確率推定値は４ビット値である。一実施例では、ｐｓｔａｔｅ２１４は０から２６８まで変化するが、０から１５までの範囲のｐｃｌａｓｓに変換される。この機能を遂行するためのコードの例を後に示す。
【０１１７】
ｍｐｓ＿ｐｓｔａｔｅ部６０２は（ｐｓｔａｔｅ２１４に応じて）ｍｐｓ＿ｐｓｔａｔｅ２１６を発生するが、このｍｐｓ＿ｐｓｔａｔｅ２１６は、ＭＰＳが発生し、かつ、ＰＳＴＡＴＥが更新されるときの次のＰＳＴＡＴＥである。一実施例では、ｍｐｓ＿ｐｓｔａｔｅ２１６は９ビットからなる。一実施例では、ｍｐｓ＿ｓｔａｔｅ２１６は、ｐｓｔａｔｅ２１４を、その値に基づいた０から５までの整数だけ増加させたものか、１１だけ減少させたものである。
【０１１８】
ｌｐｓ＿ｐｓｔａｔｅ部６０３は（ｐｓｔａｔｅ２１４に応じて）ｌｐｓ＿ｐｓｔａｔｅ２１７を発生するが、このｌｐｓ＿ｐｓｔａｔｅ２１７はＬＰＳが発生し、かつ、ＰＳＴＡＴＥが更新されるときの次のＰＳＴＡＴＥである。一実施例では、ｌｐｓ＿ｐｓｔａｔｅ２１７は９ビットからなる。一実施例では、ｌｐｓ＿ｐｓｔａｔｅ２１７は、ｐｓｔａｔｅ２１４を、その値に基づいた整数１，３又は５だけ増加させたものか、−１から１２４６までの範囲内のある整数だけ減少させたものである。
【０１１９】
ｓｗｉｔｃｈ部６０４は、ＭＰＳを切り替える必要があるときにｓｗｉｔｃｈ指示２１８をアサートする。一実施例では、ｐｓｔａｔｅ２１４が４以下のとき、又は２６２に等しいときにｓｗｉｔｃｈ指示２１８がアサートされ、それ以外ではｓｗｉｔｃｈ指示２１８がデアサートされる。ｓｗｉｔｃｈ指示２１８は、発生しそうもないビットが発生したときに、文脈メモリ５０１のような文脈メモリに格納されているＭＰＳの変更を指示する。一実施例では、ｓｗｉｔｃｈ指示２１８は１本の信号である。
【０１２０】
一実施例では、ｕｐｄａｔｅ部６０５は、ｐｓｔａｔｅ２１４が２１４以下のときにｕｐｄａｔｅ指示４１２をアサートする。なお、２１４以下の確率状態は、良好な確率推定のためにビット毎の更新が必要とされる低スキューの確率状態（５０％付近）として扱われる。２１４を越える確率状態は高スキューの確率状態として扱われ、少数の確率状態を利用して良好な確率推定を行うのにＭＰＳ毎の更新を必要としない。他の実施例では、２１４以外の確率状態が使用され、その選定はスキューと、確率推定がビット毎の更新を必要とするものであるか否かということに基づいてなされる。これは特定データ向けに選定されることになろう。ｕｐｓａｔｅ指示４１２は、符号化データが全く生成／消費されないときでも文脈メモリの更新を指示する。一実施例では、ｕｐｄａｔｅ指示４１２は１本の信号である。確率推定はビット毎に更新される。もう一つの実施例では、確率推定は、ビットが出力（又は消費）される時に必ず更新される。
図７に示した構成のＶｅｒｉｌｏｇ記述例を図２６乃至図２９に示す。このＶｅｒｉｌｏｇ記述に、本発明の確率推定規則の一例が記述されている。
【０１２１】
［ビット生成］
図８は、符号化されていないビットと符号化されたビットとの間の変換を行うｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３の一実施例のブロック図である。その機能の大部分は、ビット生成（ｂｉｔ＿ｇｅｎｅｒａｔｅ）ロジック７０１によって遂行される。
【０１２２】
図８において、ｂｉｔ＿ｇｅｎｅｒａｔｅロジック７０１はｌｉｋｅｌｙ＿ｉｎ指示７０９、ｐｃｌａｓｓ２１９、ｅｎｃｏｄｅ指示（例えば信号（信号群））４１５、ｃｏｄｅｓｔｒｅａｍ４１９、並びに、レジスタ７０２，７０３，７０４の出力すなわちｆｓｍ＿ｓｔａｔｅ、スタート（ｓｔａｒｔ）値及びストップ（ｓｔｏｐ）値を受け取るように接続されている。レジスタ７０２−７０４はそれぞれクロック４１０と結合されている。
【０１２３】
ｆｓｍ＿ｓｔａｔｅレジスタ７０２は、ＦＳＭの内部状態である。一実施例では、ｆｓｍ＿ｓｔａｔｅレジスタ７０２は、６ビットのレジスタであり、ｒｅｓｅｔ４１１がアサートされた時に所定の状態に設定される。一実施例では、この所定状態は０である。ｆｓｍ＿ｓｔａｔｅレジスタ７０２は、ｅｎａｂｌｅ指示４１４がアサートされている時にクロックサイクルで更新される。
【０１２４】
スタート（ｓｔａｒｔ）レジスタ７０３は、ｃｏｄｅｓｔｒｅａｍ４１９に出力可能な最小の有効値を保持している。一実施例では、ｓｔａｒｔレジスタ７０３は８ビットのレジスタである。ｓｔａｒｔレジスタ７０３は、ｒｅｓｅｔ４１１がアサートされた時に所定値に設定され、ｅｎａｂｌｅ指示４１４がアサートされた時にクロックサイクルで更新される。一実施例では、前記所定値は０である。
【０１２５】
ストップ（ｓｔｏｐ）レジスタ７０４は、ｃｏｄｅｓｔｒｅａｍ４１９に出力可能な最大の有効値を保持する。一実施例では、ｓｔｏｐレジスタ７０４は８ビットのレジスタである。ｓｔｏｐレジスタ７０４は、ｒｅｓｅｔ４１１がアサートされた時に所定値に設定され、ｅｎａｂｌｅ指示４１４がアサートされた時にクロックサイクルで更新される。一実施例では、ｓｔｏｐレジスタ７０４は、リセット時に１１１１１１１１（２進）に設定される。
【０１２６】
これらの入力に応じて、ｂｉｔ＿ｇｅｎｅｒａｔｅロジック７０１はｌｉｋｅｌｙ＿ｏｕｔ指示７２０、ｓｚ指示７１０、ｃｗ指示７１１、次のストップ値であるｎｅｘｔ＿ｓｔｏｐ値７１２、次のスタート値であるｎｅｘｔ＿ｓｔａｒｔ値７１３及びｎｅｘｔ＿ｓｔａｔｅ７１４を発生する。
【０１２７】
ｓｚ指示７１０はＭＵＸ７０５の一方の入力に結合されている。ＭＵＸ７０５の他方の入力は、ｆｌｕｓｈ＿ｓｚ指示（例えば信号（信号群））７１５と結合されている。同様に、ＭＵＸ７０６は一方の入力にｃｗ指示７１１を受け取り、他方の入力にフラッシュ（ｆｕｌｓｈ）ロジック７０７からのｆｌｕｓｈ＿ｃｗ７１６を受け取る。
【０１２８】
一実施例では、ｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３は符号化の最後でフラッシングのための符号語を生成する。フラッシュ（ｆｌｕｓｈ）信号４１３は、ＭＵＸ７０５，７０６の選択入力に結合されている。ビット生成部すなわちｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３がフラッシング中ではなく、したがってｆｌｕｓｈ信号４１３がアサートされていない時には、ＭＵＸ７０５，７０６はｓｚ指示７１０をｓｉｚｅ指示４１８として、ｃｗ指示７１１をｃｏｄｅｗｏｒｄ４１７として、それぞれ出力する。他方、ｂｉｔ＿ｇｅｎｅｒａｔｅ部４０３がフラッシング中でｆｌｕｓｈ信号４１３がアサートされている時には、ｆｌｕｓｈ＿ｃｗ指示７１６によって表される所定の符号語がＭＵＸ７０６よりｃｏｄｅｗｏｒｄ４１７として出力されるとともに、ｆｌｕｓｈ＿ｓｚ指示７１５により与えられたサイズ指示がｓｉｚｅ指示４１８として出力される。なお、ｂｉｔ＿ｇｅｎｅｒａｔｅロジック７０１とｆｌｕｓｈロジック７０７については、より詳細に後述する。
【０１２９】
図９は、ｂｉｔ＿ｇｅｎｅｒａｔｅロジック７０１の一実施例のブロック図である。図９において、ｂｉｔ＿ｇｅｎｅｒａｔｅロジック７０１は状態展開部（ｓｔａｔｅ＿ｅｘｐａｎｄ部）８０１、コンパレータ８０２、ｌｉｋｅｌｙロジック８０３、マルチプレクサ８０４及び符号語生成部（ｃｏｄｅｗｏｒｄ＿ｇｅｎｅｒａｔｅ部）８０５から構成されている。ｓｔａｔｅ＿ｅｘｐａｎｄ部８０１は、レジスタ７０２からのｆｓｍ＿ｓｔａｔｅとｐｃｌａｓｓ２１９を受け取るように接続されている。これらの入力に応じて、ｓｔａｔｅ＿ｅｘｐａｎｄ部８０１は、第１優勢シンボル（ｆｐｓ）指示（例えば信号（信号群））８２１、ｓｐｌｉｔ８値８２２を、ＭＰＳが発生した時又はＬＰＳが発生した時の次の確率状態とともに発生する。これらの次の確率状態をそれぞれｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ８１０、ｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ８１１と呼ぶ。ｓｔａｔｅ＿ｅｘｐａｎｄ部８０１の一実施例を、図１０に関連し、より詳しく説明する。
【０１３０】
コンパレータ８０２は、ｓｐｌｉｔ８値８２２とｃｏｄｅｓｔｒｅａｍ４１９を受け取るように接続されており、それら入力に応じてｔｏｐ＿ｓｐｌｉｔ信号８２３を発生する。一実施例では、ｃｏｄｅｓｔｒｅａｍ４１９がｓｐｌｉｔ８値８２２より大きいときにｔｏｐ＿ｓｐｌｉｔ信号８２３はアサートされる（例えば１になる）。ｃｏｄｅｓｔｒｅａｍ４１９がｓｐｌｉｔ８値８２２より小さいときには、ｔｏｐ＿ｓｐｌｉｔ信号８２３はアサートされない（例えば０である）。
【０１３１】
ｌｉｋｅｌｙロジック８０３は、ｌｉｋｅｌｙ＿ｉｎ指示（例えば信号（信号群））７０９、ｅｎｃｏｄｅ指示４１５、ｔｏｐ＿ｓｐｌｉｔ信号８２３、及びｆｐｓ指示８２１を受け取るように接続されている。これら入力に応じて、ｌｉｋｅｌｙロジック８０３は図３及び図４のｂｉｔロジックと同様に動作し、ｌｉｋｅｌｙ＿ｏｕｔ指示７２０を発生する。このｌｅｋｅｌｙ＿ｏｕｔ指示７２０は、ｌｉｋｅｌｙ指示２２３と実質的に等しい。ｅｎｃｏｄｅ指示４１５が１のときには、ｌｉｋｅｌｙ＿ｏｕｔ指示７２０の出力はｌｉｋｅｌｙ＿ｉｎ指示７０９であるが、ｅｎｃｏｄｅ指示４１５が０のときには、ｌｉｋｅｌｙ＿ｏｕｔ指示７２０の出力はｆｐｓ信号８２１とｔｏｐ＿ｓｐｌｉｔ信号８２３とのＸＯＲである。ｌｉｋｅｌｙ＿ｏｕｔ指示７２０は、ＭＵＸ８０４の選択入力並びにｃｏｄｅｗｏｒｄ＿ｇｅｎｅｒａｔｅ部８０５の入力に結合される。
【０１３２】
ＭＵＸ８０４は、ｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ指示８１０とｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ指示８１１を受け取るように接続されている。一実施例では、ｎｅｘｔ＿ｓｔａｔｅ指示７１４は、ｌｉｋｅｌｙ＿ｏｕｔ指示７２０がアサートされたときにはｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ指示８１０であり、そうでないときにはｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ指示８１１がｎｅｘｔ＿ｓｔａｔｅ指示７１４として出力される。
【０１３３】
ｃｏｄｅｗｏｒｄ＿ｇｅｎｅｒａｔｅ部８０５は、ｆｐｓ指示８２１、ｓｐｌｉｔ８値８２２、レジスタ７０３からのスタート値（ｓｔａｒｔ）、及びレジスタ７０４からのストップ値を受け取るように接続されている。これらの入力に応じて、ｃｏｄｅｗｏｒｄ＿ｇｅｎｅｒａｔｅ部８０５はｓｚ指示７１０、ｃｗ（ｃｏｄｅｗｏｒｄ）指示７１１、ｎｅｘｔ＿ｓｔａｒｔ値７１３及びｎｅｘｔ＿ｓｔｏｐ値７１２を発生する。この符号語生成ブロックすなわちｃｏｄｅｗｏｒｄ＿ｇｅｎｅｒａｔｅ部８０５について、図１４に関連し、より詳しく説明する。
【０１３４】
なお、ｓｔａｔｅ＿ｅｘｐａｎｄ部８０１とｃｏｄｅｗｏｒｄ＿ｇｅｎｅｒａｔｅ（ｃｗ＿ｇｅｎ）部８０５は、ハードウェア・コストを減らすため、ロジックを用いて図３のエントロピー符号化復号化テーブルと同様の出力を発生するのである。
【０１３５】
［状態展開部］
図１０は、状態展開部（ｓｔａｔｅ＿ｅｘｐａｎｄ部）８０１の一実施例のブロック図である。ｓｔａｔｅ＿ｅｘｐａｎｄ部８０１は、多段階ルックアップを利用することにより、冗長なＬＵＴエントリーを除去してハードウェア・コストを減らす。
【０１３６】
図１０において、ｐｃｌａｓｓ２１９はマスク生成（ｍａｓｋ＿ｇｅｎｅｒａｔｅ）部９０１の入力に結合されている。ｍａｓｋ＿ｇｅｎｅｒａｔｅ部９０１の出力はＡＮＤゲート９０３の一方の入力に接続されている。レジスタ７０２からのｆｓｍ＿ｓｔａｔｅは、ａｄｖａｎｃｅ部９０２の一方の入力、次状態ＭＰＳ部（ｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ部）９０５、次状態ＬＰＳ部（ｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ部）９０６、第１優勢シンボル部（ｆｐｓ部）９０７、分割部（ｓｐｌｉｔ部）９０８の一方の入力に結合されている。ａｄｖａｎｃｅ部９０２の出力は、ＡＮＤゲート９０３の他方の入力に結合されている。ＡＮＤゲート９０３の出力は、ｂｉｔｓ＿ｏｎ部９０４に接続されている。ｂｉｔｓ＿ｏｎ部９０４の出力は、ｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ部９０５、ｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ部９０６、ｆｐｓ部９０７、及び、ｓｐｌｉｔ部９０８の他方の入力に結合されている。
【０１３７】
これら入力に応じて、ｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ部９０５はｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ８１０を発生し、ｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ部９０６はｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ８１１を発生し、また、ｆｐｓ部はｆｐｓ信号８２１を発生する。また、ｓｐｌｉｔ部９０８は、その入力に応じて、ｓｐｌｉｔ８値８２２を発生する。ｓｐｌｉｔ部９０８にｓｐｌｉｔ５部９０９が含まれている。このｓｐｌｉｔ５部９０９は、ｓｐｌｉｔ部９０８の入力を受け取るように接続されており、この入力に応じて分割値のｓｐｌｉｔ５信号９１１を発生する。ｓｐｌｉｔ５信号９１１はｓｐｌｉｔ５＿ｔｏ＿ｓｐｌｉｔ８部９１０の入力に結合され、このｓｐｌｉｔ５＿ｔｏ＿ｓｐｌｉｔ８部９１０は分割値のｓｐｌｉｔ８値８２２を発生する。
【０１３８】
ＬＵＴの第１段階は、ａｄｖａｎｃｅ部９０２によって行われる。一実施例では、ａｄｖａｎｃｅ部９０２は、各ＦＳＭ（エントロピーコーダー）状態につき１エントリーを有し、レジスタ７０２からのＦＳＭ状態を受け取って、そのエントリーを出力する。一実施例では、ａｄｖａｎｃｅ部９０２は図３０に示すａｄｖａｎｃｅ．ｈｅｘ表のような６１エントリーを有する（左から右への順）。
【０１３９】
一実施例では、各エントリーは１５ビットの１６進数値である。各ビット位置がＰＣＬＡＳＳ  １からＰＣＬＡＳＳ  １５に対応する（ＰＣＬＡＳＳ  ０に対応するビットはない）。あるビットは、あるＰＣＬＡＳＳが前のＰＣＬＡＳＳと同じものに符号化されるか異なったものに符号化されるかを示す（すなわち、そのＬＵＴ情報が連続したＰＣＬＡＳＳで同じであるか異なるかを示す）。例えば、状態０は、７ＥＣＤ（１６進）すなわち１１１１１１０（２進）というエントリーを有する。右側（ＬＳＢ）から数えて、ビット位置２，５，６及び９に０がある。これは、ＰＣＬＡＳＳ  ２がＰＣＬＡＳＳ  １と同じであることを意味する。同様に、ＰＣＬＡＳＳ  ４，ＰＣＬＡＳＳ  ５及びＰＣＬＡＳＳ  ６が同じであり、また、ＰＣＬＡＳＳ  ８とＰＣＬＡＳＳ  ９が同じである。１つの状態だけは全てのＰＣＬＡＳＳにわたって同一である（ａｄｖａｎｃｅ＝００００（１６進））が、それ以外の状態は少数の異なったＰＣＬＡＳＳがある。多数のＰＣＬＡＳＳでＬＵＴ情報が同じ場合には、ｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ部９０５、ｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ部９０６、ｆｐｓ部９０７及びｓｐｌｉｔ部９０９を実現するためのロジックを縮減できる。
【０１４０】
ｍａｓｋ＿＿ｇｅｎｅｒａｔｅ部９０１は、ｐｃｌａｓｓ２１９に応じたマスクを発生する。一実施例では、このマスクは、ＰＣＬＡＳＳ  ０に対しては０００００００００００００００（２進）、ＰＣＬＡＳＳ  １に対しては００００００００００００００１（２進）、ＰＣＬＡＳＳ  ２に対しては０００００００００００００１１（２進）、等々である。このマスクは、ＡＮＤゲート９０３によって、ａｄｖａｎｃｅ部９０２の出力とＡＮＤをとられる。
【０１４１】
ｂｉｔｓ＿ｏｎ部９０４は、ＡＮＤゲート９０３から出力される１のビットを合計し、ｓｅｌ値９１２を発生する。ｓｅｌ値９１２は第２段階のＬＵＴのためのインデックスとして利用される。
【０１４２】
ｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ部９０５、ｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ部９０６及びｆｐｓ部９０７は、その対応値のルックアップを行う。
【０１４３】
一実施例では、ｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ部９０５は、図３１に示すｎｅｘｔ＿ｍ．ｈｅｘ表の如きエントリー（１６進表示）を持つＬＵＴを含んでいる。ｎｅｘｔ＿ｍ．ｈｅｘ表の各行は１つのＦＳＭ状態（ＦＳＭ状態０から始まる）に対応している。なお、同表の第２列は第１列の後に続くものである。
【０１４４】
これら６１の状態のそれぞれについて、ｓｅｌ値９１２のとり得る最大８つの値としての８エントリーがある。ある状態に対し発生するｓｅｌ値９１２の値が８つより少ない場合（多くのＰＣＬＡＳＳで同じ情報を使うため）、「何でも構わない」値は「ｘｘ」で示されている。状態０に対し発生するｓｅｌ値の値は８つより多く、次のＭＰＳ状態のための最初の８エントリーは上記表に示されているが、残りのエントリーはそれぞれ６、１０、１Ｂ、３８（１６進）である。
【０１４５】
ｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ部９０６の一実施例は、図３２に示すｎｅｘｔ＿ｌ．ｈｅｘ表の如きエントリー（１６進表示）を有するＬＵＴを含んでいる。このｎｅｘｔ＿ｌ．ｈｅｘ表の各行は１つのＦＳＭ状態に対応する。また、その第２列は第１列の後に続くものである。
【０１４６】
これら６１状態のそれぞれについて、ｓｅｌ値９１２のとり得る最大８つの値としての８エントリーがある。ある状態に対して発生するｓｅｌ値９１２の値が８つより少ない場合、「何でも構わない」値は「ｘｘ」で示されている。状態０に対して発生するｓｅｌ値の値は８つより多く、次のＭＰＳ状態のための最初の８エントリーは上記表に示されているが、残りのエントリーは全て０である。
【０１４７】
一実施例では、ｆｐｓ部９０７は、図３３に示すｆｉｒｓｔ．ｈｅｘ表の如きエントリーを有するＬＵＴを含んでいる。ｆｉｒｓｔ．ｈｅｘ表の第２列は第１列の後に続くものである。前述のように、各行は１つの異なったＦＳＭ状態に対応する。
【０１４８】
これら６１状態のそれぞれについて、ｓｅｌ値９１２のとり得る最大８つの値としての８エントリーがある。ある状態に対して発生するｓｅｌ値９１２の値が８つより少ない場合、「何でも構わない」値は「ｘｘ」で示されている。状態０に対して発生するｓｅｌ値の値は８つより多く、次のＭＰＳ状態のための最初の８エントリーは上記表に示されており、残りのエントリーは全て１である。
【０１４９】
ｓｐｌｉｔ５部９０９は、ルックアップを行って５ビットの分割（ｓｐｌｉｔ）インデックスを発生し、このインデックスはｓｐｌｉｔ８＿ｔｏ＿ｓｐｌｉｔ８部９１０によって拡張されて適切な８ビットの分割（ｓｐｌｉｔ）値、すなわちｓｐｌｉｔ８値８２２が生成される。ｓｐｌｉｔ５部９０９は、図３４に示すｓｐｌｉｔ．ｈｅｘ表の如き５ビットのエントリー（１６進表示）を有するＬＵＴを含んでいる。このｓｐｌｉｔ．ｈｅｘ表の第２列は、第１列に続くものである。
【０１５０】
これら６１状態のそれぞれについて、ｓｅｌ値９１２のとり得る最大８つの値としての８エントリーがある。ある状態に対して発生するｓｅｌ値９１２の値が８つより少ない場合、「何でも構わない」値は「ｘｘ」で示されている。状態０に対して発生するｓｅｌ値９１２の値は８つより多く、次のＭＰＳ状態のための最初の８エントリーは上記リストに示されているが、残りのエントリーはそれぞれ１Ｃ，１Ｄ，１Ｅ及び１Ｅ（１６進）である。
【０１５１】
５ビットの分割インデックスは、ｓｐｌｉｔ８＿ｔｏ＿ｓｐｌｉｔ８部９１０により８ビットのｓｐｌｉｔ値に変換される。ｓｐｌｉｔ５＿ｔｏ＿ｓｐｌｉｔ８部９１０は、図３５に示すｓｐｌｉｔ５８．ｈｅｘリストの如きＬＵＴ（そのエントリーは１６進表示）を用いる。例えば、状態が０、ｓｅｌ値が０の場合、最初の分割インデックスは０５（１６進）であり、これは８０（１６進）なる値に対応する。０５（１６進）値は、前記の図３４のｓｐｌｉｔ．ｈｅｘ表の左上の値に見られる。値８０（１６進）は図３５のｓｐｌｉｔ５８．ｈｅｘリストの０５（１６進）位置（すなわち、このリストの先頭から６番目の位置、ただし「ｘｘ」は００（１６進）位置）より得られる。
【０１５２】
ｎｅｘｔ＿ｓｔａｔｅ＿ｍｐｓ部９０５、ｎｅｘｔ＿ｓｔａｔｅ＿ｌｐｓ部９０６、ｆｐｓ部９０７、及びｓｐｌｉｔ５部９０９を実現する場合に、レジスタ７０２からのｆｓｍ＿ｓｔａｔｅとｓｅｌ値９１２が共に動作開始時に有効であると仮定してもよい。この場合、各部は単一の出力を発生する。そうではなく、各部で２段階の手順を使えば、速度を上げることができる。まず、ｆｓｍ＿ｓｔａｔｅを用いて、ｓｅｌ値９１２のとり得る全ての値に対する出力を決定する。次に、ｓｅｌ値９１２を利用し、その正しいと見込まれる出力を選択して出力に出す。ｆｓｍ＿ｓｔａｔｅはｓｅｌ値９１２より先に有効になるため、このようにすれば高速化が可能である。
【０１５３】
以下の例によって、ＦＳＭコーダーの一実施例の動作を説明する。図３６乃至図３８に結果をまとめて示す。まず、コーダーは、全ての文脈に対しＰＳＴＡＴＥ２６２で始動し、その際、ＰＣＬＡＳＳ＝０、ＭＰＳ＝０、ＦＳＭ状態＝０である。ＦＳＭコーダーの入力に文脈６と入力ビット０が与えられる。（この例における文脈とビットは任意に選んだものである）ＰＣＬＡＳＳ  ０は、ｓｅｌ値９１２が０であることを意味する。ｓｅｌ値９１２が０、ＦＳＭ状態が０の場合、５ビットの分割（ｓｐｌｉｔ）インデックス値が得られる。なお、この値は図３４のｓｐｌｉｔ．ｈｅｘ表から得られる。この表の各行は一つのＦＳＭ状態に対応する（最初の行がＦＳＭ状態０に対応）。図３５のｓｐｌｉｔ５８．ｈｅｘリストを用い、この５ビットの分割インデックスは分割（ｓｐｌｉｔ）値、８０（１６進）に変換される。したがって、０からＦＦまでの区間が８０（１６進）で分割される結果、一方の区間は０から７Ｆまでとされ、もう一方の区間は８０ＦからＦＦまでとされる。ｆｐｓ信号は、０〜ＦＦの区間と８０〜ＦＦの区間のどちらをＭＰＳの発生に関連付けるか指示する。どちらをＭＰＳに関連付けるか判定するため、ｆｐｓ信号が評価される。この場合、ｆｐｓ信号は０である。その判定のために図３３のｆｉｒｓｔ．ｈｅｘ表を参照して０のＦＳＭ状態に対応した第１行を調べ、同表の第１行と０のｓｅｌ値９１２、すなわち当該行の第１ビットの第１ビット位置を選択させる。この場合、ｆｐｓ信号は０であるので、ＭＰＳは上側の区間８０〜ＦＦと関連付けられる。この入力ビットは可能性の高い状態である（すなわち、入力ビットはＭＰＳと同じである）ので、８０からＦＦまでの区間が評価される。この区間の上限ＦＦと下限８０の最上位ビットを比較すると、最初のビットはいずれの場合も１である。よって、１のビットが出力される。
【０１５４】
ｐｓｔａｔｅが２１４以上であり、かつ出力があるので、ＰＳＴＡＴＥが更新される。更新結果は表の現在内容に基づいて決まり、状態２６３へ更新される。ＦＳＭ状態については、図３１のｎｅｘｔ＿ｍ．ｈｅｘ表の第１行（ＦＳＭ状態＝０）の第１位置（ｓｅｌ値９１２＝０）に００（１６進）があるから、ＦＳＭ状態０のままである。
【０１５５】
次に、区間から出力されずに残っているビットをシフトすることにより、区間が変更され新しい区間が作られる。例えば、符号語出力の結果、出力されなかった下側区間端点を表すビット全部が左へシフトされ、また、最下位ビットに０のビットがシフト入力される。最初の０のビットが出力済みで７つの０のビットが残っているから、この下位７ビット全部が左へ１ビット位置だけシフトされ、また、０がＬＳＢに加えられる。同様に、区間の上側端点７Ｆに関して、残っているビット１１１１１１１が全て左へ１ビット位置だけシフトされ、また、別の１のビットが区間の最下位ビットに加えられる。その結果、００からＦＦまでの新しい区間が得られる（状態０は、その区間が００からＦＦまでであることを意味する）。
【０１５６】
次に入力される文脈とビットはそれぞれ６と０であり、ＰＳＴＡＴＥは２６３である。ＰＳＴＡＴＥが２６３ということは、ＰＣＬＡＳＳが２であることに相当する。ＰＣＬＡＳＳが２であることに対応して、ｍａｓｋ＿ｇｅｎｅｒａｔｅ部９０１はマスク値０００００００００００００１１を出力する。ＦＳＭ状態が０であることに対応して、ａｄｖａｎｃｅ部９０２はＦＳＭ状態０に対応するエントリーの７ＥＣＤ（１６進）すなわち１１１１１１０１１００１１０１（２進）を出力する。ｍａｓｋ＿ｇｅｎｅｒａｔｅ部９０１の出力とａｄｖａｎｃｅ部９０２の出力とのＡＮＤをとった結果は、００００００００００００００１である。この値に対し、ｂｉｔｓ＿ｏｎ部９０４は、１というｓｅｌ値９１２を発生する。このように、ＦＳＭ状態が０、ｓｅｌ値９１２が１であると、図３４のｓｐｌｉｔ．ｈｅｘ表からｓｐｌｉｔインデックス０Ｃが得られる。このｓｐｌｉｔインデックスは８ビットの分割（ｓｐｌｉｔ）値Ａ０に対応する。したがって、２つの区間は、００から９Ｆまでの区間とＡ０からＦＦまでの区間となる。
【０１５７】
ＦＳＭ状態が０、ｓｅｌ値９１２が１であるので、図３３のｆｉｒｓｔ．ｈｅｘ表の第１行の第２位置によってｆｐｓ信号８２１が１であることが分かる。ｆｐｓ信号８２１が１であるので、優勢なケースに関連付けられる区間は００からＢＦまでの区間である。この区間が評価対象に選ばれるのは、入力ビットがＭＰＳと同じである（つまり優勢状態である）からである。この区間の始端（００）の最上位ビットは終端（Ａ０）の最上位ビットと一致しないので、出力されるビットがなく、システムは、図３１のｎｅｘｔ＿ｍ．ｈｅｘ表によって示される新たなＦＳＭ状態（行０（ＦＳＭ状態＝０）の第２位置（ｓｅｌ値９１２＝１）に示される状態３）へ遷移するが、ＰＳＴＡＴＥはそのままである。なお、ビットが出力されないため、区間端点へのビットのシフト入力は行われない。
【０１５８】
次の入力は、６という文脈ビットと、０の入力ビットである。これら入力に基づいて、６０（１６進）というｓｐｌｉｔ値が発生する。このｓｐｌｉｔ値が前に選択された００からＢＦまでの区間に適用される。したがって、００から９Ｆまでの区間は、００から５Ｆまでと、６０から９Ｆまでとに分割される。ｆｐｓ信号は、０から５Ｆまでの第１区間の第１部分が優勢な区間であることを指示する。入力ビットとしてＭＰＳが受け取られているので、この０から５Ｆまでの第１区間が評価される。この場合、区間端点の０と５Ｆの第１ビットは一致し、したがって出力される。このビットを出力した後、区間値の残りのビットは左へシフトされ、下側区間に０が加えられ（端点００を生成する）、また、上側区間に１が加えられ（端点ＢＦを生成する）、かくして、新たな区間は０からＢＦまでの区間となる。
【０１５９】
このような入力データの処理は図３６乃至図３８に示すように継続する。しかし、文脈が６で入力ビットが１の時に、興味深い事例が生じる。この場合、区間は０からＣ７までの範囲で、ｓｐｌｉｔ値はＣ０（図３５のｓｐｌｉｔ５８．ｈｅｘ表より）である。ｆｐｓ信号に基づいて、優勢区間はＣ０からＣ７までとなる。この場合、この区間の始端と終端の上位５ビット１１０００（２進）は一致し、出力されることになろう。この５ビットの出力後、スタート区間とストップ区間の残りビットが左にシフトされ、その際に下側区間の下位ビットに０が充填され、また上側区間の下位ビットに１が充填される。その結果、０からＦＦまでの新たな区間が得られる。
【０１６０】
ｆｐｓ値とｓｐｌｉｔ値を用いる符号化器の実施例を説明したが、符号化器を同様の指示を利用してソフトウェアにより実装することもできる。ハードウェアでは、ｆｐｓ信号とのＸＯＲ演算の実行はかなり容易であるが、ソフトウェアによる場合、コンピュータのアーキテクチャによっては面倒な点がある。それは、ある数がもう一つの数以上であるか否かの判定の結果が、アクセスの容易でないステータスビットにセットされるためである。あるビットとステータスビットとのＸＯＲをとる操作すなわち比較操作をするには、ステータスビットが１か０かで異なったロケーションに分岐する分岐操作を行ってから、ステータスビット表示を表す１又は０が格納されている各ロケーションのレジスタをアクセスしなければならない。そのようなソフトウェアの擬似コードの一例を図３９に示すが、これは非常に効率のわるい実装である。
【０１６１】
ソフトウェアでは、これらの面倒を解決するため、ｆｐｓが０の場合用と１の場合用の２つのｓｐｌｉｔ値を生成してもよい。１のｆｐｓ信号が発生する割合が非常に高いため、ＸＯＲ演算結果を求めるのに比較を１回行うだけでよいだろう（ハードウェアによる実装では２回の比較が必要）。しかし、その１回の比較で必要な結果が得られない場合には、別に２回の比較が必要になり（比較演算の回数がハードウェアでの２回より多い）、入力とＭＰＳとの間の最終比較を行って、それらが一致するか（優勢であるか）判定する。このようなソフトウェアの擬似コードの一例を図４０に示す。ただし、２つの分割値（ｓｐｌｉｔ値）、すなわちｆｐｓ指示＝１用のｓｐｌｉｔ値（ｓｐｌｉｔ８＿ｆｐｓ１）と、ｆｐｓ指示＝０用のｓｐｌｉｔ値（ｓｐｌｉｔ８＿ｆｐｓ０）を用いている。
【０１６２】
［フラッシング］
フラッシュ（ｆｌｕｓｈ）ロジック７０７については、いくつかの構成が可能である。図１２は、０１１１（２進）なる値を用いて１サイクルでフラッシングするためのｆｌｕｓｈロジック７０７の一実施例のブロック図である。あるいは、もっと長い値、例えば１０００００００（２進）を用いることも可能である。図１２において、遅延素子１１０１がｆｌｕｓｈ信号４１３を受け取ってｄｏｎｅ＿ｆｌｕｓｈ指示４１６を出力するように接続されている。一実施例では、フラッシングに１サイクルかかる。また、この場合、ｆｌｕｓｈ＿ｓｚ指示７１５は４に設定され、ｆｌｕｓｈ＿ｃｗ指示７１６は４ビットの０１１１に設定される。また、ｓｔａｒｔレジスタ７０３からのスタート値とｓｔｏｐレジスタ７０４からのストップ値は利用されない。
【０１６３】
最小のビット数でフラッシングするために、図１３に示すように、スタート値及びストップ値によりフラッシングに用いられる符号語を決定してもよい。図１３において、ｇｅｎｅｒａｔｅ＿ｃｏｄｅｗｏｒｄ＿ｆｏｒ＿ｆｌｕｓｈ部１２０１が、レジスタ７０３から出力されるスタート値と、レジスタ７０４から出力されるストップ値とを受け取るように接続されている。これら出力に応じて、ｇｅｎｅｒａｔｅ＿ｃｏｄｅｗｏｒｄ＿ｆｏｒ＿ｆｌｕｓｈ部１２０１は、ｆｌｕｓｈ＿ｓｚ指示７１５とｆｌｕｓｈ＿ｃｗ指示７１６を出力する。また、遅延要素１２０２が、ｆｌｕｓｈ信号４１３を受け取ってｄｏｎｅ＿ｆｌｕｓｈ指示４１６を出力するように接続されている。ｇｅｎｅｒａｔｅ＿ｃｏｄｅｗｏｒｄ＿ｆｏｒ＿ｆｌｕｓｈ部１２０１の動作は、図４１に示す擬似コードのとおりである。
【０１６４】
もう一つの実施例では、８ビットをＰＣＬＡＳＳ  ０で符号化することによってフラッシングが行われる。そのためにＦＳＭコーダー内に何もロジックを設ける必要がない。文脈モデル／確率推定／システムの制御部がフラッシングを遂行する。
図９、図１０及び図１１に示した構成のためのＶｅｒｉｌｏｇ記述例を図４２乃至図４５に示す。
【０１６５】
［１のビットの個数測定］
図１０のｂｉｔｓ＿ｏｎ部９０４は、加算器のツリーを用いて１のビットの個数を求める。そのＶｅｒｉｌｏｇ記述例を図４６に示す。
【０１６６】
［符号語生成］
図１４は、ビット生成（ｂｉｔ＿ｇｅｎｅｒａｔｅ）ロジック７０１の符号語生成部すなわちｇｅｎｅｒａｔｅ＿ｃｏｄｅｗｏｒｄ（ｃｗ＿ｇｅｎ）部８０５の一実施例のブロック図である。前述のように、ｇｅｎｅｒａｔｅ＿ｃｏｄｅｗｏｒｄ部８０５は、符号語を生成するが、この機能をＬＵＴによるのではなくロジックによって遂行することによりハードウェアを節減する。
【０１６７】
図１４において、ｇｅｎｅｒａｔｅ＿ｃｏｄｅｗｏｒｄ部８０５はＭＵＸ１３０１を有し、このＭＵＸ１３０１はｓｔａｒｔレジスタ７０３から出力されるスタート値とｓｐｌｉｔ８値８２２を受け取るように接続されている。減算器１３０９は、ｓｐｌｉｔ８値８２２から１を引き算する。ＭＵＸ１３０２は、その第１の入力で減算器１３０９の出力を受け取り、その第２の入力でｓｔｏｐレジスタ７０４から出力されるストップ値を受け取るように接続されている。ＭＵＸ１３０１，１３０２の出力はコンパレータ１３０３より出力される選択信号によって選択される。このコンパレータ１３０３は、ｌｉｋｅｌｙ指示７２０とｆｐｓ信号８２１を受け取るように接続されており、その二つの入力が等しいときに選択信号をアサートすることによって、ＭＵＸ１３０１よりスタート値を出力させるように選択し、また、ｓｐｌｉｔ８値８２２から１を差し引いた値をＭＵＸ１３０２より出力させるように選択する。
【０１６８】
ＭＵＸ１３０１の出力は、ＸＯＲゲート１３０４の一方の入力、符号語（ｃｏｄｅｗｏｒｄ）シフタ１３０６及びスタート（ｓｔａｒｔ）シフタ１３０７に接続されている。ＭＵＸ１３０２の出力は、ＸＯＲゲート１３０４の他方の入力、及びストップ（ｓｔｏｐ）シフタ１３０８の一方の入力に接続されている。ＸＯＲゲート１３０４の出力はプライオリティエンコーダ（ｐｒｉｏｒｉｔｙ  ｅｎｃｏｄｅｒ）１３０５の入力に接続されている。このプライオリティエンコーダ１３０５の出力が、ｇｅｎｅｒａｔｅ＿ｃｏｄｅｗｏｒｄ部８０５より出力されるｓｚ指示（例えば信号（信号群））７１０である。このｓｚ指示７１０は、ｃｏｄｅｗｏｒｄシフタ１３０６、ｓｔａｒｔシフタ１３０７及びｓｔｏｐシフタ１３０８の他方の入力にも結合されている。ｃｏｄｅｗｏｒｄ（ｃｗ）シフタ１３０６、ｓｔａｒｔシフタ１３０７、ｓｔｏｐシフタ１３０８の出力がそれぞれｃｗ（ｃｏｄｅｗｏｒｄ）指示７１１、次スタート値（ｎｅｘｔ＿ｓｔａｒｔ値）７１３、及び次ストップ値（ｎｅｘｔ＿ｓｔｏｐ値）７１２である。
【０１６９】
スタート値とストップ値の間の現在の有効区間は、ｓｐｌｉｔ８値８２２によって指定される値で分割される。コンパレータ１３０３は、ｌｉｋｅｌｙ＿ｏｕｔ指示７２０とｆｐｓ信号８２１との間の比較を行い、新しい区間（新しいスタート値とストップ値）を作成するためにスタート値かストップ値をｓｐｌｉｔ８値８２２で指示される分割値によって置き換えるか判断する。一実施例では、ストップ値が置き換えられるときには、分割値から１を差し引いた値によって置き換えられる。新しいスタート値とストップ値がＸＯＲゲート１３０４によって排他的ＯＲ（ＸＯＲ）をとられることにより、一致するビットの位置が検出される。ＭＳＢから始めて一致するビットの個数がプライオリティエンコーダ１３０５により求められ、符号語のサイズ（ｓｚ指示７１０）として出力される。この符号語のサイズによりシフタ１３０６，１３０７，１３０８を制御する。新たなスタート値とストップ値の一致ビットが、ｃｗシフタ１３０６によりｃｗ指示７１１として出力される。一致しないビットは、ｓｔａｒｔシフタ１３０７及びｓｔｏｐシフタ１３０８により、ｎｅｘｔ＿ｓｔａｒｔ値７１３及びｎｅｘｔ＿ｓｔｏｐ値７１２としてそれぞれ出力される。ｓｔａｒｔシフタ１３０７は、区間の下側端点のＬＢＳ（ｓ）に０を充填する。ｓｔｏｐシフタ１７０８は区間の上側端点のＬＳＢ（ｓ）に１を充填する。これを行うためにシフト操作とＯＲ演算を必要とする実施例もある（図４７及び図４８に示すＶｅｒｉｌｏｇ記述例を参照）。
【０１７０】
なお、他の実施例では、これら三つのシフタの二つ又は全部を統合すしてもよい。また、ｃｗシフタ１３０６で、新しいスタート値に代えて新しいストップ値を入力として利用してもよい。
図１４に示した構成のＶｅｒｉｌｏｇ ＨＤ記述例を、図４７及び図４８に示す。
【０１７１】
図４９に、６１個のＦＳＭ状態を表す有効なスタート値とストップ値のペアをまとめて示す。これらのスタート値とストップ値のペアだけが、ハードウェアの動作で生成される。
【０１７２】
［ビットパッキング］
図１５は、コーダー４００のパック（ｐａｃｋ）部４０４の一実施例のブロック図である。ｐａｃｋ部４０４は、符号化時に、可変長の符号語群を結合してバイト群にする。クロック信号とイネーブル信号は、煩雑さを避けるため図示されていない。
【０１７３】
図１５において、ｃｏｄｅｗｏｒｄ４１７は、ＯＲゲート１４０２の一方の入力に結合され、シフタ１４０１の出力とＯＲがとられる。このＯＲ演算の結果はバッファレジスタ１４０３に格納される。バッファレジスタ（ｂｂｕｆ）１４０３は、ビット群を、それらがバイトに組み立てられ出力されるまで保持する。一実施例では、バッファレジスタ１４０３は１６ビットのバッファである。入力データを受け取った時に、バッファレジスタ１４０３内に現在入っているデータがシフタ１４０１によりシフトされることにより、その新たなデータのための空きが作られ、そして、その新たなデータが追加される。復号化動作の終わりでフラッシングをするため、バッファレジスタ１４０３に現在入っている任意のデータが１バイトになるようシフトされる。バッファレジスタ１４０３の出力データはシフタ１４０５の入力に与えられる。シフタ１４０５は、カウント（ｃｏｕｎｔ）レジスタ１４０６の値に従ってバッファレジスタ１４０３の内容を桁揃えしてデータ出力ｄａｔａ＿ｏｕｔ２２９を発生する。例えば、バッファレジスタ１４０３に９ビット（ビット８〜ビット０）があり、ｃｏｕｎｔレジスタ１４０６のカウント値が９でビット８〜ビット１を出力する場合、シフタ１４０５は、その８ビットをｄａｔａ＿ｏｕｔ２２９のビット７〜ビット０に桁揃えする。バッフアレジスタ１４０３のビット０は、次のバイトを出力できるようになるまで保持される。
【０１７４】
別の方法として、シフタを二つ用いるのではなく、シフタを一つだけ用いることもできる。この単一のシフタは、バッファレジスタ１４０３に対する出力データの桁揃えを行う。バッファレジスタ１４０３は、１バイト出力されるたびに８ビットだけシフトできる二つの８ビットレジスタとして構成される。そのような構成の一例を図１６に示す。
【０１７５】
バッファレジスタ１４０３は、ｓｉｚｅ指示４１８及びｅｎａｂｌｅ指示４１４を受け取るように接続されたイネーブル（ｅｎａｂｌｅ）ロジック１４０８の出力に応答してデータを格納する。ｅｎａｂｌｅロジック１４０８が、そのイネーブル出力をアサートするのは、ｅｎａｂｌｅ指示４１４がアサートされていてｓｉｚｅ指示４１８が０より大きい時である。ｅｎａｂｌｅロジック１４０８のイネーブル出力は、ビットが送出されたことを知らせるためにｕｓｅｄレジスタ１４０９の入力に接続される。
【０１７６】
バッファレジスタ１４０３の出力は、シフト後のデータと結合するためシフタ１４０１へフィードバックされる。
【０１７７】
ｃｏｕｎｔレジスタ（ｂｃｎｔ）１４０６は、バッファレジスタ１４０３内の出力待ちのビットを常時把握している。ｃｏｕｎｔレジスタ１４０６は、入力データのサイズから、ｄａｔａ＿ｉｎ＿ｒｅａｄｙ信号１４２８がアサートされているか否かによって決まる特定の値を差し引いた値だけインクリメントされる。ｄａｔａ＿ｉｎ＿ｒｅａｄｙ信号１４２８がアサートされているときには、ｃｏｕｎｔレジスタ１４０６のカウント値は入力データのサイズから８を引いた値だけインクリメントされるが、アサートされていないときには、カウント値は入力データのサイズだけ（すなわち０を引いた値）インクリメントされる。カウント（ｃｏｕｎｔ）ロジック１４０４（ｓｉｚｅ指示４１８、ｄａｔａ＿ｏｕｔ＿ｒｅａｄｙ信号４２３のフィードバック、ｃｏｕｎｔレジスタ１４０６からのフィードバック、ｆｌｕｓｈロジック１４１０の出力を受け取るように接続されている）は、ｄａｔａ＿ｉｎ＿ｒｅａｄｙ信号１４２８をアサートする働きをする。一実施例では、ｃｏｕｎｔレジスタ１４０６は４ビットのカウンタからなる。
【０１７８】
ｒｅａｄｙロジック１４０７は、ｃｏｕｎｔレジスタ１４０６の出力が８以上になったことを観測した時にｄａｔａ＿ｏｕｔ＿ｒｅａｄｙ信号４２３をアサートする。このアサート時に、ｃｏｕｎｔロジック１４０４はｃｏｕｎｔレジスタ１４０６のカウント値を８だけデクリメントする。
【０１７９】
フラッシュ（ｆｌｕｓｈ）ロジック１４１０は、符号化の最後に、まだバッファされているデータをフラッシングするため、つまり全部出力させるために利用される。一実施例では、ｆｌｕｓｈロジック１４１０は、ｆｌｕｓｈ信号４１３及びｄｏｎｅ＿ｆｌｕｓｈ信号４１６に応じて、ｃｏｕｎｔロジック１４０４及びシフタ１４０１をフラッシングさせる。ｆｌｕｓｈロジック４１６は、ｕｓｅｄレジスタ１４０９の出力及びｃｏｕｎｔレジスタ１４０６の出力も受け取るように接続されている。ｕｓｅｄレジスタ（ｂｕｓｅｄ）１４０９は、何かデータが入力された時に１に設定される。一実施例では、ｕｓｅｄレジスタ１４０９は１ビットのレジスタである。ｕｓｅｄレジスタ１４０９は、データが入力されていないためフラッシングが不要であることを指示するものである。ｆｌｕｓｈロジック１４１０がフラッシング動作を実行するのは、ｆｌｕｓｈ信号４１３がアサートされていて、ｃｏｕｎｔレジスタ１４０６の値が０より大きく、かつ、ｕｓｅｄレジスタ１４０９の値が０より大きいときである。したがって、ｕｓｅｄレジスタ１４０９がデータが入力されていないことを指示しているときには、ｆｌｕｓｈロジック１４１０はフラッシングが済んでいる旨を指示する。フラッシングを行うために、ｄａｔａ＿ｏｕｔ＿ｒｅａｄｙ信号４２３がアサートされていないときにバッファレジスタ１４０３の内容がシフタ１４０１によりＭＳＢへ移動させられ、また、ｃｏｕｎｔレジスタ１４０６の内容が、ｄａｔａ＿ｏｕｔ＿ｒｅａｄｙ信号４２３がアサートされているならば０に、アサートされていなければ８にそれぞれ設定される。フラッシングは当該技術分野で周知である。
【０１８０】
このようなフラッシングの完了後、ｆｌｕｓｈロジック１４１０はｄｏｎｅ＿ｆｌｕｓｈ信号４２４をアサートする。つまり、ｆｌｕｓｈ信号４１３がアサートされていて、ｃｏｕｎｔレジスタ１４０６の値が０であるかｕｓｅｄレジスタ１４０９の値が０であるときに、ｄｏｎｅ＿ｆｌｕｓｈ信号４２４がアサートされる。
【０１８１】
ＦＳＭコーダーがリセットされるときに、バッファレジスタ１４０３、ｃｏｕｎｔレジスタ１４０６及びｕｓｅｄレジスタ１４０９は初期化される。一実施例では、これらレジスタは０に初期化される。
図１５に示した構成のＶｅｒｉｌｏｇ記述例を図５０及び図５１に示す。
【０１８２】
［ビット・アンパッキング］
図１７は、復号化時に、復号化データストリームのバイトの可変長シフトを行って可変長符号語にするアンパック（ｕｎｐａｃｋ）部４０５の一実施例のブロック図である。ｃｌｏｃｋ４１０、ｒｅｓｅｔ信号４１１及びｅｎａｂｌｅ信号４１４は、煩雑化を避けるため図示されていない。
【０１８３】
図１７において、ｄａｔａ＿ｉｎ２２１はバッファレジスタ１５０１及びシフタ１５０４の入力に結合されている。バッファレジスタ（ｕｂｕｆ）１５０１は、先行の符号化データをあるビット数だけ保持する。一実施例では、バッファレジスタ１５０１は８ビットのレジスタであり、先行の８ビット分の符号化データを保持する。
【０１８４】
バッファレジスタ１５０１の出力はシフタ１５０２の入力に接続され、このシフタ１５０２は、ｃｏｕｎｔレジスタ１５０６の出力に応じて、データをＯＲゲート１５０３の一方の入力へシフトする。ＯＲゲート１５０３の他方の入力はシフタ１５０４の出力と接続され、このシフタ１５０４はｄａｔａ＿ｉｎ２２１を、ｃｏｕｎｔレジスタ１５０６より出力されるｃｏｕｎｔ１５０９に応じてシフトする。ＯＲゲート１５０３の出力がｄａｔａ＿ｏｕｔ１５２０であるが、これはｃｏｄｅｓｔｒｅａｍ４１９である。
【０１８５】
ｃｏｕｎｔレジスタ１５０６は、ｃｏｕｎｔロジック１５０５の出力に応じてｃｏｕｎｔ１５０９を出力する。ｃｏｕｎｔロジック１５０５は、ｃｏｕｎｔレジスタ１５０６からフィードバックされるｃｏｕｎｔ１５０９、ｓｉｚｅ指示４１８及びコンパレータ１５０７の出力に応じて、出力を発生する。コンパレータ１５０７の他方の入力はｃｏｕｎｔ１５０９と結合される。コンパレータ１５０７の出力、すなわちｗｎｅｘｔ信号１５１０はｎｅｘｔレジスタ１５０８の入力に結合される。ｎｅｘｔレジスタ１５０８の出力がｎｅｘｔ＿ｂｙｔｅ信号（＝ｄａｔａ＿ｉｎ＿ｎｅｘｔ信号）４２０である。
【０１８６】
ｃｏｕｎｔレジスタ（ｕｃｎｔ）１５０６は、復号化器によって消費されなかったバッファレジスタ１５０１内のビットの数を保持する。ｃｏｕｎｔレジスタ１５０６は、ｓｉｚｅ指示４１８により指示された、復号化器により消費された符号語のサイズだけ、ｃｏｕｎｔロジック１５０５を介しデクリメントされる。ｃｏｕｎｔレジスタ１５０６の値が現在要求されている符号語のサイズ以下である時に、ｄａｔａ＿ｉｎ２２１がバッファレジスタ１５０１に格納され、ｃｏｕｎｔレジスタ１５０６が８だけインクリメントされ、またｗｎｅｘｔ信号１５１０がアサートされる。
【０１８７】
ｃｏｕｎｔ１５０９（ｃｏｕｎｔレジスタ１５０６）に等しいビット数だけバッファレジスタ１５０１より取り込み、かつ、８からｃｏｕｎｔ１５０９に等しいビット数を差し引いたビット数だけｄａｔａ＿ｉｎ２２１より取り込むことによって、正しく整列されたコードストリームｄａｔａ＿ｏｕｔ１５２０が生成される。
【０１８８】
コンパレータ１５０７は、ｃｏｕｎｔ１５０９がｓｉｚｅ指示４１８以下であるか判定するコンパレータである。ｃｏｕｎｔ１５０９がｓｉｚｅ指示４１８以下ならば、ｗｎｅｘｔ信号１５１０がアサートされる。ｗｎｅｘｔ信号１５１０がアサートされると、ｎｅｘｔレジスタ（ｎｅｘｔ）１５０８はｎｅｘｔ＿ｂｙｔｅ指示４２０を発生し、符号化データストリームの次のバイトをｄａｔａ＿ｉｎ２２１に与えるよう指示する。一実施例では、ｎｅｘｔレジスタ１５０８は１ビットのレジスタである。すなわち、２バイトのうちの最初の１バイトが消費された時に、ｎｅｘｔ＿ｂｙｔｅ指示４２０がｄａｔａ＿ｉｎ２２１の次バイトを入力するよう指示する。
【０１８９】
ＦＳＭコーダーがリセットされると、バッファレジスタ１５０１、ｃｏｕｎｔレジスタ１５０６、ｎｅｘｔレジスタ１５０８はすべて初期化される。一実施例では、これらレジスタはすべて０に初期化される。なお、これらレジスタ１５０１，１５０６，１５０８を他の種類の記憶装置としてもよい。
図１７に示した構成のＶｅｒｉｌｏｇ記述例を図５２及び図５３に示す。
【０１９０】
［ＦＳＭコーダーの制御］
図１８は、符号化のための制御フローチャートである。図１９は復号化のための対応フローチャートである。この制御はハードウェア、ソフトウェア、又は、それらの組合せによる処理ロジックによって遂行される。一実施例では、処理ロジックは命令を実行する１つ以上のプロセッサを持つコンピュータからなる。
【０１９１】
図１８において、符号化用制御フローチャートの最初で、処理ロジックはリセットを行う（処理ブロック１６０１）。リセットを行ってから、処理ロジックは、符号化のためのビットと文脈が用意できているか調べる（処理ブロック１６０２）。符号化のためのビットと文脈が用意できていないならば、処理ロジックは処理ブロック１６０３に進み、ｅｎａｂｌｅ指示（例えば信号（群））をアサートしないで処理ブロック１６０２の最初に処理を戻す。ビットと文脈が用意されたならば、処理ブロック１６０４へ進み、処理ロジックはそのビットを符号化するためｅｎａｂｌｅ指示をアサートする。
【０１９２】
ｅｎａｂｌｅ指示をアサートした後、処理ロジックはデータ出力の用意ができているか調べる（処理ブロック１６０５）。データ出力の用意ができたならば、処理ロジックは処理ブロック１６０６でその出力データを処理し、そして処理ブロック１６０７に進む。上記処理は、例えば、データを記憶装置や、通信路、ディスプレイ、処理部、データを利用するその他のものへ転送することなどである。処理ロジックはデータを出力する準備ができていないと判断したときには、処理ブロック１６０７に進み、符号化するデータがまだあるか調べる。符号化するデータがまだあるならば、処理ブロック１６０２に戻るが、そうでなければ処理ブロック１６０８に進む。
【０１９３】
処理ブロック１６０８で、処理ロジックはｆｌｕｓｈ指示（例えば信号（群））をアサートする。その後、処理ロジックはデータを出力できるか調べる（処理ブロック１６０９）。データを出力できるならば、処理ロジックは処理ブロック１６１０に進み、出力データを処理し、そして処理ブロック１６１１に進む。データを出力できる状態でないときにも同様に、処理ブロック１６１１に進む。処理ブロック１６１１において、処理ロジックはフラッシングが済んだか調べる。フラッシングがまだ完了していないならば、処理ロジックは処理ブロック１６０８に戻る。フラッシングが完了したならば、符号化用制御フローは終了する。
【０１９４】
図１９を参照する。復号化用制御フローは処理ブロック１７０１より始まり、処理ロジックはＦＳＭコーダーをリセットする。ＦＳＭコーダーをリセットした後、処理ロジックは、文脈の用意ができていて、かつコーダーが復号化準備ができているか調べる（処理ブロック１７０２）。同期システムは常に準備が整っているが、非同期システムは数ビットの復号化データを要求し、かつ／又は、符号化データの入力を待つ。文脈の用意ができていないか、コーダーが復号化の準備ができていないときには、処理ブロック１７０３に進み、処理ロジックはｅｎａｂｌｅ指示をアサートせずに処理ブロック１７０２の最初に戻る。他方、文脈の用意ができ、かつ、復号化器の復号化準備が整ったならば、処理ブロック１７０４に進み、処理ロジックはｅｎａｂｌｅ指示をアサートして、そのビットの復号化を開始させる。ｅｎａｂｌｅ指示をアサートした後、処理ロジックは出力ビットを処理する（処理ブロック１７０５）。この処理は、例えば、復号化データを、それを利用する記憶装置、処理装置などへ転送することなどである。出力ビットを処理した後、処理ロジックはさらに符号化データが必要か調べる（処理ブロック１７０６）。さらに符号化データが必要ならば、処理ロジックは、さらに符号化データを復号化器に供給し（処理ブロック１７０７）、そして処理ブロック１７０８に進む。他方、もう符号化データが必要でなければ、直ちに処理ブロック１７０８に進む。処理ブロック１７０８において、処理ロジックは復号化するデータがまだあるか調べる。復号化するデータが残っているときには、処理ロジックは処理ブロック１７０２に戻る。復号化するデータがもうなければ、復号化用制御フローは終了する。
【０１９５】
以上の動作を詳細に表すＶｅｒｉｌｏｇ記述例を図５４乃至図５７に示す。なお、このＶｅｒｉｌｏｇ記述には、シミュレーションのための固有の初期化も含まれている。
【０１９６】
［並列処理とパイプライン処理］
本発明は、並列処理とパイプライン処理を用いて実施することもできる。そのいずれでも、最高クロック速度を上げ、かつ、毎クロックサイクルに１ビットより多くの符号化復号化が可能になる。しかしながら、フィードバックループ内のロジック量のせいで、パイプライン処理及び並列処理を行うことは難しい。次文脈より前の全てのビットに対し、文脈メモリとＦＳＭ状態、並びにｓｔａｒｔレジスタとｓｔｏｐレジスタを更新しなければならない。復号化の場合、多くの文脈モデルが次文脈の前の復号化済みビットを受け取って別のフィードバックループを作らなければならない。これらのフィードバックループは、いくつかの操作をシーケンシャルに行う必要があるため、並列処理が難しくなる。
【０１９７】
一実施例では、前述のハードウェアの設計は１サイクルあたり１ビットを処理する。他の圧縮用途では、画像の各画素毎に、多ビットを符号化しなければならず、したがって多くのクロックサイクル数を要する。１画素あたりの実際のクロックサイクル数は、画像の深さと内容によって左右される。１クロックサイクルあたりの処理ビット数が１ビットより多いこと、かつ／又は、クロックレートが画素クロックに比べ十分に高速であることが望ましい。
【０１９８】
本発明は、真の並列処理をするＦＳＭコーダーを提供できる。例えば、２ビット（と関連した文脈）を１サイクルで符号化できる。かかる場合、文脈モデルは２つの文脈を並列に生成する。ビットストリーム、文脈メモリとＦＳＭ状態、ｓｔａｒｔレジスタとｓｔｏｐレジスタは、あたかも２ビットが順に符号化されるかのように更新される。ビット生成ロジックは、２つのＰＣＬＡＳＳを処理するように変更するとよい。そうするには、ハードウェアのかなりの複雑化を避けられないであろう。例えば、符号語生成部は、２つのｓｐｌｉｔ値を処理して開始及び停止の両方を行い、また、最高１６ビットまでの符号語を生成する必要があろう。２ビット以上の同時処理は、特殊ケースだけを処理するのであれば単純化できるだろう。その特殊ケースが適用できない場合には、通常の一度に１ビットの動作モードが用いられることになろう。次にいくつか例を示す。
【０１９９】
・１ビットを任意のＰＣＬＡＳＳで符号化し、かつ、１ビットをＰＣＬＡＳ０だけで符号化する。
・２ビットを共にＰＣＬＡＳＳ  ０で符号化する。
・４ビットをすべてＰＣＬＡＳＳ  ０で符号化する。
・ＦＳＭ状態 ０で開始する時のみ、２ビットを任意のＰＣＬＡＳＳで符号化する。
【０２００】
真の並列処理のためのハードウェアコスト、又は、文脈モデルが文脈を並列に生成できないことにより、真の並列処理の魅力が損なわれる恐れがある。
【０２０１】
真の並列処理に代わる一方法は、符号化ビットストリームの別個の部分を別個のＦＳＭコーダーによって処理させる方法である。特に魅力的な選択肢は、単一の物理ＦＳＭコーダーを、いつくかの独立した仮想ＦＳＭコーダーとして動作するようにパイプライン化する方法である。パイプライン化の余地がなくなったならば、それらＦＳＭコーダー（又は、そのパイプライン化できない部分）を並列動作できるように再構成してよい。ビットストリームを並列符号化する部分に分割する方法はいろいろある。すなわち、
・映像の場合、別々のフレームを並列に符号化できる。
・画像をタイルに分割し、別々のタイルを並列に符号化できる。
・画像が複数の成分（ＲＧＢ，ＣＭＹＫ，ＹＵＶなど）を有する場合、別々の成分を並列に符号化できる。
・一つのタイル又は成分中にＦＳＭコーダーがリセットされる部分（ここではエントリーポイントと呼ぶ）が存在することがある。別々のエントリーポイントから始まる符号化データ・セグメントを並列に符号化できる。ウェーブレット係数の場合、図１１に示すような特別な桁揃えを用いると具合がよい。係数は同じサイズの４つのグループに分割される（ＤＳ１，ＳＤ１，ＤＤ１の各帯域はそれぞれ全係数の４分の１であるから）。（サイズが等しいということは係数の個数が等しいということであるが、各グループ内の総ビット数すなわちバイナリデシジョンの総数は異なることがある）レベル１以外のレベルは、正規化型又はピラミッド型に桁揃えしてよい。並列符号化しか望まないのであれば、文脈を並列に生成できる。並列に復号化するためには、まだ復号化されていないデータを文脈モデルが要求することは許されない。図１１の桁揃えの場合、レベル１の係数を親によって条件付けすることなく符号化する必要があろう。
【０２０２】
高度な並列処理を実現するために、上に述べたデータ分割方法のいくつかを同時に用いてもよい。しかし残念ながら、これらの方法は全て高速化の自由度をやや制限してしまう。単一タイル、単一成分で、（そのタイルの符号化データの先頭以外に）エントリーポイントがない単一の画像は、並列に符号化できない。
【０２０３】
ＦＳＭコーダーをパイプライン・ステージに分解可能な箇所はいくつかある。
例えば
・文脈モデルとＦＳＭコーダーの間
・文脈モデルの後
・確率状態展開の後
・ｓｅｌ値の生成の後
・状態展開の後
である。
【０２０４】
複数の独立したＦＳＭコーダーが用いられる場合、有効なウェーブレット・コードストリームを生成するために符号化データの並べ替えが行われる。符号化時に、各コーダーの出力は別々にバッファリングされる。それらのバッファリング内容は、符号化終了後にコードストリームの適切な位置に出力される。復号化する際には、各コーダーがコードストリームの別々の部分をアクセスする。
【０２０５】
以上の説明を読めば、当該技術分野の当業者には本発明の多くの変更例や変形例が明白になろう。よって、本発明は前述の各実施例のみに限定されるものではない。
【０２０６】
【発明の効果】
以上の説明から明らかなように、本発明によれば、ＦＳＭを利用した高性能なする符号化方法及び符号化装置を実現できる。ハードウェア、ソフトウエア、又は、ハードウェアとソフトウェアの組合せによる高性能なＦＳＭコーダーを実現できる。ＦＳＭコーダーのハードウェアコストを削減できる。ＦＳＭコーダーの大部分を１つ又はそれ以上のルックアップテーブル（ＬＵＴ）を用いて実現できる。ＦＳＭコーダー・ベースの高性能な圧縮／伸長システムを実現できる、等々の多くの効果を得られる。
【図面の簡単な説明】
【図１】  本発明の圧縮／伸長システムの一実施例のブロック図である。
【図２】  本発明の圧縮／伸長システムの他の実施例を示すブロック図である。
【図３】  統合型のＦＳＭ符号化／復号化テーブルを有し、別々の確率推定テーブルとビット生成ルックアップテーブルを利用するＦＳＭコーダーの一実施例のブロック図である。
【図４】  単一のＬＵＴで確率推定とビット生成を行うＦＳＭコーダーの一実施例を示すブロック図である。
【図５】  本発明のＦＳＭコーダーの一実施例のブロック図である。
【図６】  多重文脈確率推定部の一実施例のブロック図である。
【図７】  確率状態展開部の一実施例のブロック図である。
【図８】  ビット生成部の一実施例のブロック図である。
【図９】  ビット生成ロジックの一実施例を示すブロック図である。
【図１０】  状態展開部の一実施例のブロック図である。
【図１１】  ウェーブレット係数の代表的な桁揃えを示す。
【図１２】  １サイクルでフラッシングを行うためのフラッシュ・ロジックの一実施例のブロック図である。
【図１３】  現在区間で決定された符号語を１サイクルでフラッシングするためのフラッシュ・ロジックのブロック図を示す。
【図１４】  ビット生成ロジックの符号語生成部の一実施例のブロック図である。
【図１５】  パック部の一実施例のブロック図である。
【図１６】  パック部の他の実施例を説明するためのブロック図である。
【図１７】  アンパック部の一実施例のブロック図である。
【図１８】  符号化のための制御フローチャートである。
【図１９】  復号化のための制御フローチャートである。
【図２０】  復号化時のｌｉｋｅｌｙ指示生成の真理値表を示す図である。
【図２１】  様々なＬＵＴのサイズをまとめて示す図である。
【図２２】  図５に示した構成のＶｅｒｉｌｏｇ記述例を示す図である。
【図２３】  図２２のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図２４】  図６に示した構成のＶｅｒｉｌｏｇ記述例を示す図である。
【図２５】  図２４のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図２６】  図７に示した構成のＶｅｒｉｌｏｇ記述例を示す図である。
【図２７】  図２６のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図２８】  図２７のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図２９】  図２８のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図３０】  ａｄｖａｎｃｅ．ｈｅｘ表を示す図である。
【図３１】  ｎｅｘｔ＿ｍ．ｈｅｘ表を示す図である。
【図３２】  ｎｅｘｔ＿ｌ．ｈｅｘ表を示す図である。
【図３３】  ｆｉｒｓｔ．ｈｅｘ表を示す図である。
【図３４】  ｓｐｌｉｔ．ｈｅｘ表を示す図である。
【図３５】  ｓｐｌｉｔ５８．ｈｅｘリストを示す図である。
【図３６】  動作説明のためのデータ例を示す図である。
【図３７】  図３６のデータ例の続きを示す図である。
【図３８】  図３７のデータ例の続きを示す図である。
【図３９】  擬似コードを示す図である。
【図４０】  擬似コードを示す図である。
【図４１】  擬似コードを示す図である。
【図４２】  図９乃至図１２に示した構成のＶｅｒｉｌｏｇ記述例を示す図である。
【図４３】  図４２のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図４４】  図４３のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図４５】  図４４のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図４６】  １のビットの個数を求めるためのＶｅｒｉｌｏｇ記述例を示す図である。
【図４７】  図１４に示した構成のＶｅｒｉｌｏｇ記述例を示す図である。
【図４８】  図４７のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図４９】  有効なスタート値とストップ値のペアを示す図である。
【図５０】  図１５に示した構成のＶｅｒｉｌｏｇ記述例を示す図である。
【図５１】  図５０のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図５２】  図１７に示す構成のＶｅｒｉｌｏｇ記述例を示す図である。
【図５３】  図５２のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図５４】  図１８及び図１９に関連して説明した動作をＶｅｒｉｌｏｇ記述例を示す図である。
【図５５】  図５４のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図５６】  図５５のＶｅｒｉｌｏｇ記述の続きを示す図である。
【図５７】  図５６のＶｅｒｉｌｏｇ記述の続きを示す図である。
【符号の説明】
１０１  可逆ウェーブレット変換部
１０２  文脈モデル
１０３  ＦＳＭコーダー
１０４  ヘッダ処理部
１１２  文脈モデル
１１３  ＦＳＭコーダー
１１４  ヘッダ処理部
２０１  文脈メモリ
２０２  確率推定テーブル
２０３  マルチプレクサ（ＭＵＸ）
２０４  ビット（ｂｉｔ）ロジック
２０５  確率推定ロジック
２０６  エントロピー符号化復号化テーブル
２０７  エントロピー符号化復号化状態ストレージ
２０８，２０９，２１０  マルチプレクサ（ＭＵＸ）
３０１  統合型テーブル
４０１  確率状態展開部
４０２  多重文脈確率推定部
４０３  ビット生成部
４０４  パック部
４０５  アンパック部
５０１  文脈メモリ
５０２  メモリイネーブルロジック
５０３  リセットカウンタ
５０４  リセット完了ロジック
５０５  ＯＲゲート
５０６〜５０９  マルチプレクサ（ＭＵＸ）
５１０  ＭＰＳ更新ロジック
５１１，５１２  コンパレータ
６０１  確率クラス部
６０２  ＭＰＳ確率状態部
６０３  ＬＰＳ確率状態部
６０４  切り替え部
６０５  更新部
７０１  ビット生成部
７０２，７０３，７０４  レジスタ
７０５，７０６  マルチプレクサ（ＭＵＸ）
７０７  フラッシュロジック
８０１  状態展開部
８０２  コンパレータ
８０３  ｌｉｋｅｌｙロジック
８０４  マルチプレクサ（ＭＵＸ）
８０５  符号語生成部
９０１  マスク生成部
９０３  ＡＮＤゲート
９０５  次状態ＭＰＳ部
９０６  次状態ＬＰＳ部
９０７  第１優勢シンボル部
９０８  分割部
１３０１，１３０２  マルチプレクサ（ＭＵＸ）
１３０３  コンパレータ
１３０４  ＸＯＲゲート
１３０５  プライオリティエンコーダ
１３０６  符号語シフタ
１３０７  スタートシフタ
１３０８  ストップシフタ
１３０９  減算器
１４１０  フラッシュロジック
【図１】
0003748003.tif 000002
【図２】
0003748003.tif 000003
【図３】
0003748003.tif 000004
【図４】
0003748003.tif 000005
【図５】
0003748003.tif 000006
【図６】
0003748003.tif 000007
【図７】
0003748003.tif 000008
【図８】
0003748003.tif 000009
【図９】
0003748003.tif 000010
【図１０】
0003748003.tif 000011
【図１１】
0003748003.tif 000012
【図１２】
0003748003.tif 000013
【図１３】
0003748003.tif 000014
【図１４】
0003748003.tif 000015
【図１５】
0003748003.tif 000016
【図１６】
0003748003.tif 000017
【図１７】
0003748003.tif 000018
【図１８】
0003748003.tif 000019
【図１９】
0003748003.tif 000020
【図２０】
0003748003.tif 000021
【図２１】
0003748003.tif 000022
【図２２】
0003748003.tif 000023
【図２３】
0003748003.tif 000024
【図２４】
0003748003.tif 000025
【図２５】
0003748003.tif 000026
【図２６】
0003748003.tif 000027
【図２７】
0003748003.tif 000028
【図２８】
0003748003.tif 000029
【図２９】
0003748003.tif 000030
【図３０】
0003748003.tif 000031
【図３１】
0003748003.tif 000032
【図３２】
0003748003.tif 000033
【図３３】
0003748003.tif 000034
【図３４】
0003748003.tif 000035
【図３５】
0003748003.tif 000036
【図３６】
0003748003.tif 000037
【図３７】
0003748003.tif 000038
【図３８】
0003748003.tif 000039
【図３９】
0003748003.tif 000040
【図４０】
0003748003.tif 000041
【図４１】
0003748003.tif 000042
【図４２】
0003748003.tif 000043
【図４３】
0003748003.tif 000044
【図４４】
0003748003.tif 000045
【図４５】
0003748003.tif 000046
【図４６】
0003748003.tif 000047
【図４７】
0003748003.tif 000048
【図４８】
0003748003.tif 000049
【図４９】
0003748003.tif 000050
【図５０】
0003748003.tif 000051
【図５１】
0003748003.tif 000052
【図５２】
0003748003.tif 000053
【図５３】
0003748003.tif 000054
【図５４】
0003748003.tif 000055
【図５５】
0003748003.tif 000056
【図５６】
0003748003.tif 000057
【図５７】
0003748003.tif 000058