JP3748003B2 - 符号化方法及び圧縮/伸長システム - Google Patents

符号化方法及び圧縮/伸長システム Download PDF

Info

Publication number
JP3748003B2
JP3748003B2 JP37185298A JP37185298A JP3748003B2 JP 3748003 B2 JP3748003 B2 JP 3748003B2 JP 37185298 A JP37185298 A JP 37185298A JP 37185298 A JP37185298 A JP 37185298A JP 3748003 B2 JP3748003 B2 JP 3748003B2
Authority
JP
Japan
Prior art keywords
bit
state
value
bits
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP37185298A
Other languages
English (en)
Other versions
JPH11266162A (ja
Inventor
エル シュワルツ エドワード
ゴーミッシュ マイケル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ricoh Co Ltd
Original Assignee
Ricoh Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ricoh Co Ltd filed Critical Ricoh Co Ltd
Publication of JPH11266162A publication Critical patent/JPH11266162A/ja
Application granted granted Critical
Publication of JP3748003B2 publication Critical patent/JP3748003B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/63Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4006Conversion to or from arithmetic code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、データの符号化及び復号化の分野に係り、特に、有限状態マシン(FSM)を利用するデータの符号化及び復号化に関する。
【0002】
【従来の技術】
データ圧縮は、大量データの記憶及び伝送のために極めて有用な手段である。例えば、文書のファクシミリ送信のような画像伝送に要する時間は、圧縮を利用して、その画像の再生に必要なビット数を減らすと、著しく短縮される。
【0003】
入力したファイルもしくはデータセットが、デシジョン(decision)モデルの管理下で一連のデシジョンに変換される圧縮システムがある。各デシジョンは、それに関連した尤度を持ち、この尤度に基づいて一つの出力コードが生成されて圧縮ファイルに追加される。これらの符号化システムを実現するために、圧縮システムは3つの要素、すなわちデシジョン・モデル、確率推定方法及びビットストリーム・ジェネレータを有する。デシジョン・モデルは、入力データを受け取ってデシジョンの集合へ変換し、圧縮システムはそのデシジョンの集合を利用してデータを符号化する。デシジョン・モデルは、一般に文脈モデルと呼ばれる。確率推定方法は、各デシジョンの尤度の確率推定値を発生する手順である。ビットストリーム・ジェネレータは、最終的なビットストリーム符号化を行って出力コードを生成するもので、この出力コードが圧縮データセットもしくは圧縮ファイルである。デシジョン・モデル、ビットストリーム・ジェネレータの一方でも両方でも有効に圧縮を行うことができる。
【0004】
バイナリ・コーダーは、データを一連のバイナリ・デシジョンとして符号化するタイプの符号化復号化システムである。
【0005】
有限状態マシン(FSM)コーダーは、当該技術分野において周知のバイナリ・エントロピーコーダーである。FSMコーダーは、ロスレスの多重文脈バイナリ・エントロピーコーダーである。ビット生成(ビットと既知又は推定の確率値を与えられてビットストリームを生成する)と、確率推定(同じ文脈の過去のデータに基づき確率値を推定する)の両方に有限状態マシン(FSM)が利用される。FSMコーダーは、符号化時には、一連のビットと、それに関連した文脈とを受け取って、それらビットを可能な限り少ないデータで表現する符号化ビットストリームを発生する。FSMコーダーは、復号化時には、符号化ビットストリームと文脈の系列を受け取り、元のビット系列を再生する。FSMコーダーの一例は、米国特許第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日発行)も参照されたい。
【0006】
バイナリ・エントロピーコーダーは、画像圧縮システムのロスレス符号化復号化部として利用できる。これらシステムは、50%超の確率のシンボルの符号化を可能とし、かつ、被圧縮データのビット毎に独立した文脈変化(確率推定値の変化)を許容することによって、最大限の圧縮が可能である。他のバイナリ・エントロピーコーダーとして、IBM社のQコーダー、IBM社/三菱社のQMコーダー、米国特許第5,381,145号(発明の名称:Method and Apparatus for Parallel Encoding and Decoding of Data、1995年1月10日発行)及び米国特許第5,583,500号(発明の名称:Method and Apparatus for Parallel Encoding and Decoding of Data、1996年1月10日発行)に述べられているABSコーダーがある。
【0007】
FSMコーダーは、ソフトウェアにより比較的高速、簡易に実装できる。FSMコーダーは、現在、本発明の譲受法人によって標準化提案がなされている可逆ウェーブレット・ベースの画像圧縮システムに採用されている。
【0008】
【発明が解決しようとする課題】
本発明の目的は、FSMを利用する符号化方法、符号化装置又は符号化復号化装置(コーダー)の性能を向上させること、また、ハードウェアによる実装に好適なFSMコーダーを提供すること、ソフトウェアによる実装に好適な構成のFSMコーダーを提供すること、ハードウェアとソフトウェアの組合せによる実装に好適な構成なFSMコーダーを提供すること等である。これらの目的、その他の目的については以下の説明によって明確になろう。
【0009】
【課題を解決するための手段】
上記目的を達成するための本発明は、以下に列挙した方法、装置及びシステムを包含する。
【0010】
請求項1の発明は、有限状態マシン(以下、FSM)を利用し、
複数のビットの各ビット毎に、それぞれが一対の端点を持つ2つの部分区間に分割される数値区間を指定するステップ、
前記各ビット毎に、前記2つの部分区間のどちらの部分区間が優勢シンボルに関連付けられているか、及び、前記各ビットが優勢シンボルと同一であるか否かに基づいて、前記区間の前記2つの部分区間のうちの一方の部分区間を選択するステップ、及び
各区間毎に、前記選択された一方の部分区間の一対の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット(一致しない最初のビットは含まない)に対応した0個以上のビットを出力するステップ、
により、複数ビットを符号化するための符号化方法において、
第1のテーブルより第1の分割インデックス値を取得するステップ、及び
前記第1の分割インデックス値を利用して第2のテーブルより第2の分割インデックス値を取得するステップをさらに含むことを特徴とする。
【0011】
請求項2の発明は、請求項1記載の符号化方法において、前記分割インデックス値がFSM状態及び確率クラスに基づいて取得されることを特徴とする。
【0012】
請求項3の発明は、請求項2記載の符号化方法において、確率クラスに基づいてマスクを生成するステップ、
FSM状態に基づいてテーブルより第1の値を取得するステップ、
前記マスクと前記第1の値の論理積に基づいて第2の値を生成するステップ、
前記FSM状態と前記第2の値により前記第1のテーブルにより第1の分割インデック値を取得するステップを更に含むことを特徴とする。
【0013】
請求項4の発明は、請求項3記載の符号化方法において、前記論理積結果中の1をカウントしてカウント値を生成し、このカウント値が前記第2の値となることを特徴とする。
【0014】
請求項5の発明は、請求項1記載の符号化方法において、一致しないビットを最上位ビット位置まで左シフトし、下位ビットに、部分区間の端点が下側端点ならば0のビットを、上側端点ならば1のビットをそれぞれ充填するステップをさらに含むことを特徴とする。
【0015】
請求項6の発明は、文脈モデル、及び
前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するFSMコーダーからなり、
前記FSMコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ2つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット(一致しない最初のビットは含まない)に対応した0個以上のビットを出力することによってビットを符号化する圧縮/伸長システムにおいて、
前記FSMコーダーが、統合型のFSM符号化/復号化テーブルと、独立した確率推定ルックアップテーブル及びビット生成ルックアップテーブルを含むことを特徴とする。
【0016】
請求項7の発明は、文脈モデル、及び
前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するFSMコーダーからなり、
前記FSMコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ2つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット(一致しない最初のビットは含まない)に対応した0個以上のビットを出力することによってビットを符号化する圧縮/伸長システムにおいて、
前記FSMコーダーが、確率推定とビット生成の両方を行うための単一のルックアップテーブルを含むことを特徴とする。
【0017】
請求項8の発明は、文脈モデル、及び
前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するFSMコーダーからなり、
前記FSMコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ2つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット(一致しない最初のビットは含まない)に対応した0個以上のビットを出力することによってビットを符号化する圧縮/伸長システムにおいて、
前記FSMコーダーが、
多重文脈確率推定を行う第1の部分、
確率推定状態をその記述情報へ変換し、likely指示に応じて、符号化されていないビットを生成する変換部、
前記変換部より与えられる各確率推定値に応じて0個以上の符号語を生成し、かつ、符号化データストリームに応じて前記likely指示を生成するビット生成ルックアップテーブルを含む、符号化されていないビットと符号化されたビットの間の変換のためのビット生成部、及び
前記ビット生成ルックアップテーブルより符号語を受け取るように接続され、符号化時に符号化データ出力を発生するため可変長の符号語を結合してバイト群にするパック部からなることを特徴とする。
【0018】
請求項9の発明は、請求項6〜8のいずれか1項記載の圧縮/伸長システムにおいて、前記文脈モデルと結合された可逆ウェーブレット変換部をさらに含むことを特徴とする。
【0019】
請求項10の発明は、請求項6〜8のいずれか1項記載の圧縮/伸長システムにおいて、前記FSMコーダーと結合され、符号化データ及び信号を出力するヘッダ処理部をさらに含むことを特徴とする。
【0020】
請求項11の発明は、請求項8記載の圧縮/伸長システムにおいて、前記ビット生成ルックアップテーブルが冗長エントリーを含まないことを特徴とする。
【0021】
請求項12の発明は、請求項8記載の圧縮/伸長システムにおいて、前記符号化データストリームのバイト群の可変長シフト操作を行って可変長符号語にするアンパック部をさらに含むことを特徴とする。
【0022】
請求項13の発明は、請求項8記載の圧縮/伸長システムにおいて、確率状態に応じた確率クラスを生成する確率クラス部、
優勢シンボル(以下、MPS)が発生して確率状態の更新が必要なときの次の確率推定状態を生成するMPS確率状態部、
劣勢シンボル(以下、LPS)が発生して確率状態の更新が必要なときの次の確率推定状態を生成するLPS確率状態部、
MPSを切り替える必要があるときに切り替え指示を発生する切り替え部、
及び
確率状態が第1の所定値以下のときに更新指示を発生する更新部をさらに含むことを特徴とする。
【0023】
請求項14の発明は、請求項13記載の圧縮/伸長システムにおいて、前記MPS確率状態部が、現在の確率推定状態を、現在の確率状態の値に基づいたある値域内の整数だけインクリメント又はデクリメントすることによって次の確率推定状態を生成することを特徴とする。
【0024】
請求項15の発明は、請求項13記載の圧縮/伸長システムにおいて、前記切り替え指示が信号からなることを特徴とする。
【0025】
請求項16の発明は、請求項13記載の圧縮/伸長システムにおいて、確率状態が第1の所定値以下であるか第2の所定値と等しいときに前記切り替え指示がアサートされることを特徴とする。
【0026】
請求項17の発明は、請求項13記載の圧縮/伸長システムにおいて、前記更新指示が信号からなることを特徴とする。
【0027】
請求項18の発明は、請求項8記載の圧縮/伸長システムにおいて、前記ビット生成部が、符号化されていないビットと符号化されたビットとの間の変換を行うためのビット生成ロジックからなることを特徴とする。
【0028】
請求項19の発明は、請求項18記載の圧縮/伸長システムにおいて、前記ビット生成ロジックが、前記符号語を与える第1の出力と、前記符号語のサイズを指示する第2の出力を有することを特徴とする。
【0029】
請求項20の発明は、請求項18記載の圧縮/伸長システムにおいて、前記ビット生成ロジックが、前記区間を定義する次のスタート値及び次のストップ値を発生することを特徴とする。
【0030】
請求項21の発明は、請求項20記載の圧縮/伸長システムにおいて、前記ビット生成ロジックが発生した前記スタート値及び前記ストップ値を受け取るように接続されたスタートレジスタ及びストップレジスタをさらに含み、前記スタートレジスタ及び前記ストップレジスタが前記ビット生成ロジックの入力にも接続されることを特徴とする。
【0031】
請求項22の発明は、請求項8記載の圧縮/伸長システムにおいて、前記ビット生成部が、符号化の終わりでフラッシングのための符号語を生成することを特徴とする。
【0032】
請求項23の発明は、請求項8記載の圧縮/伸長システムにおいて、前記ビット生成部が、そのフラッシングのためのフラッシュ指示を通知されると、所定の符号語を出力するための符号語を生成するフラッシュロジックをさらに含むことを特徴とする。
【0033】
請求項24の発明は、請求項23記載の圧縮/伸長システムにおいて、前記フラッシュ指示がフラッシュ信号からなることを特徴とする。
【0034】
請求項25の発明は、請求項23記載の圧縮/伸長システムにおいて、符号化データを表す符号語及びフラッシングのための所定の符号語を受け取るように接続されたマルチプレクサをさらに含み、該マルチプレクサがその入力の一つを前記ビット生成部の出力として選択するため前記フラッシュ指示を受け取るように接続されることを特徴とする。
【0035】
請求項26の発明は、請求項8記載の圧縮/伸長システムにおいて、確率推定値及びFSM状態に応じて、第1の分割値と、MPSが発生し確率推定状態の更新が必要な場合の次の確率推定状態と、LPSが発生し確率推定状態の更新が必要な場合の次の確率推定状態とを生成する状態展開部、
前記第1の分割値と入力コードストリームを比較して第2の分割値を出力するコンパレータ、
前記コンパレータ及び前記状態展開部と接続され、likely指示を発生するlikelyロジック、
前記次の確率推定状態及び前記likely指示を受け取るように接続され、前記likely指示に基づいて前記次の確率推定状態の一方を出力するマルチプレクサ、及び
前記第1の分割値、前記likely指示及び区間指示に応じて、符号語を生成する符号語生成部をさらに含むことを特徴とする。
【0036】
請求項27の発明は、請求項26記載の圧縮/伸長システムにおいて、前記区間指示が、前記区間の始まりと終わりをそれぞれ示すスタート値とストップ値からなることを特徴とする。
【0037】
請求項28の発明は、請求項26記載の圧縮/伸長システムにおいて、前記状態展開部が、
確率推定値に応じたマスク値を発生する第1の部分、
前記FSM状態に応じた値を発生する第2の部分、
前記第1の部分の出力と前記第2の部分の出力の論理積演算を行うように接続されたゲートロジック、
前記ゲートロジックの出力を受け取り、該出力に応じた選択信号を発生するように接続された第3の部分、
前記選択信号及び前記FSM状態に応じて、MPSが発生して更新が必要な場合のための次の確率推定状態を生成する次状態MPS部、
前記選択信号及び前記FSM状態に応じて、LPSが発生して更新が必要な場合のための次の確率推定状態を生成する次状態LPS部、
前記選択信号及び前記FSM状態に応じて、どちらの部分区間がMPSの発生に関連付けられるかの指示を発生する第4の部分、及び
前記選択信号及び前記FSM状態に応じて前記第2の分割値を生成する第5の部分からなることを特徴とする。
【0038】
【発明の実施の形態】
以下の説明において、信号名、ビット数など、様々な具体例が示される。しかし、当業者には、そのような具体例によらずに本発明を実施し得ることは明白であろう。他方、本発明をいたずらに難解にしないため、周知の構造やびデバイスはブロック図として表し、詳しくは示さない。
【0039】
以下の詳細説明には、コンピュータメモリ内のデータビットに対する操作のアルゴリズム及び記号表現によって表された部分がある。このようなアルゴリズムの記述及び表現は、データ処理技術分野の当業者によって、その研究の内容を他の当業者に対し最も効率的に伝えるために用いられる手段である。あるアルゴリズムがあり、それが概して期待した結果に至る自己矛盾のないステップ系列だと考えられるとする。これらのステップは、物理量を物理的に処理する必要があるものである。必ずという訳ではないが、これらの物理量は記憶、転送、結合、比較、その他の処理が可能な電気的または磁気的信号の形をとるのが普通である。これらの信号をビット、値、要素、記号、文字、用語、数値等で表わすのが、主に慣用上の理由から、便利な場合があることが分かっている。
【0040】
しかしながら、このような用語や同様の用語は、適切な物理量と関係付けられるべきであり、また、これら物理量につけた便宜上のラベルに過ぎないということに留意すべきである。以下の説明から明らかなように、特に断わらない限り、「処理」「演算」「計算」「判定」「表示」等々の用語を用いて論じることは、コンピュータシステムのレジスタ及びメモリの内部の物理的(電子的)な量として表現されたデータを処理して、コンピュータシステムのメモリまたはレジスタ、同様の情報記憶装置、情報伝送装置あるいは表示装置の内部の同様に物理量として表現された他のデータへ変換する、コンピュータシステムあるいは同様の電子演算装置の作用及びプロセスを指すものである。
【0041】
また、後述のように、本発明は、本明細書において述べる操作を実行するための装置にも関係するものである。この装置は、希望する目的に専用に作ってもよいし、あるいは、汎用コンピュータを内蔵のコンピュータ・プログラムにより選択的に駆動または再構成したものでもよい。このようなコンピュータ・プログラムは、コンピュータが読み取り可能な、どのような種類の記憶媒体に格納してもよい。例えば、これに限定されるものではないが、フロッピーディスク、光ディスク、CD−ROM、光磁気ディスクなどの任意の種類のディスク、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM、EEPROM、磁気カード又は光カードなど、電子的命令の格納に適した、コンピュータのシステムバスに接続された任意種類の媒体でよい。本明細書に提示したアルゴリズムは、本質的に、いかなる特定のコンピュータ、その他の装置とも関わりがない。様々な汎用マシンを、本明細書に述べたところに従ったプログラムに利用してもよいが、必要な方法のステップの実行用に、より特化した装置を作るほうが好都合であるかもしれない。これら多様なマシンに要求される構造は以下の説明から明らかになろう。さらに、いかなる特定のプログラミング言語とも関連付けることなく本発明を説明する。本明細書における説明から理解されるように、様々なプログラミング言語を用いて本発明の内容を実現できる。
【0042】
本発明は、性能を向上するように設計されたFSMコーダーとFSMベースのコーダーシステムを提供する。ハードウェアに好適な構成、ソフトウェアに好適な構成、又は、ハードウェアとソフトウェアの組合せに好適な構成がある。
【0043】
本発明のFSMコーダーは、可逆ウェーブレットによる圧縮を利用したシステムのエントロピーコーダーとして用いることができる。
【0044】
図1は、本発明の圧縮/伸長システムの一実施例のブロック図である。図1において、画像データ105は、可逆ウェーブレット変換部101に入力され、又は可逆ウェーブレット変換部101より出力される。この可逆ウェーブレット変換部101は、順変換部と逆変換部からなる。可逆ウェーブレット変換部101は、文脈モデル102と結合される。文脈モデル102はFSMコーダー103とも結合され、FSMコーダー103はヘッダ処理部104とも結合される。ヘッダ処理部104は、符号化データ及び信号108を生成し又は受け取る。一実施例では、符号化データ及び信号108は、タグ付きのコードストリームからなる。このように、文脈モデル102とのインターフェースに加えて、FSMコーダー103の符号化データが、ヘッダ処理部104に生成/利用されるタグ付きコードストリームに含まれている。
【0045】
図1に示すFSMコーダー・ベースのシステムの基本動作は、次のとおりである。符号化時においては、入力データである画像データ105が、可逆ウェーブレット変換部101の可逆ウェーブレット順変換部によって、係数の系列に変換される。各係数は複数ビット長である。可逆ウェーブレット変換部101から出力された係数のビットは、文脈モデル102によって文脈ビンに分類される。各文脈ビン毎に1つの確率推定値が格納されており、これはFSMコーダー103の内部の確率推定マシン(PEM)によって生成される。一実施例では、この確率推定値はカウンタの値と同様の1つの状態である。一実施例では、この状態の1つのビットは、その文脈で0又は1のほうが発生する可能性が高いかどうかを表す。これは優勢シンボル又はMPSと呼ばれる。その他のビットは、MPSの(劣勢シンボル(LPS)に対する)約50%から約100%までのスキュー(PSTATE)を表す、すなわち、MPSが(LPSと比べて)どのくらい発生する可能性が高いかを表している。
【0046】
後述の状態マシン更新規則は、現在の状態と0又は1の発生を仮定したときに、PSTATEと、その文脈ビンで発生する可能性が高いビットを更新するために何をすべきかを規定する。一実施例では、この更新規則は、MPSとPSTATEを管理するために1文脈あたり10ビットだけ規定する。一般に更新規則は、MPSが生じた時にPSTATEをある量増加させ、LPS(劣勢シンボル)が生じた時にPSTATEをある量減少させる。一実施例では、スキューは16個の確率クラス(PCLASS)に分割される。各PCLASSは、一つの確率範囲として用いられる。
【0047】
FSMコーダー103は、各PCLASS毎にビットを符号化する有限状態マシン(FSM)を含んでいる。確率が50%を越えるビットを符号化するために、ビットが全く出力されず、情報がFSMの状態に一時的に格納されることがある。このエントロピーコーダーの状態によって、まだ出力されていないビットを復号化器が正しく認識できるようにするためには、どんなビットパターンを次に出力すればよいか指示される。
【0048】
図2は、2値画像データ115を処理するためのFSMコーダー・ベースの圧縮/伸長システムの別の実施例を示すブロック図である。図2において、112は文脈モデル、113はFSMコーダー(エントロピーコーダー)、114はヘッダ処理部(オプション)であり、それぞれ図1中の同一名称の部分に対応するものである。118は符号化データ及び信号である。ここで、2値画像の画素は符号化済みの近傍画素の2進値に基づいて1024文脈中の1つの文脈に分類される。これはJPIG標準と同様である。そのような近傍画素に基づく2つの文脈例も図2に示されている。
【0049】
可逆ウェーブレット・ベースの圧縮/伸長システムと2値画像圧縮/伸長システムに関連して本発明システムを説明したが、本発明は、ウェーブレット・ベースでない他のシステムにも適用可能である。また、画像データに関連して図1及び図2を説明したが、画像以外の種類のデータや情報、例えば音声やテキスト、コンピュータの実行ファイルやデータファイルなども処理可能である。
【0050】
[ルックアップテーブル(LUT)ベースのFSMコーダー]
本発明は、大部分が1つ又はそれ以上のルックアップテーブル(LUT)として実装されたソフトウェアのFSMコーダーを提供する。この本発明のFSMコーダーは、例えば、符号化対象ビット用のアドレス入力、エントロピーコーダー状態用のアドレス入力、及び/又は、PCLASSもしくはPSTATEのためのアドレス入力を持つ複数のLUTを使用する。一実施例では、PCLASSは、あるバイナリ・デシジョンに対する実際の確率推定値が含まれる一つのクラスであり、ある確率範囲として用いられる。一実施例では、PSTATEは、バイナリ・デシジョンの確率推定状態である。PCLASSとPSTATEは、バイナリ・デシジョン以外のものの確率に対応させてもよい。一実施例では、符号化対象ビット用アドレス入力は1ビットからなり、エントロピーコーダー状態は6ビットからなり、PCLASSは4ビットからなり、PSTATEは9ビットからなる。このようなアドレッシング方法によれば、全体のアドレスサイズは11ビット又は16ビットであり、2K又は64KのLUTエントリーを必要とする。FSMコーダーの復号化部のソフトウェアによる実装の中には、(符号化対象ビットに代えて)符号化されたデータをLUTの入力として用いるものもある。この符号化データは例えば8ビット長である。このようにすると、LUTの入力アドレスのサイズは18ビット又は23ビットに増加し、256K又は8MのLUTエントリーを必要とする。
【0051】
本発明の一実施例では、前述の符号化器用テーブル程度のサイズの単一のテーブルが、符号化と復号化の両方に利用される。すなわち、復号化と符号化のためにテーブルを別々に用意する必要はない。復号化器用の大きなLUTをなくせば、コストはかなり削減される。
【0052】
図3は、統合型のFSM符号化/復号化テーブルを持ち、独立した確率推定LUTとビット生成LUTを使うFSMコーダー(符号化器/復号化器)のブロック図である。図3において、文脈(context)メモリ201は、確率推定(probability estimation)テーブル202、マルチプレクサ(MUX)203、確率推定(probability estimation)ロジック205、及びビット(bit)ロジック204と結合されている。確率推定テーブル202はMUX203及び確率推定ロジック205、並びにエントロピー符号化復号化(entropy coding)テーブル206にも結合されている。確率推定ロジック205は、MUX203、ビットロジック204及びMUX209にも結合されている。エントロピー符号化復号化テーブル206は、エントロピー符号化復号化状態(entropy coding state)ストレージ207、ビットロジック204及びMUX208,209,210に結合されている。MUX208,209,210はビットロジック204にも結合されている。MUX210はエントロピー符号化復号化状態ストレージ207にも結合されている。
【0053】
符号化時の動作は以下のとおりである。LUTの値や確率推定ロジックの動作などの詳細については、後に詳しく述べる。ビット幅を示すが、それは例に過ぎない。ソフトウェアでは、ビット幅は8ビットの倍数又はソフトウェアを実行するコンピュータのワード・サイズの倍数に切り上げられるのが一般的である。
【0054】
まず、context(文脈ビン)211を用いて文脈メモリ201をアドレス指定する。context211に応じて、文脈メモリ201は、確率推定状態PSTATEであるpstate214とMPSであるmps215を出力する。アドレスのビット数(及びメモリロケーション数)はアプリケーション次第である。一実施例では、540個のメモリロケーションが使用され、文脈メモリ201はpstate214として9ビット、mps215として1ビットを出力する。図2に示す10ビットの2値テンプレートは、1024個のメモリロケーションを必要とする。
【0055】
pstate214が入力されると、確率推定テーブル202(一実施例ではLUT)はいくつかの出力を発生する。確率推定テーブル202は確率推定値pclass219を出力する。確率推定テーブル202は、MPSが発生し、かつ、PSTATEの更新が必要なときには次の確率推定状態PSTATEも出力する。確率推定テーブル202は、LPSが発生し、かつ、PSTATEの更新が必要なときには、次のPSTATEと、MPSを(0から1へ、又は1から0へ)切り替えるべきか否か(switch指示218として表されている)も出力する。一実施例では、この切り替え(switch)指示218は1ビットの信号である。MPSが発生した時に出力される次の確率推定状態と、LPSが発生した時に出力される次の確率推定状態は、ここでは、それぞれmps_pstate216とlps_pstate217と呼ばれる。
【0056】
mps_pstate216とlps_pstate217は、pstate214とともにMUX203に入力する。確率推定ロジック205は、MUX203に入力した確率推定状態の中から、次の確率推定状態next_pstate213を選び出す選択指示(例えば信号(信号群))220を出力する。一実施例では、pstate214が214以下の場合に、選択指示220は、入力ビットがMPSであるかLPSであるかによってmps_pstate216又はlps_pstate217をそれぞれ選択し、pstate214が214より大きく、かつビットが出力される場合には、選択指示220は、入力ビットがMPSであるかLPSであるかによってmps_pstate216又はlps_pstate217をそれぞれ選択する。他方、pstate214が214より大きく、かつビットが全く出力されない(符号化時)か消費されない(復号化時)場合には、選択指示220はpstate214をnext_pstate213として選択する。
【0057】
エントロピー符号化復号化テーブル206は、pclass219と、エントロピー符号化復号化状態ストレージ207から出るFSM状態(FSM_state)236を受け取るように結合されている。一実施例では、エントロピー符号化復号化状態ストレージ207はレジスタ、その他の一時的なバッファ、キュー又は記憶機構からなる。エントロピー符号化復号化テーブル206は、ビット生成LUTとして働く。最初は、エントロピー符号化復号化状態は0である。エントロピー符号化復号化テーブル206は、符号語(例えばビットパターン、トークン、シンボルなど)のcw(符号語)_mps227とcw_lps228を、符号化データストリームとして出力する。cw_mps227とcw_lps228は、符号化器にMPSが入力されたときと、LPSが入力されたときとにそれぞれ出力される符号語である。一実施例では、cw_mps227とcw_lps228は8ビットの符号語である。
【0058】
また、エントロピー符号化復号化テーブル206は、その入力に応じて、出力ビット数の指示も出力する。すなわち、エントロピー符号化復号化テーブル206は、符号語のサイズ、すなわち実際のビットパターンからなるcw_mps227及びcw_lps228のビット数をそれぞれ示すsize_mps230及びsize_lps231を出力する。一実施例では、size_mps230とsize_lps231はそれぞれ4ビットからなる。エントロピー符号化復号化テーブル206の出力には、state_mps233とstate_lps234もあり、これらは、MPS又はLPSが出力される場合の次のエントロピーコーダー状態をそれぞれ示す。一実施例では、state_mps233とstate_lps234はいずれも6ビットからなる。
【0059】
ビットロジック204は、符号化対象ビット(bit_in)222をmps215と比較し、それらが同一のときには、確からしい旨のlikely指示(例えば信号(群))223を発生する。他方、同一でないときには、likely指示223はアサートされない。
【0060】
likely指示223が真であるとき(すなわち、アサートされたとき)には、MUX208,209,210より、cw_mps227、size_mps230及びstate_mps233が、出力ビットストリーム(coded_data_out229)、出力サイズ(size232)、及び、(エントロピー符号化復号化状態ストレージ207に格納される)次のFSM状態next_FSM_state235として、それぞれ出力される。likely指示223が真でないときには、cw_lps228、size_lps231及びstate_lps234がMUX208,209,210よりそれぞれ出力される。
【0061】
確率推定ロジック205は、次のMPSの指示であるnext_mps212を決定し、また、次のPSTATEの指示であるnext_pstate213を、現在の確率推定状態pstate214にするか、更新後の値であるpstate_mps216とpstate_lps217の一方にするか制御する。一実施例では、LPSが発生し、かつ、PSTATEが4以下であるか262であるときに、確率推定ロジック205はnext_mps212を切り替えるべきと判断する。next_pstate213の選択制御のために、MUX203の選択入力に対する選択指示220を発生するロジックも含まれている。
【0062】
next_mps212とnext_pstate213は、context211に基づいたアドレスによってアドレス指定された文脈メモリ201のロケーションに書き込まれる。一実施例では、このアドレスはcontext211であり、書き込まれるデータはnext_mps212とnext_pstate213である。
【0063】
このようにして、確率推定とFSMビット生成のテーブルが分離したLUTベースのコーダーは符号化を行う。
【0064】
このLUTベースのコーダーは、同様の方法で復号化を行う。復号化を開始するため、文脈メモリ201がcontext211によってアドレス指定される。context211に応じて、文脈メモリ201はpstate214とmps215を出力する。前述のように、アドレスのビット数(及びメモリロケーション数)はアプリケーション次第である。一実施例では、文脈メモリ201は、pstate214として9ビットを、mps215として1ビットを、出力する。
【0065】
pstate214に応じて、確率推定テーブル202は確率推定値pclass219を出力する。一実施例では、pclass219は4ビットからなる。確率推定テーブル202は、MPSが発生し、かつPSTATEの更新が必要であるときには、次のPSTATEを出力する。この場合、次のPSTATEはmps_pstate216である。一実施例では、PSTATEの更新が必要となるのは、pstate214が214以下であるか、pstate214が214より大きく、かつビットが消費される場合である。一実施例では、mps_pstate216は9ビットである。また、確率推定テーブル202は、LPSが発生し、かつPSTATEの更新が必要なときには、次のPSTATEと、MPSの(0から1へ、又は1から0への)切り替え指示を出力する。この場合、次のPSTATEはlps_pstate217によって指示され、MPSを切り替えるか否かはswitch指示(例えば信号(群))218によって指示される。一実施例では、lps_pstate217とswitch指示218は、それぞれ9ビットと1ビットである。
【0066】
エントロピー符号化復号化テーブル206は、pclass219と、(エントロピー符号化復号化状態ストレージ207からの)FSM_state236を受け取るように結合されている。これらの入力に応じて、エントロピー符号化復号化テーブル(ビット生成LUT)206は、実際のビットパターン(例えば符号語、トークン、シンボルなど)からなるcw_mps227とcw_lps228の実際のビット数、並びに、符号語のcw_mps227とcw_lps228のそれぞれのサイズであるsize_mps230とsize_lps228を出力する。cw_mps227とcw_lps228は、復号化時には利用されないので、符号化専用の態様では発生する必要はない。一実施例では、これらのサイズ指示はそれぞれ4ビットであるが、符号語は8ビット長である。エントロピー符号化復号化テーブル206は、次のエントロピーコーダー状態としてstate_mps233とstate_lps234も出力する。一実施例では、これら次のエントロピーコーダー状態は6ビットからなる。なお、エントロピーコーダー状態は最初は0である。
【0067】
この復号化プロセスにおいて、エントロピー符号化復号化テーブル206は、符号化ストリーム中のMPSビットパターンとLPSビットパターンの間隔を示す分割値(split値)226も出力する。一実施例では、split値226は8ビットのデータからなる。エントロピー符号化復号化テーブル206は、split値226の「00000000」側のビットパターンがMPSを表すか否かを示すfps指示又は値225も出力する。一実施例では、fps値225は1ビット値である。split値226とfps値225の利用方法については後に詳述する。
【0068】
ビットロジック204は、fps値225及びsplit値226並びにmps215及びdata_in221を受け取るように接続されている。これら入力に応じて、ビットロジック204は、ビットストリームdata_in221の8ビットをsplit値226と比較し、図20に示す真理値表に従ってlikely指示(信号(信号群))223を発生する。
【0069】
likely指示223が真ならば、state_mps233がnext__FSM_state235としてMUX210より出力され、エントロピー符号化復号化状態ストレージ207に格納される。また、likely指示223が真ならば、size_mps230がMUX209より出力され、復号化に使用済みでもう必要でない符号化データのビット数を指定する。これによって、data_in221をシフト入力するシフトレジスタ(煩雑化を避けるため図示されていない)の制御が可能になる。他方、likely指示223が真でなければ、size_lps231とstate_lps234がMUX209,210よりそれぞれ出力される。なお、data_out229は、復号化時には利用されない(すなわち「何でも構わない」)。
【0070】
また、復号化時に、確率推定ロジック205は次のMPS値を決定し、それをnext_mps212として出力する。一実施例では、next_mps212は1ビット値である。一実施例では、このMPS値は、LPSが発生し、かつ、PSTATEが4以下であるか262であるときに切り替えられる。確率推定ロジック205はまた、次のPSTATEが、pstate214で示される現在のPSTATEであるか、mps_pstate216又はlps_pstate217で示される更新されたPSTATE値の一方であるか制御する。確率推定ロジック205は、この選択を、MUX203に対する選択指示(例えば信号(信号群))220を用いて制御する。MUX203の出力がnext_pstate213である。
【0071】
next_mps212とnext_pstate213は共に、context211によりアドレス指定された文脈メモリ201のロケーションに書き込まれる。
【0072】
文脈メモリ201は、符号化でも復号化でも入力は同じであることに注意されたい。また、復号化動作又は符号化動作を有効にするためのイネーブル・ロジックは示さていないが、当業者には明白であろう。
【0073】
なお、図3のコーダーは、本明細書において説明した他のコーダーと同様に、2つの独立したデータ入力を有し、その一つは符号化データ用、もう一つは符号化されていないデータ用のものである。一実施例では、コーダーは、これら2種類のデータを同じ入力又はポートで受け取り、コーダーの関連部分すなわち選択ロジックにどちらの種類のデータを現在受け取っているか知らせるための周知のロジック及び/又は1つ以上の符号化/復号化制御信号を用いる。このような入力構造を、本明細書に述べるどの実施例にも採用できる。
【0074】
図4は、単一のLUTで確率推定とビット生成の両方を行う構成のFSMコーダーを示す。単一のLUTを使うことにより、ソフトウェアによる実装に使われる操作(命令)が減るが、LUTは大きくなる。
【0075】
符号化時の動作は以下のとおりである。まず、context211を用いて文脈メモリ201をアドレス指定する。context211に応じて、文脈メモリ201はpstate214とmps215を出力する。アドレスのビット数(及びメモリロケーション数)はアプリケーション次第である。一実施例では、540個のメモリロケーションが使用され、文脈メモリ201はpstate214として9ビット、mps215として1ビットを出力する。
【0076】
pstate214が入力されると、確率推定及びビット生成のための統合型テーブル(combined memory)301は、MPSが発生し、かつ、PSTATEの更新が必要なときには次の確率推定状態PSTATEを出力する。一実施例では、PSTATEの更新が必要となるのは、pstate214が214以下の時、又は、pstate214が214より大きく、かつビットが出力される(符号化の場合)か消費される(復号化の場合)場合である。一実施例では、mps_pstate216は9ビットである。統合型テーブル301は、LPSが発生し、かつPSTATEの更新が必要なときには、次のPSTATEと、MPSの(0から1へ、又は1から0への)切り替え指示すなわちswitch指示218も出力する。一実施例では、switch指示218は1ビット信号である。MPSが発生した時の次の確率推定状態とLPSが発生した時の次の確率推定状態は、それぞれmps_pstate216とlps_pstate217である。mps_pstate216とlps_pstate217は、pstate214と共にMUX203に入力する。確率推定ロジック205は、MUX203に入力された確率推定状態から、次の確率推定状態であるnext_pstate213を選ぶ選択指示(例えば信号(信号群))220を出力する。
【0077】
統合型テーブル301は、エントロピー符号化復号化状態ストレージ207からFSM状態すなわちFSM_state236を受け取るように接続されている。一実施例では、エントロピー符号化復号化状態ストレージ207は、レジスタ、一時的なバッファ、キュー又はその他の記憶機構からなる。統合型テーブル301は、ビット生成LUTとして働く。最初は、エントロピー符号化復号化状態は0であり、統合型テーブル301は、符号語(ビットパターン)であるcw_mps227とcw_lps228を符号化データストリームとして出力する。一実施例では、cw_mps227とcw_lps228は8ビットの符号語である。統合型テーブル301は、出力ビット数指示も出力する。すなわち、統合型テーブル301は、符号語のサイズ、つまり実際のビットパターンからなるcw_mps227とcw_lps228のビット数をそれぞれ示すsize_mps230とsize_lps231を出力する。一実施例では、size_mps230とsize_lps231はそれぞれ4ビットからなる。統合型テーブル301の出力には、state_mps233とstate_lps234もあり、これらは、MPS又はLPSが出力される場合の次のエントロピーコーダー状態をそれぞれ示す。一実施例では、state_mps233とstate_lps234はいずれも6ビットからなる。
【0078】
ビットロジック204は、符号化対象ビットであるbit_in222をmps215と比較し、それらが同一のときにlikely指示223をアサートする(likely指示223は真である)。他方、同一でないときにはlikely指示223はアサートされない(likely指示は真でない)。
【0079】
likely指示223が真のときには(アサートされているときには)、MUX208,209,210より、cw_mps227、size_mps230及びstate_mps233がそれぞれ出力ビットストリームdata_out229、size指示232及び(エントロピー符号化復号化状態ストレージ207に格納される)next_FSM_state235に出力される。likely指示223が真でないときには、cw_lps228、size_lps231及びstate_lps234がMUX208,209,210よりそれぞれ出力される。
【0080】
確率推定ロジック205は、next_mps212を決定し、また、次のPSTATEすなわちnext_pstate213を、pstate214により示される現在のPSTATEにするか、更新後の値であるmps_pstate216又はlps_pstate217にするか制御する。この制御は、MUX203に対する選択指示220を発生することによって行われることは、前述の通りである。
【0081】
next_mps212とnext_pstate213は、context211によってアドレス指定された文脈メモリ201のロケーションに書き込まれる。すなわち、アドレスはcontext211からなり、書き込まれるデータはnext_mps212とnext_pstate213からなる。
【0082】
図4のコーダーの復号化動作も同様である。まず、context211によって文脈メモリ201をアドレス指定する。context211に応じて、文脈メモリ201はpstate214とmps215を出力する。アドレスのビット数(及びメモリロケーション数)はアプリケーション次第である。一実施例では、文脈メモリ201はpstate214として9ビット、mps215として1ビットを出力する。
【0083】
pstate214が入力されると、統合型テーブル301は、MPSが発生し、かつPSTATEの更新が必要であるときには、次の確率推定状態PSTATEを出力する。統合型テーブル301は、LPSが発生し、かつPSTATEの更新が必要なときには、次のPSTATEと、MPSの(0から1へ、又は1から0への)切り替え指示すなわちswitch指示218を出力する。一実施例では、switch指示218は1ビットの信号である。MPSが発生した時とLPSが発生した時の次の確率推定状態はそれぞれmps_pstate216とlps_pstate217である。mps_pstate216とlps_pstate217は、pstate214と共にMUX203に入力する。確率推定ロジック205は、MUX203に入力した確率推定状態より、次の確率推定状態next_pstate213を選択するための選択指示220を出力する。
【0084】
(エントロピー符号化復号化状態ストレージ207から出力される)FSM_state236も統合型テーブル(LUT)301に入力される。一実施例では、エントロピー符号化復号化状態ストレージ207は、レジスタ、一時的なバッファ、キュー又はその他の記憶機構からなる。統合型テーブル301はビット生成LUTとして働く。最初は、エントロピー符号化復号化状態は0である。統合型テーブル301は、符号語(ビットパターン、トークン、シンボルなど)であるcw_mps227とcw_lps228を出力し、これらはlikely指示223がアサートされているか否かに応じて符号化データストリームとなる。一実施例では、cw_mps227とcw_lps228は8ビットの符号語である。復号化器専用の実施例ではcw_lps227とcw_lps228は必要でない。統合型テーブル301は、出力ビット数の指示も出力する。すなわち、統合型テーブル301は、符号語のサイズ、つまり実際のビットパターンからなるcw_mps227とcw_lps228のビット数をそれぞれ示すsize_mps230とsize_lps231も出力する。一実施例では、size_mps230とsize_lps231は4ビットからなる。統合型テーブル301の出力には、state_mps233とstate_lps234もあり、これらはMPS又はLPSが出力される場合の次のエントロピーコーダー状態をそれぞれ示す。一実施例では、state_mps233とstate_lps234は6ビットからなる。
【0085】
図4のビットロジック204の動作は、split値226とfps値225を利用して復号化を実行することも含めて、図3に関連して述べたものと同様である。
【0086】
likely指示223が真のときには、MUX210よりstate_mps233がnext_FSM_state235として出力され、エントロピー符号化復号化状態ストレージ207に格納される。また、likely指示223が真のときに、復号化に使用済みでもう必要でない符号化データのビット数を指定するため、size_mps230がMUX209より出力される。これにより、data_in221をシフト入力するシフトレジスタ(煩雑化を避けるため図示されていない)の制御が可能になる。他方、likely指示223が真でなければ、size_lps231とstate_lps234がMUX209,210よりそれぞれ出力される。なお、復号化時は、data_out229は利用されない(すなわち「何でも構わない」)。
【0087】
確率推定ロジック205は、next_mps212を決定し、また、次のPSTATEすなわちnext_pstate213を、現在のPSTATEすなわちpstate214にするか、更新後の値であるmps_pstate216又はlps_pstate217にするか制御する。この制御は、MUX203に対する選択指示220を発生することによって行われることは、前述の通りである。
【0088】
next_mps212とnext_pstate213は、context211によってアドレス指定された文脈メモリ201のロケーションに書き込まれる。すなわち、アドレスはcontext211からなり、書き込まれるデータはnext_mps212とnext_pstate213からなる。
【0089】
図21に、さまざまなLUTのサイズをまとめて示す。図21の表を見ると、復号化のための分割点(split points)を持つ単一の符号化/復号化テーブルを用いると、コードストリームを入力として利用する復号化専用テーブルを用いるよりも、かなりのコスト削減になることが分かる。図21の表において、「分離」とラベル付けされたLUTは「確率推定専用」LUTを必要とするが、「統合」とラベル付けされたLUTは「確率推定専用」LUTを必要としない。
【0090】
[ロジック・ベースのFSMコーダー]
本発明の一実施例によれば、FSMコーダーはハードウェアにより実装される。以下の説明で、そのような実施例を少なくとも一つ述べる。説明の一部は、代表的なハードウェア記述言語Verilogによって記述される。
【0091】
本発明のFSMコーダーは、ハードウェアコストが減少する。一実施例では、エントロピーコーダー(ビット生成)ルックアップテーブルのサイズがかなり縮小され、ある実施例では、冗長なエントリーが使われないほぼ最小サイズまで縮小される。ロジックで、全ての必要情報を冗長性のないLUTエントリーより生成する。符号語のビットパターンと長さを、そのLUTで生成する必要はない。それらは、ロジックで生成されるからである。
【0092】
図5は、本発明のFSMコーダーの一実施例のブロック図である。確率状態展開部(pem_expand部)401は多重文脈確率推定部(pem_code部)402及びビット生成部(bit_generate部)403に接続されている。pem_code部402は、bit_generate部403にも接続されている。パック部(pack部)404とアンパック部(unpack部)405もbit_generate部403に接続されている。
【0093】
pem_code部402は、文脈メモリを内蔵し、多重文脈確率推定を行う。pem_expand部401は、pstate214のようなPSTATEを、そのPSTATEを記述する情報に変換する。bit_generate部403は、pclass219のようなPCLASSに応じて、符号化されていないビットと符号化されたビットの間の変換を行う。pack部404は、符号化時に、可変長符号語群を結合してバイト群にする。他方、unpack部405は、復号化時に、符号化データストリームのバイト群の可変長シフト操作を行う。
【0094】
このFSMコーダー400に対する入力は以下のとおりである。
bit_in222
pem_code部402への入力で、符号化期間に符号化対象のビットを表す。
data_in221
unpack部405への入力で、符号化データ(復号化期間のビットストリーム)を表す。一実施例ではデータは1バイトずつ入力されるが、これ以外のサイズでデータ入力をしてもよい。
context211
文脈ビン(文脈メモリのアドレス)で、pem_code部402に入力される。
clock410
システムクロックで、pem_code部402、pack部404、bit_generate部403、unpack部405に入力される。
一実施例では、このclock入力410はFSMコーダーのイネーブル信号として利用される。
enable414
pem_code部402、bit_generate部403、pack部404及びunpack部405に受け取られるように結合される制御指示(例えば信号(信号群))で、現クロックサイクルでの1ビットの符号化又は復号化を有効にする。
encode415
符号化又は復号化を選択する制御指示(例えば信号(信号群))。
flush413
符号化の最後でのフラッシングを有効にする制御指示(例えば信号(信号群))。flush信号413はbit_generate部403の内容を強制出力させる。フラッシングは符号化の最後に行われる操作で、codestream419へまだ出力されてない情報があれば、それが全て出力される。bit_generate部403がフラッシングを完了すると、pack部404に対するbg_done_flush信号416がアサートされる。bg_done_flush信号416及びflush信号413に応じて、pack部404はそれ自体のフラッシングをする。フラッシングを完了すると、pack部404はdone_flush信号424をアサートする。
reset411
pem_code部402、pack部404、bit_generate部403及びunpack部405の内部の全ての記憶要素(例えばフリップフロップ)に対する非同期初期化指示(例えば信号(信号群))。
reset411がデアサートされると、pem_code部402内の文脈メモリなどの内部メモリはクリアされる。
【0095】
このFSMコーダー400の出力は次のとおりである。
data_out229
符号化時の符号化データ(ビットストリーム)。一実施例ではデータは1バイトずつ出力されるが、これ以外のサイズでデータを出力してもよい。
data_out_ready423
現クロックサイクルのdata_out229が有効であることを示す制御指示(例えば信号(信号群))。
bit_out224
復号化されたビット。
reset_done421
リセットが完了したことを示す制御指示(例えば信号(信号群))。一実施例では、reset_done421は、reset411をデアサートした後に全内部メモリがクリアされたことを示す。
done_flush424
flush信号413をアサートした後にフラッシングが完了したことを示す制御指示(例えば信号(信号群))。
【0096】
pem_expand部401は、context211に応じpem_code部402より出力されるpstate214に応じて、pclass219を発生する。pem_expand部401は、MPSが発生したときの次のPSTATEの指示すなわちmps_pstate216と、LPSが発生したときの次のPSTATEの指示すなわちlps_pstate217も発生する(MPSを切り替える必要がある場合)。mps_pstate216とlps_pstate217は共に、PSTATEの更新が必要な時に用いられるPSTATEを表す。pem_expand部401は、MPSの(0から1へ、又は1から0への)切り替えを指示するswitch指示218も発生する。
【0097】
pem_expand部401は、update指示412によって、PSTATEの更新が必要か否かの指示も行う。一実施例では、update指示(例えば信号(信号群))412がアサートされると、MPS値の如何にかかわらずPSTATEが更新される。他方、update指示412がアサートされない(すなわち、真でない)場合、更新が行われるのは、符号語を発生もしくは利用するときに、符号語のサイズが0より大きいとき、又は出力のサイズが0未満であるときのみである。出力のサイズは出力符号語のサイズによって表され、この出力符号語のサイズはbit_generate部403より出るsize指示418によって示される。
【0098】
bit_generate部403は、pclass219に応じてビット生成を行い、また、符号化対象のビットであるbit_in222がMPS(例えば図6のMPS520)と同じであるか否かを指示する。この比較はpem_code部402内で行われるが、これについては図6で詳しく述べる(例えば、コンパレータ512)。bit_in222がMPSと同じならば、likely指示223がアサートされる。この場合、likely指示223は、符号化できる見込みがあることを示し、pem_code部402に入力される。pem_code部402は、likely指示223に応じて、likely指示223が真ならばbit_out224をMPSにし、likely指示223が真でなければ、その反対にする。
【0099】
pem_code部402は、その入力信号に基づいて、次のPSTATEであるpstate214を発生し、また、復号化時には復号化ビットをbit_out224として出力する。しかし、符号化時には、bit_out224は無視され、encode_likely指示422がアサートされ、これはbit_generate部403に受け取られる。復号化時には、encode指示415はアサートされず、unpack部405はデータバイトを可変長の符号語にアンパックする。この可変長符号語はcodestream419としてbit_generate部403へ出力される。また、unpack部405は、現在の入力データであるdata_in221が消費されたことを示すdata_in_next信号420を出力して、次のデータビットを要求する。
【0100】
codestream419及びpclass219に応じて、bit_generate部403はcodeword417とsize指示418を発生する。codeword417とsize指示418に応じて、pack部404は可変長の符号語群を結合しバイト群にする。
【0101】
一実施例では、符号化と復号化を同一にするように文脈モデルを更新するためにbit_out信号224が利用される。pack部404は、復号化時には利用されない。これら各部については、より詳細に後述する。
図5に示した構成のVerilog記述例を図22及び図23に示す。
【0102】
[多重文脈確率推定]
文脈メモリを内蔵し多重文脈確率推定を行うpem_code部402の一実施例のブロック図を図6に示す。
【0103】
図6において、メモリイネーブル(memory_enable)ロジック502は更新(updata)指示412、size指示418及びイネーブル(enable)指示414を受け取るように接続されている。これらの入力に応じてmemory_enableロジック502は出力を発生し、この出力はORゲート505の一方の入力に結合される。リセット(reset)指示411はリセット(reset)カウンタ503とリセット完了(reset_done)ロジック504の入力に結合される。resetカウンタ503の出力は、reset_doneロジック504のもう一つの入力と、MUX507の一方の入力に結合される。reset_doneロジック504の出力は、MUX507,508,509及びORゲート505の否定入力に結合される選択信号である。reset_doneロジック504の出力はまた、リセット完了(reset_done)指示421として送出される。ORゲート505の出力は文脈メモリ501の書き込みイネーブル入力(WE)に結合される。
【0104】
MUX507,508,509は2入力のマルチプレクサである。MUX507の他方の入力は、context211と結合されている。MUX508は、初期PSTATEとMUX506の出力を受け取るように接続されている。一実施例では、初期PSTATEは262である。これ以外の初期PSTATEを用いることもできる。初期PSTATEは適応化の高速化を考慮して選ぶ。高速適応化に関する詳細は、「Method and Apparatus for Encoding and Decoding Data」なる発明の名称で1996年12月17日に出願され、本発明の譲受法人に譲渡され、かつ、ここに援用されるところの米国特許出願第08/768,237号を参照されたい。
【0105】
MUX506の各入力は、mps_pstate216とlps_pstate217を受け取るように接続され、それら入力の一方が、MUX506の選択入力に結合されたlikely指示223に応じて選択される。MUX509の各入力は、初期化値(例えば、一実施例では0)と、MPS更新(MPS_update)ロジック510の出力を受け取るように接続されている。MPS_updateロジック510の各入力は、likely指示223、switch指示218、及び文脈メモリ501から出力されるMPS520を受け取るように接続されている。各MUX507,508,509の出力は文脈メモリ501の入力に接続されている。
【0106】
文脈メモリ501から出力されるMPS520は、コンパレータ511の一方の入力とコンパレータ512の一方の入力に結合される。コンパレータ511の他方の入力はlikely指示223であり、コンパレータ512の他方の入力はbit_in222である。煩雑化を避けるため示されていないが、クロック(clock)410は全てのレジスタとカウンタに結合されている。
【0107】
reset指示411はresetカウンタ503を0にクリアする。reset指示411がデアサートされた後、resetカウンタ503は文脈メモリ501の各文脈メモリロケーションのアドレスを生成し、初期PSTATEと初期MPSが各文脈メモリロケーションに書き込まれる。これら初期値の書き込みは、reset_doneロジック504から出力されるreset_done信号421に関連し、MUX507,508,509を利用して行われる。reset_done信号421は、MUX507,508,509の選択信号として働き、MUX507でresetカウンタ503から出る文脈メモリアドレスを、MUX508で初期PSTATEを、MUX509で初期MPSを、それぞれ選択する。一実施例では、初期PSTATE値の262と初期MPS値の0が文脈メモリ501のメモリロケーションに書き込まれる。全てのメモリロケーションの初期化後、reset_doneロジック504はreset_done信号421をアサートする。
【0108】
符号化時には、文脈メモリ501は、その書き込みイネーブル(WE)入力がアサートされた時に書き込まれる。文脈メモリ501のWE入力は、ORゲート505の出力が高電位の時にアサートされる。ORゲート505の出力が高電位になるのは、reset_doneロジック504の出力が低電位の時、すなわちリセットが完了した時、あるいは、memory_enableロジック502の出力が低電位の時である。
【0109】
文脈メモリ501への書き込み時に、リセット状態でなければ、context211による文脈メモリアドレスがMUX507を介して、次の確率推定状態がMUX508を介して、MPSがMUX509を介して、それぞれ与えられる。MUX508の入力はMUX506の出力であるが、この出力はmps_pstate216かlps_pstate217であり、そのいずれか一方がlikely指示223に基づいて選ばれる。MPS_updateロジック510より与えられるMPS値は、switch指示218がアサートされていて、かつ、LPSが発生した場合にはMPS値の補数である。
【0110】
文脈メモリ501に書き込まれるデータは、likely指示223により選ばれたPSTATEと、MPSであるが、このMPSはlikely指示223が0でswitch指示218が1の時に変更される。一実施例では、MUX506は、likely指示223が真ならばmps_pstate216を出力し、そうでなければ、lps_pstate217を出力する。MPS_updateロジック510の出力は、switch指示218と、likely指示223を否定したものとのANDをとった結果を、MPSとXORしたものである。
【0111】
文脈メモリ501の出力はpstate214とMPS520である。符号化の場合、符号化対象のビット(bit_in222)がコンパレータ512によってMPS520と比較され、encode_likely指示422が生成される。一実施例では、encode_likely指示422は、MPS520とbit_in222とのXNORをとることによって生成されるが、このMPS520は文脈メモリ501のエントリーの1ビットで表される。なお、encode_likely指示422をlikely指示223へフィードバックするためのロジック(不図示)が用いられる。これについては後に詳しく述べる。復号化の場合、likely指示223がコンパレータ511によってMPS520と比較されることにより復号化ビット(bit_out224)が生成される。一実施例では、bit_out224は、MPS520とlikely指示223のXNORをとることにより生成される。このXNORをとることは、MPS520とlikely指示223のマッチングをとることと等価である。
【0112】
図6においては、メモリは一つだけ使用されており、このメモリは一つの文脈に関する情報を出力する。速度を上げるため、並列メモリを使用してもよい。既に復号化されたビットは次のビットのための文脈をもたらすことが多い。このような文脈モデルへのフィードバックは、ここではビット−文脈遅延と呼ぶが、速度を低下させることがある。速度を上げるための一つの方法は、前ビットの両方の値のために使われる文脈ビンに対応した複数のメモリ出力を用意することである。メモリアクセスを、前ビットの生成と並行して(パイプライン化して)行ってもよい。その2つの文脈ビンのうちの適切な文脈ビンを、前ビットが分かった時に選択すればよい。選択操作は一般にメモリアクセスよりずっと高速である。複数の出力を持つ一つのメモリを使用してもよいし、複数のメモリを使用してもよい。
【0113】
メモリアクセスをパイプライン化した場合、同じメモリロケーションが連続的に(すなわち、ある最少数の連続したクロックサイクル間に)2度アクセスされた時に古い情報を利用してはならない。あるメモリロケーションが読み出されたならば、そのメモリロケーションは、更新値がメモリに書き戻されるまでは再び読み出してはならない。後続の読み出しでは、メモリを読み出すのではなく、既にメモリの外部にある値を使用して処理を施さなければならない。
図6に示した構成のVerilog記述例を図24及び図25に示す。
【0114】
[確率状態展開]
図7は、pstate214を当該PSTATEを記述する情報に変換し、それを出力するpem_expand部401の一実施例のブロック図である。
【0115】
図7において、確率状態展開(pem_expand)部401は、確率クラス部(pclass部)601、MPS確率状態部(mps_pstate部)602、LPS確率状態部(lps_pstate部)603、切り替え部(switch部)604及び更新部(update部)605からなり、これら各部はpstate214を受け取るように接続され、それに対応した出力を発生する。
【0116】
pclass部601は、pstate214に応じてpclass219を発生する。一実施例では、この確率推定値は4ビット値である。一実施例では、pstate214は0から268まで変化するが、0から15までの範囲のpclassに変換される。この機能を遂行するためのコードの例を後に示す。
【0117】
mps_pstate部602は(pstate214に応じて)mps_pstate216を発生するが、このmps_pstate216は、MPSが発生し、かつ、PSTATEが更新されるときの次のPSTATEである。一実施例では、mps_pstate216は9ビットからなる。一実施例では、mps_state216は、pstate214を、その値に基づいた0から5までの整数だけ増加させたものか、11だけ減少させたものである。
【0118】
lps_pstate部603は(pstate214に応じて)lps_pstate217を発生するが、このlps_pstate217はLPSが発生し、かつ、PSTATEが更新されるときの次のPSTATEである。一実施例では、lps_pstate217は9ビットからなる。一実施例では、lps_pstate217は、pstate214を、その値に基づいた整数1,3又は5だけ増加させたものか、−1から1246までの範囲内のある整数だけ減少させたものである。
【0119】
switch部604は、MPSを切り替える必要があるときにswitch指示218をアサートする。一実施例では、pstate214が4以下のとき、又は262に等しいときにswitch指示218がアサートされ、それ以外ではswitch指示218がデアサートされる。switch指示218は、発生しそうもないビットが発生したときに、文脈メモリ501のような文脈メモリに格納されているMPSの変更を指示する。一実施例では、switch指示218は1本の信号である。
【0120】
一実施例では、update部605は、pstate214が214以下のときにupdate指示412をアサートする。なお、214以下の確率状態は、良好な確率推定のためにビット毎の更新が必要とされる低スキューの確率状態(50%付近)として扱われる。214を越える確率状態は高スキューの確率状態として扱われ、少数の確率状態を利用して良好な確率推定を行うのにMPS毎の更新を必要としない。他の実施例では、214以外の確率状態が使用され、その選定はスキューと、確率推定がビット毎の更新を必要とするものであるか否かということに基づいてなされる。これは特定データ向けに選定されることになろう。upsate指示412は、符号化データが全く生成/消費されないときでも文脈メモリの更新を指示する。一実施例では、update指示412は1本の信号である。確率推定はビット毎に更新される。もう一つの実施例では、確率推定は、ビットが出力(又は消費)される時に必ず更新される。
図7に示した構成のVerilog記述例を図26乃至図29に示す。このVerilog記述に、本発明の確率推定規則の一例が記述されている。
【0121】
[ビット生成]
図8は、符号化されていないビットと符号化されたビットとの間の変換を行うbit_generate部403の一実施例のブロック図である。その機能の大部分は、ビット生成(bit_generate)ロジック701によって遂行される。
【0122】
図8において、bit_generateロジック701はlikely_in指示709、pclass219、encode指示(例えば信号(信号群))415、codestream419、並びに、レジスタ702,703,704の出力すなわちfsm_state、スタート(start)値及びストップ(stop)値を受け取るように接続されている。レジスタ702−704はそれぞれクロック410と結合されている。
【0123】
fsm_stateレジスタ702は、FSMの内部状態である。一実施例では、fsm_stateレジスタ702は、6ビットのレジスタであり、reset411がアサートされた時に所定の状態に設定される。一実施例では、この所定状態は0である。fsm_stateレジスタ702は、enable指示414がアサートされている時にクロックサイクルで更新される。
【0124】
スタート(start)レジスタ703は、codestream419に出力可能な最小の有効値を保持している。一実施例では、startレジスタ703は8ビットのレジスタである。startレジスタ703は、reset411がアサートされた時に所定値に設定され、enable指示414がアサートされた時にクロックサイクルで更新される。一実施例では、前記所定値は0である。
【0125】
ストップ(stop)レジスタ704は、codestream419に出力可能な最大の有効値を保持する。一実施例では、stopレジスタ704は8ビットのレジスタである。stopレジスタ704は、reset411がアサートされた時に所定値に設定され、enable指示414がアサートされた時にクロックサイクルで更新される。一実施例では、stopレジスタ704は、リセット時に11111111(2進)に設定される。
【0126】
これらの入力に応じて、bit_generateロジック701はlikely_out指示720、sz指示710、cw指示711、次のストップ値であるnext_stop値712、次のスタート値であるnext_start値713及びnext_state714を発生する。
【0127】
sz指示710はMUX705の一方の入力に結合されている。MUX705の他方の入力は、flush_sz指示(例えば信号(信号群))715と結合されている。同様に、MUX706は一方の入力にcw指示711を受け取り、他方の入力にフラッシュ(fulsh)ロジック707からのflush_cw716を受け取る。
【0128】
一実施例では、bit_generate部403は符号化の最後でフラッシングのための符号語を生成する。フラッシュ(flush)信号413は、MUX705,706の選択入力に結合されている。ビット生成部すなわちbit_generate部403がフラッシング中ではなく、したがってflush信号413がアサートされていない時には、MUX705,706はsz指示710をsize指示418として、cw指示711をcodeword417として、それぞれ出力する。他方、bit_generate部403がフラッシング中でflush信号413がアサートされている時には、flush_cw指示716によって表される所定の符号語がMUX706よりcodeword417として出力されるとともに、flush_sz指示715により与えられたサイズ指示がsize指示418として出力される。なお、bit_generateロジック701とflushロジック707については、より詳細に後述する。
【0129】
図9は、bit_generateロジック701の一実施例のブロック図である。図9において、bit_generateロジック701は状態展開部(state_expand部)801、コンパレータ802、likelyロジック803、マルチプレクサ804及び符号語生成部(codeword_generate部)805から構成されている。state_expand部801は、レジスタ702からのfsm_stateとpclass219を受け取るように接続されている。これらの入力に応じて、state_expand部801は、第1優勢シンボル(fps)指示(例えば信号(信号群))821、split8値822を、MPSが発生した時又はLPSが発生した時の次の確率状態とともに発生する。これらの次の確率状態をそれぞれnext_state_mps810、next_state_lps811と呼ぶ。state_expand部801の一実施例を、図10に関連し、より詳しく説明する。
【0130】
コンパレータ802は、split8値822とcodestream419を受け取るように接続されており、それら入力に応じてtop_split信号823を発生する。一実施例では、codestream419がsplit8値822より大きいときにtop_split信号823はアサートされる(例えば1になる)。codestream419がsplit8値822より小さいときには、top_split信号823はアサートされない(例えば0である)。
【0131】
likelyロジック803は、likely_in指示(例えば信号(信号群))709、encode指示415、top_split信号823、及びfps指示821を受け取るように接続されている。これら入力に応じて、likelyロジック803は図3及び図4のbitロジックと同様に動作し、likely_out指示720を発生する。このlekely_out指示720は、likely指示223と実質的に等しい。encode指示415が1のときには、likely_out指示720の出力はlikely_in指示709であるが、encode指示415が0のときには、likely_out指示720の出力はfps信号821とtop_split信号823とのXORである。likely_out指示720は、MUX804の選択入力並びにcodeword_generate部805の入力に結合される。
【0132】
MUX804は、next_state_mps指示810とnext_state_lps指示811を受け取るように接続されている。一実施例では、next_state指示714は、likely_out指示720がアサートされたときにはnext_state_mps指示810であり、そうでないときにはnext_state_lps指示811がnext_state指示714として出力される。
【0133】
codeword_generate部805は、fps指示821、split8値822、レジスタ703からのスタート値(start)、及びレジスタ704からのストップ値を受け取るように接続されている。これらの入力に応じて、codeword_generate部805はsz指示710、cw(codeword)指示711、next_start値713及びnext_stop値712を発生する。この符号語生成ブロックすなわちcodeword_generate部805について、図14に関連し、より詳しく説明する。
【0134】
なお、state_expand部801とcodeword_generate(cw_gen)部805は、ハードウェア・コストを減らすため、ロジックを用いて図3のエントロピー符号化復号化テーブルと同様の出力を発生するのである。
【0135】
[状態展開部]
図10は、状態展開部(state_expand部)801の一実施例のブロック図である。state_expand部801は、多段階ルックアップを利用することにより、冗長なLUTエントリーを除去してハードウェア・コストを減らす。
【0136】
図10において、pclass219はマスク生成(mask_generate)部901の入力に結合されている。mask_generate部901の出力はANDゲート903の一方の入力に接続されている。レジスタ702からのfsm_stateは、advance部902の一方の入力、次状態MPS部(next_state_mps部)905、次状態LPS部(next_state_lps部)906、第1優勢シンボル部(fps部)907、分割部(split部)908の一方の入力に結合されている。advance部902の出力は、ANDゲート903の他方の入力に結合されている。ANDゲート903の出力は、bits_on部904に接続されている。bits_on部904の出力は、next_state_mps部905、next_state_lps部906、fps部907、及び、split部908の他方の入力に結合されている。
【0137】
これら入力に応じて、next_state_mps部905はnext_state_mps810を発生し、next_state_lps部906はnext_state_lps811を発生し、また、fps部はfps信号821を発生する。また、split部908は、その入力に応じて、split8値822を発生する。split部908にsplit5部909が含まれている。このsplit5部909は、split部908の入力を受け取るように接続されており、この入力に応じて分割値のsplit5信号911を発生する。split5信号911はsplit5_to_split8部910の入力に結合され、このsplit5_to_split8部910は分割値のsplit8値822を発生する。
【0138】
LUTの第1段階は、advance部902によって行われる。一実施例では、advance部902は、各FSM(エントロピーコーダー)状態につき1エントリーを有し、レジスタ702からのFSM状態を受け取って、そのエントリーを出力する。一実施例では、advance部902は図30に示すadvance.hex表のような61エントリーを有する(左から右への順)。
【0139】
一実施例では、各エントリーは15ビットの16進数値である。各ビット位置がPCLASS 1からPCLASS 15に対応する(PCLASS 0に対応するビットはない)。あるビットは、あるPCLASSが前のPCLASSと同じものに符号化されるか異なったものに符号化されるかを示す(すなわち、そのLUT情報が連続したPCLASSで同じであるか異なるかを示す)。例えば、状態0は、7ECD(16進)すなわち1111110(2進)というエントリーを有する。右側(LSB)から数えて、ビット位置2,5,6及び9に0がある。これは、PCLASS 2がPCLASS 1と同じであることを意味する。同様に、PCLASS 4,PCLASS 5及びPCLASS 6が同じであり、また、PCLASS 8とPCLASS 9が同じである。1つの状態だけは全てのPCLASSにわたって同一である(advance=0000(16進))が、それ以外の状態は少数の異なったPCLASSがある。多数のPCLASSでLUT情報が同じ場合には、next_state_mps部905、next_state_lps部906、fps部907及びsplit部909を実現するためのロジックを縮減できる。
【0140】
mask__generate部901は、pclass219に応じたマスクを発生する。一実施例では、このマスクは、PCLASS 0に対しては000000000000000(2進)、PCLASS 1に対しては000000000000001(2進)、PCLASS 2に対しては000000000000011(2進)、等々である。このマスクは、ANDゲート903によって、advance部902の出力とANDをとられる。
【0141】
bits_on部904は、ANDゲート903から出力される1のビットを合計し、sel値912を発生する。sel値912は第2段階のLUTのためのインデックスとして利用される。
【0142】
next_state_mps部905、next_state_lps部906及びfps部907は、その対応値のルックアップを行う。
【0143】
一実施例では、next_state_mps部905は、図31に示すnext_m.hex表の如きエントリー(16進表示)を持つLUTを含んでいる。next_m.hex表の各行は1つのFSM状態(FSM状態0から始まる)に対応している。なお、同表の第2列は第1列の後に続くものである。
【0144】
これら61の状態のそれぞれについて、sel値912のとり得る最大8つの値としての8エントリーがある。ある状態に対し発生するsel値912の値が8つより少ない場合(多くのPCLASSで同じ情報を使うため)、「何でも構わない」値は「xx」で示されている。状態0に対し発生するsel値の値は8つより多く、次のMPS状態のための最初の8エントリーは上記表に示されているが、残りのエントリーはそれぞれ6、10、1B、38(16進)である。
【0145】
next_state_lps部906の一実施例は、図32に示すnext_l.hex表の如きエントリー(16進表示)を有するLUTを含んでいる。このnext_l.hex表の各行は1つのFSM状態に対応する。また、その第2列は第1列の後に続くものである。
【0146】
これら61状態のそれぞれについて、sel値912のとり得る最大8つの値としての8エントリーがある。ある状態に対して発生するsel値912の値が8つより少ない場合、「何でも構わない」値は「xx」で示されている。状態0に対して発生するsel値の値は8つより多く、次のMPS状態のための最初の8エントリーは上記表に示されているが、残りのエントリーは全て0である。
【0147】
一実施例では、fps部907は、図33に示すfirst.hex表の如きエントリーを有するLUTを含んでいる。first.hex表の第2列は第1列の後に続くものである。前述のように、各行は1つの異なったFSM状態に対応する。
【0148】
これら61状態のそれぞれについて、sel値912のとり得る最大8つの値としての8エントリーがある。ある状態に対して発生するsel値912の値が8つより少ない場合、「何でも構わない」値は「xx」で示されている。状態0に対して発生するsel値の値は8つより多く、次のMPS状態のための最初の8エントリーは上記表に示されており、残りのエントリーは全て1である。
【0149】
split5部909は、ルックアップを行って5ビットの分割(split)インデックスを発生し、このインデックスはsplit8_to_split8部910によって拡張されて適切な8ビットの分割(split)値、すなわちsplit8値822が生成される。split5部909は、図34に示すsplit.hex表の如き5ビットのエントリー(16進表示)を有するLUTを含んでいる。このsplit.hex表の第2列は、第1列に続くものである。
【0150】
これら61状態のそれぞれについて、sel値912のとり得る最大8つの値としての8エントリーがある。ある状態に対して発生するsel値912の値が8つより少ない場合、「何でも構わない」値は「xx」で示されている。状態0に対して発生するsel値912の値は8つより多く、次のMPS状態のための最初の8エントリーは上記リストに示されているが、残りのエントリーはそれぞれ1C,1D,1E及び1E(16進)である。
【0151】
5ビットの分割インデックスは、split8_to_split8部910により8ビットのsplit値に変換される。split5_to_split8部910は、図35に示すsplit58.hexリストの如きLUT(そのエントリーは16進表示)を用いる。例えば、状態が0、sel値が0の場合、最初の分割インデックスは05(16進)であり、これは80(16進)なる値に対応する。05(16進)値は、前記の図34のsplit.hex表の左上の値に見られる。値80(16進)は図35のsplit58.hexリストの05(16進)位置(すなわち、このリストの先頭から6番目の位置、ただし「xx」は00(16進)位置)より得られる。
【0152】
next_state_mps部905、next_state_lps部906、fps部907、及びsplit5部909を実現する場合に、レジスタ702からのfsm_stateとsel値912が共に動作開始時に有効であると仮定してもよい。この場合、各部は単一の出力を発生する。そうではなく、各部で2段階の手順を使えば、速度を上げることができる。まず、fsm_stateを用いて、sel値912のとり得る全ての値に対する出力を決定する。次に、sel値912を利用し、その正しいと見込まれる出力を選択して出力に出す。fsm_stateはsel値912より先に有効になるため、このようにすれば高速化が可能である。
【0153】
以下の例によって、FSMコーダーの一実施例の動作を説明する。図36乃至図38に結果をまとめて示す。まず、コーダーは、全ての文脈に対しPSTATE262で始動し、その際、PCLASS=0、MPS=0、FSM状態=0である。FSMコーダーの入力に文脈6と入力ビット0が与えられる。(この例における文脈とビットは任意に選んだものである)PCLASS 0は、sel値912が0であることを意味する。sel値912が0、FSM状態が0の場合、5ビットの分割(split)インデックス値が得られる。なお、この値は図34のsplit.hex表から得られる。この表の各行は一つのFSM状態に対応する(最初の行がFSM状態0に対応)。図35のsplit58.hexリストを用い、この5ビットの分割インデックスは分割(split)値、80(16進)に変換される。したがって、0からFFまでの区間が80(16進)で分割される結果、一方の区間は0から7Fまでとされ、もう一方の区間は80FからFFまでとされる。fps信号は、0〜FFの区間と80〜FFの区間のどちらをMPSの発生に関連付けるか指示する。どちらをMPSに関連付けるか判定するため、fps信号が評価される。この場合、fps信号は0である。その判定のために図33のfirst.hex表を参照して0のFSM状態に対応した第1行を調べ、同表の第1行と0のsel値912、すなわち当該行の第1ビットの第1ビット位置を選択させる。この場合、fps信号は0であるので、MPSは上側の区間80〜FFと関連付けられる。この入力ビットは可能性の高い状態である(すなわち、入力ビットはMPSと同じである)ので、80からFFまでの区間が評価される。この区間の上限FFと下限80の最上位ビットを比較すると、最初のビットはいずれの場合も1である。よって、1のビットが出力される。
【0154】
pstateが214以上であり、かつ出力があるので、PSTATEが更新される。更新結果は表の現在内容に基づいて決まり、状態263へ更新される。FSM状態については、図31のnext_m.hex表の第1行(FSM状態=0)の第1位置(sel値912=0)に00(16進)があるから、FSM状態0のままである。
【0155】
次に、区間から出力されずに残っているビットをシフトすることにより、区間が変更され新しい区間が作られる。例えば、符号語出力の結果、出力されなかった下側区間端点を表すビット全部が左へシフトされ、また、最下位ビットに0のビットがシフト入力される。最初の0のビットが出力済みで7つの0のビットが残っているから、この下位7ビット全部が左へ1ビット位置だけシフトされ、また、0がLSBに加えられる。同様に、区間の上側端点7Fに関して、残っているビット1111111が全て左へ1ビット位置だけシフトされ、また、別の1のビットが区間の最下位ビットに加えられる。その結果、00からFFまでの新しい区間が得られる(状態0は、その区間が00からFFまでであることを意味する)。
【0156】
次に入力される文脈とビットはそれぞれ6と0であり、PSTATEは263である。PSTATEが263ということは、PCLASSが2であることに相当する。PCLASSが2であることに対応して、mask_generate部901はマスク値000000000000011を出力する。FSM状態が0であることに対応して、advance部902はFSM状態0に対応するエントリーの7ECD(16進)すなわち111111011001101(2進)を出力する。mask_generate部901の出力とadvance部902の出力とのANDをとった結果は、000000000000001である。この値に対し、bits_on部904は、1というsel値912を発生する。このように、FSM状態が0、sel値912が1であると、図34のsplit.hex表からsplitインデックス0Cが得られる。このsplitインデックスは8ビットの分割(split)値A0に対応する。したがって、2つの区間は、00から9Fまでの区間とA0からFFまでの区間となる。
【0157】
FSM状態が0、sel値912が1であるので、図33のfirst.hex表の第1行の第2位置によってfps信号821が1であることが分かる。fps信号821が1であるので、優勢なケースに関連付けられる区間は00からBFまでの区間である。この区間が評価対象に選ばれるのは、入力ビットがMPSと同じである(つまり優勢状態である)からである。この区間の始端(00)の最上位ビットは終端(A0)の最上位ビットと一致しないので、出力されるビットがなく、システムは、図31のnext_m.hex表によって示される新たなFSM状態(行0(FSM状態=0)の第2位置(sel値912=1)に示される状態3)へ遷移するが、PSTATEはそのままである。なお、ビットが出力されないため、区間端点へのビットのシフト入力は行われない。
【0158】
次の入力は、6という文脈ビットと、0の入力ビットである。これら入力に基づいて、60(16進)というsplit値が発生する。このsplit値が前に選択された00からBFまでの区間に適用される。したがって、00から9Fまでの区間は、00から5Fまでと、60から9Fまでとに分割される。fps信号は、0から5Fまでの第1区間の第1部分が優勢な区間であることを指示する。入力ビットとしてMPSが受け取られているので、この0から5Fまでの第1区間が評価される。この場合、区間端点の0と5Fの第1ビットは一致し、したがって出力される。このビットを出力した後、区間値の残りのビットは左へシフトされ、下側区間に0が加えられ(端点00を生成する)、また、上側区間に1が加えられ(端点BFを生成する)、かくして、新たな区間は0からBFまでの区間となる。
【0159】
このような入力データの処理は図36乃至図38に示すように継続する。しかし、文脈が6で入力ビットが1の時に、興味深い事例が生じる。この場合、区間は0からC7までの範囲で、split値はC0(図35のsplit58.hex表より)である。fps信号に基づいて、優勢区間はC0からC7までとなる。この場合、この区間の始端と終端の上位5ビット11000(2進)は一致し、出力されることになろう。この5ビットの出力後、スタート区間とストップ区間の残りビットが左にシフトされ、その際に下側区間の下位ビットに0が充填され、また上側区間の下位ビットに1が充填される。その結果、0からFFまでの新たな区間が得られる。
【0160】
fps値とsplit値を用いる符号化器の実施例を説明したが、符号化器を同様の指示を利用してソフトウェアにより実装することもできる。ハードウェアでは、fps信号とのXOR演算の実行はかなり容易であるが、ソフトウェアによる場合、コンピュータのアーキテクチャによっては面倒な点がある。それは、ある数がもう一つの数以上であるか否かの判定の結果が、アクセスの容易でないステータスビットにセットされるためである。あるビットとステータスビットとのXORをとる操作すなわち比較操作をするには、ステータスビットが1か0かで異なったロケーションに分岐する分岐操作を行ってから、ステータスビット表示を表す1又は0が格納されている各ロケーションのレジスタをアクセスしなければならない。そのようなソフトウェアの擬似コードの一例を図39に示すが、これは非常に効率のわるい実装である。
【0161】
ソフトウェアでは、これらの面倒を解決するため、fpsが0の場合用と1の場合用の2つのsplit値を生成してもよい。1のfps信号が発生する割合が非常に高いため、XOR演算結果を求めるのに比較を1回行うだけでよいだろう(ハードウェアによる実装では2回の比較が必要)。しかし、その1回の比較で必要な結果が得られない場合には、別に2回の比較が必要になり(比較演算の回数がハードウェアでの2回より多い)、入力とMPSとの間の最終比較を行って、それらが一致するか(優勢であるか)判定する。このようなソフトウェアの擬似コードの一例を図40に示す。ただし、2つの分割値(split値)、すなわちfps指示=1用のsplit値(split8_fps1)と、fps指示=0用のsplit値(split8_fps0)を用いている。
【0162】
[フラッシング]
フラッシュ(flush)ロジック707については、いくつかの構成が可能である。図12は、0111(2進)なる値を用いて1サイクルでフラッシングするためのflushロジック707の一実施例のブロック図である。あるいは、もっと長い値、例えば10000000(2進)を用いることも可能である。図12において、遅延素子1101がflush信号413を受け取ってdone_flush指示416を出力するように接続されている。一実施例では、フラッシングに1サイクルかかる。また、この場合、flush_sz指示715は4に設定され、flush_cw指示716は4ビットの0111に設定される。また、startレジスタ703からのスタート値とstopレジスタ704からのストップ値は利用されない。
【0163】
最小のビット数でフラッシングするために、図13に示すように、スタート値及びストップ値によりフラッシングに用いられる符号語を決定してもよい。図13において、generate_codeword_for_flush部1201が、レジスタ703から出力されるスタート値と、レジスタ704から出力されるストップ値とを受け取るように接続されている。これら出力に応じて、generate_codeword_for_flush部1201は、flush_sz指示715とflush_cw指示716を出力する。また、遅延要素1202が、flush信号413を受け取ってdone_flush指示416を出力するように接続されている。generate_codeword_for_flush部1201の動作は、図41に示す擬似コードのとおりである。
【0164】
もう一つの実施例では、8ビットをPCLASS 0で符号化することによってフラッシングが行われる。そのためにFSMコーダー内に何もロジックを設ける必要がない。文脈モデル/確率推定/システムの制御部がフラッシングを遂行する。
図9、図10及び図11に示した構成のためのVerilog記述例を図42乃至図45に示す。
【0165】
[1のビットの個数測定]
図10のbits_on部904は、加算器のツリーを用いて1のビットの個数を求める。そのVerilog記述例を図46に示す。
【0166】
[符号語生成]
図14は、ビット生成(bit_generate)ロジック701の符号語生成部すなわちgenerate_codeword(cw_gen)部805の一実施例のブロック図である。前述のように、generate_codeword部805は、符号語を生成するが、この機能をLUTによるのではなくロジックによって遂行することによりハードウェアを節減する。
【0167】
図14において、generate_codeword部805はMUX1301を有し、このMUX1301はstartレジスタ703から出力されるスタート値とsplit8値822を受け取るように接続されている。減算器1309は、split8値822から1を引き算する。MUX1302は、その第1の入力で減算器1309の出力を受け取り、その第2の入力でstopレジスタ704から出力されるストップ値を受け取るように接続されている。MUX1301,1302の出力はコンパレータ1303より出力される選択信号によって選択される。このコンパレータ1303は、likely指示720とfps信号821を受け取るように接続されており、その二つの入力が等しいときに選択信号をアサートすることによって、MUX1301よりスタート値を出力させるように選択し、また、split8値822から1を差し引いた値をMUX1302より出力させるように選択する。
【0168】
MUX1301の出力は、XORゲート1304の一方の入力、符号語(codeword)シフタ1306及びスタート(start)シフタ1307に接続されている。MUX1302の出力は、XORゲート1304の他方の入力、及びストップ(stop)シフタ1308の一方の入力に接続されている。XORゲート1304の出力はプライオリティエンコーダ(priority encoder)1305の入力に接続されている。このプライオリティエンコーダ1305の出力が、generate_codeword部805より出力されるsz指示(例えば信号(信号群))710である。このsz指示710は、codewordシフタ1306、startシフタ1307及びstopシフタ1308の他方の入力にも結合されている。codeword(cw)シフタ1306、startシフタ1307、stopシフタ1308の出力がそれぞれcw(codeword)指示711、次スタート値(next_start値)713、及び次ストップ値(next_stop値)712である。
【0169】
スタート値とストップ値の間の現在の有効区間は、split8値822によって指定される値で分割される。コンパレータ1303は、likely_out指示720とfps信号821との間の比較を行い、新しい区間(新しいスタート値とストップ値)を作成するためにスタート値かストップ値をsplit8値822で指示される分割値によって置き換えるか判断する。一実施例では、ストップ値が置き換えられるときには、分割値から1を差し引いた値によって置き換えられる。新しいスタート値とストップ値がXORゲート1304によって排他的OR(XOR)をとられることにより、一致するビットの位置が検出される。MSBから始めて一致するビットの個数がプライオリティエンコーダ1305により求められ、符号語のサイズ(sz指示710)として出力される。この符号語のサイズによりシフタ1306,1307,1308を制御する。新たなスタート値とストップ値の一致ビットが、cwシフタ1306によりcw指示711として出力される。一致しないビットは、startシフタ1307及びstopシフタ1308により、next_start値713及びnext_stop値712としてそれぞれ出力される。startシフタ1307は、区間の下側端点のLBS(s)に0を充填する。stopシフタ1708は区間の上側端点のLSB(s)に1を充填する。これを行うためにシフト操作とOR演算を必要とする実施例もある(図47及び図48に示すVerilog記述例を参照)。
【0170】
なお、他の実施例では、これら三つのシフタの二つ又は全部を統合すしてもよい。また、cwシフタ1306で、新しいスタート値に代えて新しいストップ値を入力として利用してもよい。
図14に示した構成のVerilog HD記述例を、図47及び図48に示す。
【0171】
図49に、61個のFSM状態を表す有効なスタート値とストップ値のペアをまとめて示す。これらのスタート値とストップ値のペアだけが、ハードウェアの動作で生成される。
【0172】
[ビットパッキング]
図15は、コーダー400のパック(pack)部404の一実施例のブロック図である。pack部404は、符号化時に、可変長の符号語群を結合してバイト群にする。クロック信号とイネーブル信号は、煩雑さを避けるため図示されていない。
【0173】
図15において、codeword417は、ORゲート1402の一方の入力に結合され、シフタ1401の出力とORがとられる。このOR演算の結果はバッファレジスタ1403に格納される。バッファレジスタ(bbuf)1403は、ビット群を、それらがバイトに組み立てられ出力されるまで保持する。一実施例では、バッファレジスタ1403は16ビットのバッファである。入力データを受け取った時に、バッファレジスタ1403内に現在入っているデータがシフタ1401によりシフトされることにより、その新たなデータのための空きが作られ、そして、その新たなデータが追加される。復号化動作の終わりでフラッシングをするため、バッファレジスタ1403に現在入っている任意のデータが1バイトになるようシフトされる。バッファレジスタ1403の出力データはシフタ1405の入力に与えられる。シフタ1405は、カウント(count)レジスタ1406の値に従ってバッファレジスタ1403の内容を桁揃えしてデータ出力data_out229を発生する。例えば、バッファレジスタ1403に9ビット(ビット8〜ビット0)があり、countレジスタ1406のカウント値が9でビット8〜ビット1を出力する場合、シフタ1405は、その8ビットをdata_out229のビット7〜ビット0に桁揃えする。バッフアレジスタ1403のビット0は、次のバイトを出力できるようになるまで保持される。
【0174】
別の方法として、シフタを二つ用いるのではなく、シフタを一つだけ用いることもできる。この単一のシフタは、バッファレジスタ1403に対する出力データの桁揃えを行う。バッファレジスタ1403は、1バイト出力されるたびに8ビットだけシフトできる二つの8ビットレジスタとして構成される。そのような構成の一例を図16に示す。
【0175】
バッファレジスタ1403は、size指示418及びenable指示414を受け取るように接続されたイネーブル(enable)ロジック1408の出力に応答してデータを格納する。enableロジック1408が、そのイネーブル出力をアサートするのは、enable指示414がアサートされていてsize指示418が0より大きい時である。enableロジック1408のイネーブル出力は、ビットが送出されたことを知らせるためにusedレジスタ1409の入力に接続される。
【0176】
バッファレジスタ1403の出力は、シフト後のデータと結合するためシフタ1401へフィードバックされる。
【0177】
countレジスタ(bcnt)1406は、バッファレジスタ1403内の出力待ちのビットを常時把握している。countレジスタ1406は、入力データのサイズから、data_in_ready信号1428がアサートされているか否かによって決まる特定の値を差し引いた値だけインクリメントされる。data_in_ready信号1428がアサートされているときには、countレジスタ1406のカウント値は入力データのサイズから8を引いた値だけインクリメントされるが、アサートされていないときには、カウント値は入力データのサイズだけ(すなわち0を引いた値)インクリメントされる。カウント(count)ロジック1404(size指示418、data_out_ready信号423のフィードバック、countレジスタ1406からのフィードバック、flushロジック1410の出力を受け取るように接続されている)は、data_in_ready信号1428をアサートする働きをする。一実施例では、countレジスタ1406は4ビットのカウンタからなる。
【0178】
readyロジック1407は、countレジスタ1406の出力が8以上になったことを観測した時にdata_out_ready信号423をアサートする。このアサート時に、countロジック1404はcountレジスタ1406のカウント値を8だけデクリメントする。
【0179】
フラッシュ(flush)ロジック1410は、符号化の最後に、まだバッファされているデータをフラッシングするため、つまり全部出力させるために利用される。一実施例では、flushロジック1410は、flush信号413及びdone_flush信号416に応じて、countロジック1404及びシフタ1401をフラッシングさせる。flushロジック416は、usedレジスタ1409の出力及びcountレジスタ1406の出力も受け取るように接続されている。usedレジスタ(bused)1409は、何かデータが入力された時に1に設定される。一実施例では、usedレジスタ1409は1ビットのレジスタである。usedレジスタ1409は、データが入力されていないためフラッシングが不要であることを指示するものである。flushロジック1410がフラッシング動作を実行するのは、flush信号413がアサートされていて、countレジスタ1406の値が0より大きく、かつ、usedレジスタ1409の値が0より大きいときである。したがって、usedレジスタ1409がデータが入力されていないことを指示しているときには、flushロジック1410はフラッシングが済んでいる旨を指示する。フラッシングを行うために、data_out_ready信号423がアサートされていないときにバッファレジスタ1403の内容がシフタ1401によりMSBへ移動させられ、また、countレジスタ1406の内容が、data_out_ready信号423がアサートされているならば0に、アサートされていなければ8にそれぞれ設定される。フラッシングは当該技術分野で周知である。
【0180】
このようなフラッシングの完了後、flushロジック1410はdone_flush信号424をアサートする。つまり、flush信号413がアサートされていて、countレジスタ1406の値が0であるかusedレジスタ1409の値が0であるときに、done_flush信号424がアサートされる。
【0181】
FSMコーダーがリセットされるときに、バッファレジスタ1403、countレジスタ1406及びusedレジスタ1409は初期化される。一実施例では、これらレジスタは0に初期化される。
図15に示した構成のVerilog記述例を図50及び図51に示す。
【0182】
[ビット・アンパッキング]
図17は、復号化時に、復号化データストリームのバイトの可変長シフトを行って可変長符号語にするアンパック(unpack)部405の一実施例のブロック図である。clock410、reset信号411及びenable信号414は、煩雑化を避けるため図示されていない。
【0183】
図17において、data_in221はバッファレジスタ1501及びシフタ1504の入力に結合されている。バッファレジスタ(ubuf)1501は、先行の符号化データをあるビット数だけ保持する。一実施例では、バッファレジスタ1501は8ビットのレジスタであり、先行の8ビット分の符号化データを保持する。
【0184】
バッファレジスタ1501の出力はシフタ1502の入力に接続され、このシフタ1502は、countレジスタ1506の出力に応じて、データをORゲート1503の一方の入力へシフトする。ORゲート1503の他方の入力はシフタ1504の出力と接続され、このシフタ1504はdata_in221を、countレジスタ1506より出力されるcount1509に応じてシフトする。ORゲート1503の出力がdata_out1520であるが、これはcodestream419である。
【0185】
countレジスタ1506は、countロジック1505の出力に応じてcount1509を出力する。countロジック1505は、countレジスタ1506からフィードバックされるcount1509、size指示418及びコンパレータ1507の出力に応じて、出力を発生する。コンパレータ1507の他方の入力はcount1509と結合される。コンパレータ1507の出力、すなわちwnext信号1510はnextレジスタ1508の入力に結合される。nextレジスタ1508の出力がnext_byte信号(=data_in_next信号)420である。
【0186】
countレジスタ(ucnt)1506は、復号化器によって消費されなかったバッファレジスタ1501内のビットの数を保持する。countレジスタ1506は、size指示418により指示された、復号化器により消費された符号語のサイズだけ、countロジック1505を介しデクリメントされる。countレジスタ1506の値が現在要求されている符号語のサイズ以下である時に、data_in221がバッファレジスタ1501に格納され、countレジスタ1506が8だけインクリメントされ、またwnext信号1510がアサートされる。
【0187】
count1509(countレジスタ1506)に等しいビット数だけバッファレジスタ1501より取り込み、かつ、8からcount1509に等しいビット数を差し引いたビット数だけdata_in221より取り込むことによって、正しく整列されたコードストリームdata_out1520が生成される。
【0188】
コンパレータ1507は、count1509がsize指示418以下であるか判定するコンパレータである。count1509がsize指示418以下ならば、wnext信号1510がアサートされる。wnext信号1510がアサートされると、nextレジスタ(next)1508はnext_byte指示420を発生し、符号化データストリームの次のバイトをdata_in221に与えるよう指示する。一実施例では、nextレジスタ1508は1ビットのレジスタである。すなわち、2バイトのうちの最初の1バイトが消費された時に、next_byte指示420がdata_in221の次バイトを入力するよう指示する。
【0189】
FSMコーダーがリセットされると、バッファレジスタ1501、countレジスタ1506、nextレジスタ1508はすべて初期化される。一実施例では、これらレジスタはすべて0に初期化される。なお、これらレジスタ1501,1506,1508を他の種類の記憶装置としてもよい。
図17に示した構成のVerilog記述例を図52及び図53に示す。
【0190】
[FSMコーダーの制御]
図18は、符号化のための制御フローチャートである。図19は復号化のための対応フローチャートである。この制御はハードウェア、ソフトウェア、又は、それらの組合せによる処理ロジックによって遂行される。一実施例では、処理ロジックは命令を実行する1つ以上のプロセッサを持つコンピュータからなる。
【0191】
図18において、符号化用制御フローチャートの最初で、処理ロジックはリセットを行う(処理ブロック1601)。リセットを行ってから、処理ロジックは、符号化のためのビットと文脈が用意できているか調べる(処理ブロック1602)。符号化のためのビットと文脈が用意できていないならば、処理ロジックは処理ブロック1603に進み、enable指示(例えば信号(群))をアサートしないで処理ブロック1602の最初に処理を戻す。ビットと文脈が用意されたならば、処理ブロック1604へ進み、処理ロジックはそのビットを符号化するためenable指示をアサートする。
【0192】
enable指示をアサートした後、処理ロジックはデータ出力の用意ができているか調べる(処理ブロック1605)。データ出力の用意ができたならば、処理ロジックは処理ブロック1606でその出力データを処理し、そして処理ブロック1607に進む。上記処理は、例えば、データを記憶装置や、通信路、ディスプレイ、処理部、データを利用するその他のものへ転送することなどである。処理ロジックはデータを出力する準備ができていないと判断したときには、処理ブロック1607に進み、符号化するデータがまだあるか調べる。符号化するデータがまだあるならば、処理ブロック1602に戻るが、そうでなければ処理ブロック1608に進む。
【0193】
処理ブロック1608で、処理ロジックはflush指示(例えば信号(群))をアサートする。その後、処理ロジックはデータを出力できるか調べる(処理ブロック1609)。データを出力できるならば、処理ロジックは処理ブロック1610に進み、出力データを処理し、そして処理ブロック1611に進む。データを出力できる状態でないときにも同様に、処理ブロック1611に進む。処理ブロック1611において、処理ロジックはフラッシングが済んだか調べる。フラッシングがまだ完了していないならば、処理ロジックは処理ブロック1608に戻る。フラッシングが完了したならば、符号化用制御フローは終了する。
【0194】
図19を参照する。復号化用制御フローは処理ブロック1701より始まり、処理ロジックはFSMコーダーをリセットする。FSMコーダーをリセットした後、処理ロジックは、文脈の用意ができていて、かつコーダーが復号化準備ができているか調べる(処理ブロック1702)。同期システムは常に準備が整っているが、非同期システムは数ビットの復号化データを要求し、かつ/又は、符号化データの入力を待つ。文脈の用意ができていないか、コーダーが復号化の準備ができていないときには、処理ブロック1703に進み、処理ロジックはenable指示をアサートせずに処理ブロック1702の最初に戻る。他方、文脈の用意ができ、かつ、復号化器の復号化準備が整ったならば、処理ブロック1704に進み、処理ロジックはenable指示をアサートして、そのビットの復号化を開始させる。enable指示をアサートした後、処理ロジックは出力ビットを処理する(処理ブロック1705)。この処理は、例えば、復号化データを、それを利用する記憶装置、処理装置などへ転送することなどである。出力ビットを処理した後、処理ロジックはさらに符号化データが必要か調べる(処理ブロック1706)。さらに符号化データが必要ならば、処理ロジックは、さらに符号化データを復号化器に供給し(処理ブロック1707)、そして処理ブロック1708に進む。他方、もう符号化データが必要でなければ、直ちに処理ブロック1708に進む。処理ブロック1708において、処理ロジックは復号化するデータがまだあるか調べる。復号化するデータが残っているときには、処理ロジックは処理ブロック1702に戻る。復号化するデータがもうなければ、復号化用制御フローは終了する。
【0195】
以上の動作を詳細に表すVerilog記述例を図54乃至図57に示す。なお、このVerilog記述には、シミュレーションのための固有の初期化も含まれている。
【0196】
[並列処理とパイプライン処理]
本発明は、並列処理とパイプライン処理を用いて実施することもできる。そのいずれでも、最高クロック速度を上げ、かつ、毎クロックサイクルに1ビットより多くの符号化復号化が可能になる。しかしながら、フィードバックループ内のロジック量のせいで、パイプライン処理及び並列処理を行うことは難しい。次文脈より前の全てのビットに対し、文脈メモリとFSM状態、並びにstartレジスタとstopレジスタを更新しなければならない。復号化の場合、多くの文脈モデルが次文脈の前の復号化済みビットを受け取って別のフィードバックループを作らなければならない。これらのフィードバックループは、いくつかの操作をシーケンシャルに行う必要があるため、並列処理が難しくなる。
【0197】
一実施例では、前述のハードウェアの設計は1サイクルあたり1ビットを処理する。他の圧縮用途では、画像の各画素毎に、多ビットを符号化しなければならず、したがって多くのクロックサイクル数を要する。1画素あたりの実際のクロックサイクル数は、画像の深さと内容によって左右される。1クロックサイクルあたりの処理ビット数が1ビットより多いこと、かつ/又は、クロックレートが画素クロックに比べ十分に高速であることが望ましい。
【0198】
本発明は、真の並列処理をするFSMコーダーを提供できる。例えば、2ビット(と関連した文脈)を1サイクルで符号化できる。かかる場合、文脈モデルは2つの文脈を並列に生成する。ビットストリーム、文脈メモリとFSM状態、startレジスタとstopレジスタは、あたかも2ビットが順に符号化されるかのように更新される。ビット生成ロジックは、2つのPCLASSを処理するように変更するとよい。そうするには、ハードウェアのかなりの複雑化を避けられないであろう。例えば、符号語生成部は、2つのsplit値を処理して開始及び停止の両方を行い、また、最高16ビットまでの符号語を生成する必要があろう。2ビット以上の同時処理は、特殊ケースだけを処理するのであれば単純化できるだろう。その特殊ケースが適用できない場合には、通常の一度に1ビットの動作モードが用いられることになろう。次にいくつか例を示す。
【0199】
・1ビットを任意のPCLASSで符号化し、かつ、1ビットをPCLAS0だけで符号化する。
・2ビットを共にPCLASS 0で符号化する。
・4ビットをすべてPCLASS 0で符号化する。
・FSM状態 0で開始する時のみ、2ビットを任意のPCLASSで符号化する。
【0200】
真の並列処理のためのハードウェアコスト、又は、文脈モデルが文脈を並列に生成できないことにより、真の並列処理の魅力が損なわれる恐れがある。
【0201】
真の並列処理に代わる一方法は、符号化ビットストリームの別個の部分を別個のFSMコーダーによって処理させる方法である。特に魅力的な選択肢は、単一の物理FSMコーダーを、いつくかの独立した仮想FSMコーダーとして動作するようにパイプライン化する方法である。パイプライン化の余地がなくなったならば、それらFSMコーダー(又は、そのパイプライン化できない部分)を並列動作できるように再構成してよい。ビットストリームを並列符号化する部分に分割する方法はいろいろある。すなわち、
・映像の場合、別々のフレームを並列に符号化できる。
・画像をタイルに分割し、別々のタイルを並列に符号化できる。
・画像が複数の成分(RGB,CMYK,YUVなど)を有する場合、別々の成分を並列に符号化できる。
・一つのタイル又は成分中にFSMコーダーがリセットされる部分(ここではエントリーポイントと呼ぶ)が存在することがある。別々のエントリーポイントから始まる符号化データ・セグメントを並列に符号化できる。ウェーブレット係数の場合、図11に示すような特別な桁揃えを用いると具合がよい。係数は同じサイズの4つのグループに分割される(DS1,SD1,DD1の各帯域はそれぞれ全係数の4分の1であるから)。(サイズが等しいということは係数の個数が等しいということであるが、各グループ内の総ビット数すなわちバイナリデシジョンの総数は異なることがある)レベル1以外のレベルは、正規化型又はピラミッド型に桁揃えしてよい。並列符号化しか望まないのであれば、文脈を並列に生成できる。並列に復号化するためには、まだ復号化されていないデータを文脈モデルが要求することは許されない。図11の桁揃えの場合、レベル1の係数を親によって条件付けすることなく符号化する必要があろう。
【0202】
高度な並列処理を実現するために、上に述べたデータ分割方法のいくつかを同時に用いてもよい。しかし残念ながら、これらの方法は全て高速化の自由度をやや制限してしまう。単一タイル、単一成分で、(そのタイルの符号化データの先頭以外に)エントリーポイントがない単一の画像は、並列に符号化できない。
【0203】
FSMコーダーをパイプライン・ステージに分解可能な箇所はいくつかある。
例えば
・文脈モデルとFSMコーダーの間
・文脈モデルの後
・確率状態展開の後
・sel値の生成の後
・状態展開の後
である。
【0204】
複数の独立したFSMコーダーが用いられる場合、有効なウェーブレット・コードストリームを生成するために符号化データの並べ替えが行われる。符号化時に、各コーダーの出力は別々にバッファリングされる。それらのバッファリング内容は、符号化終了後にコードストリームの適切な位置に出力される。復号化する際には、各コーダーがコードストリームの別々の部分をアクセスする。
【0205】
以上の説明を読めば、当該技術分野の当業者には本発明の多くの変更例や変形例が明白になろう。よって、本発明は前述の各実施例のみに限定されるものではない。
【0206】
【発明の効果】
以上の説明から明らかなように、本発明によれば、FSMを利用した高性能なする符号化方法及び符号化装置を実現できる。ハードウェア、ソフトウエア、又は、ハードウェアとソフトウェアの組合せによる高性能なFSMコーダーを実現できる。FSMコーダーのハードウェアコストを削減できる。FSMコーダーの大部分を1つ又はそれ以上のルックアップテーブル(LUT)を用いて実現できる。FSMコーダー・ベースの高性能な圧縮/伸長システムを実現できる、等々の多くの効果を得られる。
【図面の簡単な説明】
【図1】 本発明の圧縮/伸長システムの一実施例のブロック図である。
【図2】 本発明の圧縮/伸長システムの他の実施例を示すブロック図である。
【図3】 統合型のFSM符号化/復号化テーブルを有し、別々の確率推定テーブルとビット生成ルックアップテーブルを利用するFSMコーダーの一実施例のブロック図である。
【図4】 単一のLUTで確率推定とビット生成を行うFSMコーダーの一実施例を示すブロック図である。
【図5】 本発明のFSMコーダーの一実施例のブロック図である。
【図6】 多重文脈確率推定部の一実施例のブロック図である。
【図7】 確率状態展開部の一実施例のブロック図である。
【図8】 ビット生成部の一実施例のブロック図である。
【図9】 ビット生成ロジックの一実施例を示すブロック図である。
【図10】 状態展開部の一実施例のブロック図である。
【図11】 ウェーブレット係数の代表的な桁揃えを示す。
【図12】 1サイクルでフラッシングを行うためのフラッシュ・ロジックの一実施例のブロック図である。
【図13】 現在区間で決定された符号語を1サイクルでフラッシングするためのフラッシュ・ロジックのブロック図を示す。
【図14】 ビット生成ロジックの符号語生成部の一実施例のブロック図である。
【図15】 パック部の一実施例のブロック図である。
【図16】 パック部の他の実施例を説明するためのブロック図である。
【図17】 アンパック部の一実施例のブロック図である。
【図18】 符号化のための制御フローチャートである。
【図19】 復号化のための制御フローチャートである。
【図20】 復号化時のlikely指示生成の真理値表を示す図である。
【図21】 様々なLUTのサイズをまとめて示す図である。
【図22】 図5に示した構成のVerilog記述例を示す図である。
【図23】 図22のVerilog記述の続きを示す図である。
【図24】 図6に示した構成のVerilog記述例を示す図である。
【図25】 図24のVerilog記述の続きを示す図である。
【図26】 図7に示した構成のVerilog記述例を示す図である。
【図27】 図26のVerilog記述の続きを示す図である。
【図28】 図27のVerilog記述の続きを示す図である。
【図29】 図28のVerilog記述の続きを示す図である。
【図30】 advance.hex表を示す図である。
【図31】 next_m.hex表を示す図である。
【図32】 next_l.hex表を示す図である。
【図33】 first.hex表を示す図である。
【図34】 split.hex表を示す図である。
【図35】 split58.hexリストを示す図である。
【図36】 動作説明のためのデータ例を示す図である。
【図37】 図36のデータ例の続きを示す図である。
【図38】 図37のデータ例の続きを示す図である。
【図39】 擬似コードを示す図である。
【図40】 擬似コードを示す図である。
【図41】 擬似コードを示す図である。
【図42】 図9乃至図12に示した構成のVerilog記述例を示す図である。
【図43】 図42のVerilog記述の続きを示す図である。
【図44】 図43のVerilog記述の続きを示す図である。
【図45】 図44のVerilog記述の続きを示す図である。
【図46】 1のビットの個数を求めるためのVerilog記述例を示す図である。
【図47】 図14に示した構成のVerilog記述例を示す図である。
【図48】 図47のVerilog記述の続きを示す図である。
【図49】 有効なスタート値とストップ値のペアを示す図である。
【図50】 図15に示した構成のVerilog記述例を示す図である。
【図51】 図50のVerilog記述の続きを示す図である。
【図52】 図17に示す構成のVerilog記述例を示す図である。
【図53】 図52のVerilog記述の続きを示す図である。
【図54】 図18及び図19に関連して説明した動作をVerilog記述例を示す図である。
【図55】 図54のVerilog記述の続きを示す図である。
【図56】 図55のVerilog記述の続きを示す図である。
【図57】 図56のVerilog記述の続きを示す図である。
【符号の説明】
101 可逆ウェーブレット変換部
102 文脈モデル
103 FSMコーダー
104 ヘッダ処理部
112 文脈モデル
113 FSMコーダー
114 ヘッダ処理部
201 文脈メモリ
202 確率推定テーブル
203 マルチプレクサ(MUX)
204 ビット(bit)ロジック
205 確率推定ロジック
206 エントロピー符号化復号化テーブル
207 エントロピー符号化復号化状態ストレージ
208,209,210 マルチプレクサ(MUX)
301 統合型テーブル
401 確率状態展開部
402 多重文脈確率推定部
403 ビット生成部
404 パック部
405 アンパック部
501 文脈メモリ
502 メモリイネーブルロジック
503 リセットカウンタ
504 リセット完了ロジック
505 ORゲート
506〜509 マルチプレクサ(MUX)
510 MPS更新ロジック
511,512 コンパレータ
601 確率クラス部
602 MPS確率状態部
603 LPS確率状態部
604 切り替え部
605 更新部
701 ビット生成部
702,703,704 レジスタ
705,706 マルチプレクサ(MUX)
707 フラッシュロジック
801 状態展開部
802 コンパレータ
803 likelyロジック
804 マルチプレクサ(MUX)
805 符号語生成部
901 マスク生成部
903 ANDゲート
905 次状態MPS部
906 次状態LPS部
907 第1優勢シンボル部
908 分割部
1301,1302 マルチプレクサ(MUX)
1303 コンパレータ
1304 XORゲート
1305 プライオリティエンコーダ
1306 符号語シフタ
1307 スタートシフタ
1308 ストップシフタ
1309 減算器
1410 フラッシュロジック

Claims (28)

  1. 有限状態マシン(以下、FSM)を利用し、
    複数のビットの各ビット毎に、それぞれが一対の端点を持つ2つの部分区間に分割される数値区間を指定するステップ、
    前記各ビット毎に、前記2つの部分区間のどちらの部分区間が優勢シンボルに関連付けられているか、及び、前記各ビットが優勢シンボルと同一であるか否かに基づいて、前記区間の前記2つの部分区間のうちの一方の部分区間を選択するステップ、及び
    各区間毎に、前記選択された一方の部分区間の一対の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット(一致しない最初のビットは含まない)に対応した0個以上のビットを出力するステップ、
    により、複数ビットを符号化するための符号化方法において、
    第1のテーブルより第1の分割インデックス値を取得するステップ、及び
    前記第1の分割インデックス値を利用して第2のテーブルより第2の分割インデックス値を取得するステップをさらに含むことを特徴とする符号化方法。
  2. 前記分割インデックス値がFSM状態及び確率クラスに基づいて取得されることを特徴とする請求項1記載の符号化方法。
  3. 確率クラスに基づいてマスクを生成するステップ、
    FSM状態に基づいてテーブルより第1の値を取得するステップ、
    前記マスクと前記第1の値の論理積に基づいて第2の値を生成するステップ、
    前記FSM状態と前記第2の値により前記第1のテーブルにより第1の分割インデック値を取得するステップを更に含むことを特徴とする請求項2記載の符号化方法。
  4. 前記論理積結果中の1をカウントしてカウント値を生成し、このカウント値が前記第2の値となることを特徴とする請求項3記載の符号化方法。
  5. 一致しないビットを最上位ビット位置まで左シフトし、下位ビットに、部分区間の端点が下側端点ならば0のビットを、上側端点ならば1のビットをそれぞれ充填するステップをさらに含むことを特徴とする請求項1記載の符号化方法。
  6. 文脈モデル、及び
    前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するFSMコーダーからなり、
    前記FSMコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ2つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット(一致しない最初のビットは含まない)に対応した0個以上のビットを出力することによってビットを符号化する圧縮/伸長システムにおいて、
    前記FSMコーダーが、統合型のFSM符号化/復号化テーブルと、独立した確率推定ルックアップテーブル及びビット生成ルックアップテーブルを含むことを特徴とする圧縮/伸長システム。
  7. 文脈モデル、及び
    前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するFSMコーダーからなり、
    前記FSMコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ2つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット(一致しない最初のビットは含まない)に対応した0個以上のビットを出力することによってビットを符号化する圧縮/伸長システムにおいて、
    前記FSMコーダーが、確率推定とビット生成の両方を行うための単一のルックアップテーブルを含むことを特徴とする圧縮/伸長システム。
  8. 文脈モデル、及び
    前記文脈モデルと結合され、前記文脈モデルより受け取ったビットを符号化するFSMコーダーからなり、
    前記FSMコーダーが、複数のビットのうちの各ビット毎に、それぞれが一対の端点を持つ2つの部分区間に分割される数値区間を指定し、入力ビットが優勢状態であるか否かに基づいて前記一対の部分区間のうちの一方の部分区間を選択し、前記一方の部分区間の端点間で一致するビット群の、その最上位ビットから、前記一方の部分区間の端点間で一致しない最初のビットまでに存在するビット(一致しない最初のビットは含まない)に対応した0個以上のビットを出力することによってビットを符号化する圧縮/伸長システムにおいて、
    前記FSMコーダーが、
    多重文脈確率推定を行う第1の部分、
    確率推定状態をその記述情報へ変換し、likely指示に応じて、符号化されていないビットを生成する変換部、
    前記変換部より与えられる各確率推定値に応じて0個以上の符号語を生成し、かつ、符号化データストリームに応じて前記likely指示を生成するビット生成ルックアップテーブルを含む、符号化されていないビットと符号化されたビットの間の変換のためのビット生成部、及び
    前記ビット生成ルックアップテーブルより符号語を受け取るように接続され、符号化時に符号化データ出力を発生するため可変長の符号語を結合してバイト群にするパック部からなることを特徴とする圧縮/伸長システム。
  9. 前記文脈モデルと結合された可逆ウェーブレット変換部をさらに含むことを特徴とする請求項6〜8のいずれか1項記載の圧縮/伸長システム。
  10. 前記FSMコーダーと結合され、符号化データ及び信号を出力するヘッダ処理部をさらに含むことを特徴とする請求項6〜8のいずれか1項記載の圧縮/伸長システム。
  11. 前記ビット生成ルックアップテーブルが冗長エントリーを含まないことを特徴とする請求項8記載の圧縮/伸長システム。
  12. 前記符号化データストリームのバイト群の可変長シフト操作を行って可変長符号語にするアンパック部をさらに含むことを特徴とする請求項8記載の圧縮/伸長システム。
  13. 確率状態に応じた確率クラスを生成する確率クラス部、
    優勢シンボル(以下、MPS)が発生して確率状態の更新が必要なときの次の確率推定状態を生成するMPS確率状態部、
    劣勢シンボル(以下、LPS)が発生して確率状態の更新が必要なときの次の確率推定状態を生成するLPS確率状態部、
    MPSを切り替える必要があるときに切り替え指示を発生する切り替え部、
    及び
    確率状態が第1の所定値以下のときに更新指示を発生する更新部をさらに含むことを特徴とする請求項8記載の圧縮/伸長システム。
  14. 前記MPS確率状態部が、現在の確率推定状態を、現在の確率状態の値に基づいたある値域内の整数だけインクリメント又はデクリメントすることによって次の確率推定状態を生成することを特徴とする請求項13記載の圧縮/伸長システム。
  15. 前記切り替え指示が信号からなることを特徴とする請求項13記載の圧縮/伸長システム。
  16. 確率状態が第1の所定値以下であるか第2の所定値と等しいときに 前記切り替え指示がアサートされることを特徴とする請求項13記載の圧縮/伸長システム。
  17. 前記更新指示が信号からなることを特徴とする請求項13記載の圧縮/伸長システム。
  18. 前記ビット生成部が、符号化されていないビットと符号化されたビットとの間の変換を行うためのビット生成ロジックからなることを特徴とする請求項8記載の圧縮/伸長システム。
  19. 前記ビット生成ロジックが、前記符号語を与える第1の出力と、前記符号語のサイズを指示する第2の出力を有することを特徴とする請求項18記載の圧縮/伸長システム。
  20. 前記ビット生成ロジックが、前記区間を定義する次のスタート値及び次のストップ値を発生することを特徴とする請求項18記載の圧縮/伸長システム。
  21. 前記ビット生成ロジックが発生した前記スタート値及び前記ストップ値を受け取るように接続されたスタートレジスタ及びストップレジスタをさらに含み、前記スタートレジスタ及び前記ストップレジスタが前記ビット生成ロジックの入力にも接続されることを特徴とする請求項20記載の圧縮/伸長システム。
  22. 前記ビット生成部が、符号化の終わりでフラッシングのための符号語を生成することを特徴とする請求項8記載の圧縮/伸長システム。
  23. 前記ビット生成部が、そのフラッシングのためのフラッシュ指示を通知されると、所定の符号語を出力するための符号語を生成するフラッシュロジックをさらに含むことを特徴とする請求項8記載の圧縮/伸長システム。
  24. 前記フラッシュ指示がフラッシュ信号からなることを特徴とする請求項23記載の圧縮/伸長システム。
  25. 符号化データを表す符号語及びフラッシングのための所定の符号語を受け取るように接続されたマルチプレクサをさらに含み、該マルチプレクサがその入力の一つを前記ビット生成部の出力として選択するため前記フラッシュ指示を受け取るように接続されることを特徴とする請求項23記載の圧縮/伸長システム。
  26. 確率推定値及びFSM状態に応じて、第1の分割値と、MPSが発生し確率推定状態の更新が必要な場合の次の確率推定状態と、LPSが発生し確率推定状態の更新が必要な場合の次の確率推定状態とを生成する状態展開部、
    前記第1の分割値と入力コードストリームを比較して第2の分割値を出力するコンパレータ、
    前記コンパレータ及び前記状態展開部と接続され、likely指示を発生するlikelyロジック、
    前記次の確率推定状態及び前記likely指示を受け取るように接続され、前記likely指示に基づいて前記次の確率推定状態の一方を出力するマルチプレクサ、及び
    前記第1の分割値、前記likely指示及び区間指示に応じて、符号語を生成する符号語生成部をさらに含むことを特徴とする請求項8記載の圧縮/伸長システム。
  27. 前記区間指示が、前記区間の始まりと終わりをそれぞれ示すスタート値とストップ値からなることを特徴とする請求項26記載の圧縮/伸長システム。
  28. 前記状態展開部が、
    確率推定値に応じたマスク値を発生する第1の部分、
    前記FSM状態に応じた値を発生する第2の部分、
    前記第1の部分の出力と前記第2の部分の出力の論理積演算を行うように接続されたゲートロジック、
    前記ゲートロジックの出力を受け取り、該出力に応じた選択信号を発生するように接続された第3の部分、
    前記選択信号及び前記FSM状態に応じて、MPSが発生して更新が必要な場合のための次の確率推定状態を生成する次状態MPS部、
    前記選択信号及び前記FSM状態に応じて、LPSが発生して更新が必要な場合のため の次の確率推定状態を生成する次状態LPS部、
    前記選択信号及び前記FSM状態に応じて、どちらの部分区間がMPSの発生に関連付けられるかの指示を発生する第4の部分、及び
    前記選択信号及び前記FSM状態に応じて前記第2の分割値を生成する第5の部分からなることを特徴とする請求項26記載の圧縮/伸長システム。
JP37185298A 1998-01-05 1998-12-28 符号化方法及び圧縮/伸長システム Expired - Fee Related JP3748003B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/003076 1998-01-05
US09/003,076 US6094151A (en) 1998-01-05 1998-01-05 Apparatus and method for finite state machine coding of information selecting most probable state subintervals

Publications (2)

Publication Number Publication Date
JPH11266162A JPH11266162A (ja) 1999-09-28
JP3748003B2 true JP3748003B2 (ja) 2006-02-22

Family

ID=21704006

Family Applications (1)

Application Number Title Priority Date Filing Date
JP37185298A Expired - Fee Related JP3748003B2 (ja) 1998-01-05 1998-12-28 符号化方法及び圧縮/伸長システム

Country Status (4)

Country Link
US (1) US6094151A (ja)
JP (1) JP3748003B2 (ja)
DE (1) DE19900150B4 (ja)
GB (1) GB2333000B (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0966703B1 (de) * 1997-03-11 2002-10-02 Siemens Aktiengesellschaft Verfahren zur rechnergestützten fehleranalyse von sensoren und/oder aktoren in einem technischen system
JP2001136524A (ja) * 1999-11-02 2001-05-18 Ricoh Co Ltd 圧縮伸長装置
JP3814456B2 (ja) * 2000-02-07 2006-08-30 キヤノン株式会社 画像処理装置及びその方法
US6424444B1 (en) * 2001-01-29 2002-07-23 Stratalight Communications, Inc. Transmission and reception of duobinary multilevel pulse-amplitude-modulated optical signals using finite-state machine-based encoder
US7783997B1 (en) 2004-07-30 2010-08-24 Synopsys, Inc. Large scale finite state machines
US7684627B2 (en) * 2004-09-29 2010-03-23 Intel Corporation Techniques for image decompression
JP4618676B2 (ja) 2005-04-28 2011-01-26 株式会社リコー 構造化文書符号の転送方法、画像処理システム、サーバ装置、プログラム及び情報記録媒体
US8421655B2 (en) * 2010-04-23 2013-04-16 Certicom Corp. Apparatus for parallel entropy encoding and decoding
US8416104B2 (en) 2010-04-23 2013-04-09 Certicom Corp. Method and apparatus for entropy decoding
CN103918260A (zh) * 2011-11-15 2014-07-09 英特尔公司 每时钟cabac编码采用2个bin的视频编码器
CA2882032C (en) 2012-08-15 2021-07-27 Sunfish Studio Llc Modal interval calculations based on decoration configurations
US11061993B2 (en) 2012-08-15 2021-07-13 Modal Technology Corporation Apparatus for performing modal interval calculations based on decoration configuration
EP2858323A1 (en) * 2013-10-01 2015-04-08 Enyx SA A method and a device for decoding data streams in reconfigurable platforms
CN111884659B (zh) * 2020-07-28 2021-09-10 广州智品网络科技有限公司 一种fst数据的压缩方法和装置
CN112669396B (zh) * 2020-12-18 2023-09-12 深圳智慧林网络科技有限公司 图像无损压缩方法和装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4933883A (en) * 1985-12-04 1990-06-12 International Business Machines Corporation Probability adaptation for arithmetic coders
US4792954A (en) * 1986-10-31 1988-12-20 International Business Machines Corporation Concurrent detection of errors in arithmetic data compression coding
US5475388A (en) * 1992-08-17 1995-12-12 Ricoh Corporation Method and apparatus for using finite state machines to perform channel modulation and error correction and entropy coding
US5272478A (en) * 1992-08-17 1993-12-21 Ricoh Corporation Method and apparatus for entropy coding
US5583500A (en) * 1993-02-10 1996-12-10 Ricoh Corporation Method and apparatus for parallel encoding and decoding of data
US5381145A (en) * 1993-02-10 1995-01-10 Ricoh Corporation Method and apparatus for parallel decoding and encoding of data
US5717394A (en) * 1993-02-10 1998-02-10 Ricoh Company Ltd. Method and apparatus for encoding and decoding data
JP2836467B2 (ja) * 1993-12-16 1998-12-14 日本電気株式会社 2値シンボルの符号化・復号化回路
US5710562A (en) * 1995-08-31 1998-01-20 Ricoh Company Ltd. Method and apparatus for compressing arbitrary data
EP0797348A3 (en) * 1996-03-22 1999-01-20 Hewlett-Packard Company A one dimensional context model for entropy encoding digital halftone images with arithmetic coding

Also Published As

Publication number Publication date
GB2333000A8 (en) 1999-12-30
HK1020303A1 (en) 2000-04-07
GB9824435D0 (en) 1999-01-06
GB2333000B (en) 2000-04-19
GB2333000A (en) 1999-07-07
DE19900150A1 (de) 1999-07-08
JPH11266162A (ja) 1999-09-28
US6094151A (en) 2000-07-25
DE19900150B4 (de) 2005-12-22

Similar Documents

Publication Publication Date Title
JP3748003B2 (ja) 符号化方法及び圧縮/伸長システム
JP3459030B2 (ja) 符号化システム
US7262722B1 (en) Hardware-based CABAC decoder with parallel binary arithmetic decoding
US5675332A (en) Plural-step chunk-at-a-time decoder for variable-length codes of Huffman type
CN108292222B (zh) 用于数据解压缩的硬件装置和方法
US6885319B2 (en) System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms
JP4139330B2 (ja) 改良された可変長デコーダ
US5717394A (en) Method and apparatus for encoding and decoding data
US5801650A (en) Decoding apparatus and method
KR100748485B1 (ko) 가변 길이 코드워드 디코더 및 가변 길이 코드워드 디코딩 방법
US7804903B2 (en) Hardware-based CABAC decoder
US7343542B2 (en) Methods and apparatuses for variable length encoding
US6043765A (en) Method and apparatus for performing a parallel speculative Huffman decoding using both partial and full decoders
US5751860A (en) Method for compressing and decompressing digital image data
CN105451027A (zh) 数据压缩
US6546053B1 (en) System and method for decoding signal and method of generating lookup table for using in signal decoding process
US7286066B1 (en) Acceleration of bitstream decoding
Nikara et al. Multiple-symbol parallel decoding for variable length codes
JP2013141165A (ja) 画像処理装置および画像処理方法、ならびに、画像形成装置
US6459391B1 (en) High speed variable length decoding processor
JPH0258813B2 (ja)
CN103248896A (zh) Mq算术编码器
US6781528B1 (en) Vector handling capable processor and run length encoding
US7075462B2 (en) Speeding up variable length code decoding on general purpose processors
US6707398B1 (en) Methods and apparatuses for packing bitstreams

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050111

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050314

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050830

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051031

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20051122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20051122

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081209

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091209

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101209

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101209

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111209

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111209

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121209

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131209

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees