(57)【要約】【課題】指数ゴロム符号を復号する復号装置を提供する。【解決手段】入力される指数ゴロム符号のセパレータ「１」を検出する第１の検出部１１、セパレータの検出までのプリフィックスの０の数をカウントアップし、セパレータの検出後のサフィックスの符号の数を、カウントアップ後のカウント値からカウントダウンするカウンタ１２、サフィックスの全符号のカウントダウンの終了を検出する第２の検出部１４、カウントアップ後のプリフィックスの０の数（＝ｎ）を用いて２ｎ−１を計算する計算部１８、セパレータの検出からカウントダウンの終了の検出まで、サフィックスの符号列を読み込む読み込み部１６、計算結果と読み込まれた符号列とを加算した復号結果を出力する加算器２０を備え、カウンタ１２は、カウントダウンの終了の検出後、次のプリフィックスの０の数のカウントアップを開始する。【選択図】図１
2010200281.tif 000002
【特許請求の範囲】
【請求項１】
０個以上の０の連続であるプリフィックスと、当該プリフィックスに続く１であるセパレータと、当該セパレータに続く、前記プリフィックスの０と同数の０または１の符号列であるサフィックスとを有する指数ゴロム符号が順次入力され、当該指数ゴロム符号を復号する復号装置であって、
指数ゴロム符号のセパレータを検出する第１の検出部と、
前記第１の検出部がセパレータを検出するまでのプリフィックスにおける０の個数をカウントアップし、前記第１の検出部がセパレータを検出した後のサフィックスにおける０及び１の符号の個数を、カウントアップした結果のカウント値からカウントダウンするカウンタと、
前記カウンタがサフィックスにおけるすべての符号のカウントダウンを終了したことを検出する第２の検出部と、
前記カウンタがカウントアップしたプリフィックスにおける０の個数（この個数をｎとする）を用いて、２ｎ−１を計算する計算部と、
前記第１の検出部がセパレータを検出してから前記第２の検出部がカウントダウンの終了を検出するまで、指数ゴロム符号のサフィックスの符号列を読み込む読み込み部と、
前記計算部の計算結果と、前記読み込み部が読み込んだサフィックスの符号列とを加算し、その加算結果である指数ゴロム符号の復号結果を出力する加算器と、を備え、
前記カウンタは、前記第２の検出部がカウントダウンの終了を検出すると、次の指数ゴロム符号のプリフィックスにおける０の個数のカウントアップを開始する、復号装置。
【請求項２】
前記第１の検出部がセパレータを検出するまで、前記カウンタがカウントアップするごとにカウント値をホールドするカウンタホールドと、
前記第２の検出部がカウントダウンの終了を検出したことに応じて、前記計算部の計算値である計算結果をホールドする計算値ホールドと、
前記第２の検出部がカウントダウンの終了を検出したことに応じて、前記読み込み部が読み込んだ読み込み値であるサフィックスの符号列をホールドする読み込み値ホールドと、
前記第２の検出部によるカウントダウンの終了の検出時点を所定の期間だけ遅延させた時点である前記読み込み値ホールドによる符号列のホールド後の時点に前記読み込み部の読み込み値をリセットする遅延部と、をさらに備え、
前記計算部は、前記カウンタホールドがホールドしたカウント値（ｎ）を用いて前記計算を行い、
前記加算器は、前記計算値ホールドがホールドした計算結果と、前記読み込み値ホールドがホールドしたサフィックスの符号列とを加算する、請求項１記載の復号装置。
【請求項３】
コンピュータを、
０個以上の０の連続であるプリフィックスと、当該プリフィックスに続く１であるセパレータと、当該セパレータに続く、前記プリフィックスの０と同数の０または１の符号列であるサフィックスとを有する指数ゴロム符号を順次復号する復号装置として機能させるためのプログラムであって、
指数ゴロム符号のセパレータを検出する第１の検出部、
前記第１の検出部がセパレータを検出するまでのプリフィックスにおける０の個数をカウントアップし、前記第１の検出部がセパレータを検出した後のサフィックスにおける０及び１の符号の個数を、カウントアップした結果のカウント値からカウントダウンするカウンタ、
前記カウンタがサフィックスにおけるすべての符号のカウントダウンを終了したことを検出する第２の検出部、
前記カウンタがカウントアップしたプリフィックスにおける０の個数（この個数をｎとする）を用いて、２ｎ−１を計算する計算部、
前記第１の検出部がセパレータを検出してから前記第２の検出部がカウントダウンの終了を検出するまで、指数ゴロム符号のサフィックスの符号列を読み込む読み込み部、
前記計算部の計算結果と、前記読み込み部が読み込んだサフィックスの符号列とを加算し、その加算結果である指数ゴロム符号の復号結果を出力する加算器、として機能させ、
前記カウンタは、前記第２の検出部がカウントダウンの終了を検出すると、次の指数ゴロム符号のプリフィックスにおける０の個数のカウントアップを開始する、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、指数ゴロム符号を復号する復号装置等に関する。
【背景技術】
【０００２】
画像圧縮技術の一つであるＨ．２６４／ＡＶＣでは、基本的なシンタックス要素の符号化に指数ゴロム符号を用いている。その指数ゴロム符号は、次に示すように、プリフィックス（Ｐｒｅｆｉｘ）、セパレータ（Ｓｅｐａｒａｔｏｒ）、サフィックス（Ｓｕｆｆｉｘ）を有し、プリフィックスとサフィックスとのビット数は等しくなっている。また、プリフィックスは、０個以上の０を有する。なお、プリフィックスが接頭辞と呼ばれることもあり、セパレータが分離記号と呼ばれることもあり、サフィックスが接尾辞と呼ばれることもある。
【０００３】
指数ゴロム符号                      符号番号
１                                ０
０    １    ０                          １
０    １    １                          ２
０    ０    １    ０    ０                    ３
０    ０    １    ０    １                    ４
０    ０    １    １    ０                    ５
０    ０    １    １    １                    ６
０    ０    ０    １    ０    ０    ０              ７
０    ０    ０    １    ０    ０    １              ８
：    ：    ：    ：    ：    ：    ：              ：
：    ：    ：    ：    ：    ：    ：              ：
プリフィックス    Ｓ    サフィックス
なお、「Ｓ」はセパレータを示している。
【０００４】
指数ゴロム符号を復号した符号番号は、プリフィックスにおける０の個数を「ｎ」として、サフィックスの値を「ｍ」とすると次のようになる。なお、プリフィックス及びサフィックスに符号が存在しない場合には、サフィックスの値は０であるとする（すなわち、ｍ＝０）。
符号番号＝２ｎ−１＋ｍ
【０００５】
このような指数ゴロム符号の復号を行う種々の方法が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−２５４２２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来の特許文献１の技術では、指数ゴロム符号のビットストリームをバッファ回路に読み込んでプリフィックスの０の個数をカウントするなどの処理を行っていたため、そのバッファ回路が必須であり、また、複雑な制御を行うため、多くの回路が必要であり、それだけ回路規模が大きくなっていた。また、指数ゴロム符号の一部をバッファ回路に読み込んでから処理を行うため、指数ゴロム符号のビットストリームについて処理を行うためには、そのバッファよりも前段に他の記憶手段を設けるか、あるいは、バッファ回路に読み込まれた符号列を、指数ゴロム符号のビットストリームのビットレートよりもよほど高速なレートで処理する必要がある。前者の場合には、さらに回路規模が増大することとなり、後者の場合には、それだけ消費電力が大きくなる（消費電力はクロック周波数に比例するため）。
【０００８】
本発明は、上記課題を解決するためになされたものであり、使用するメモリ容量を削減することができると共に、リアルタイム処理を行うことができる指数ゴロム符号の復号装置等を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明による復号装置は、０個以上の０の連続であるプリフィックスと、当該プリフィックスに続く１であるセパレータと、当該セパレータに続く、前記プリフィックスの０と同数の０または１の符号列であるサフィックスとを有する指数ゴロム符号が順次入力され、当該指数ゴロム符号を復号する復号装置であって、指数ゴロム符号のセパレータを検出する第１の検出部と、前記第１の検出部がセパレータを検出するまでのプリフィックスにおける０の個数をカウントアップし、前記第１の検出部がセパレータを検出した後のサフィックスにおける０及び１の符号の個数を、カウントアップした結果のカウント値からカウントダウンするカウンタと、前記カウンタがサフィックスにおけるすべての符号のカウントダウンを終了したことを検出する第２の検出部と、前記カウンタがカウントアップしたプリフィックスにおける０の個数（この個数をｎとする）を用いて、２ｎ−１を計算する計算部と、前記第１の検出部がセパレータを検出してから前記第２の検出部がカウントダウンの終了を検出するまで、指数ゴロム符号のサフィックスの符号列を読み込む読み込み部と、前記計算部の計算結果と、前記読み込み部が読み込んだサフィックスの符号列とを加算し、その加算結果である指数ゴロム符号の復号結果を出力する加算器と、を備え、前記カウンタは、前記第２の検出部がカウントダウンの終了を検出すると、次の指数ゴロム符号のプリフィックスにおける０の個数のカウントアップを開始する、ものである。
【００１０】
このような構成により、特許文献１に記載されているような指数ゴロム符号のビットストリームの一部を記憶させるバッファ回路が不要となる。したがって、使用するメモリ容量を削減することができる。その結果、この復号装置を論理回路のハードウェアとして構成した場合に、回路規模を縮小させることができる。また、このような構成によって、リアルタイム処理も実現することができる。
【００１１】
また、本発明による復号装置において、前記第１の検出部がセパレータを検出するまで、前記カウンタがカウントアップするごとにカウント値をホールドするカウンタホールドと、前記第２の検出部がカウントダウンの終了を検出したことに応じて、前記計算部の計算値である計算結果をホールドする計算値ホールドと、前記第２の検出部がカウントダウンの終了を検出したことに応じて、前記読み込み部が読み込んだ読み込み値であるサフィックスの符号列をホールドする読み込み値ホールドと、前記第２の検出部によるカウントダウンの終了の検出時点を所定の期間だけ遅延させた時点である前記読み込み値ホールドによる符号列のホールド後の時点に前記読み込み部の読み込み値をリセットする遅延部と、をさらに備え、前記計算部は、前記カウンタホールドがホールドしたカウント値（ｎ）を用いて前記計算を行い、前記加算器は、前記計算値ホールドがホールドした計算結果と、前記読み込み値ホールドがホールドしたサフィックスの符号列とを加算してもよい。
【００１２】
このような構成により、カウント値や読み込み値等を適切にホールドすることができ、そのホールドした値を用いて復号処理を行うことができる。
【発明の効果】
【００１３】
本発明による復号装置等によれば、指数ゴロム符号を復号する際に、使用するメモリ容量を削減することができると共に、リアルタイム処理を行うことができるようになる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施の形態１による復号装置の構成を示すブロック図
【図２】同実施の形態による復号装置のさらに詳細な構成の一例を示す図
【図３】同実施の形態における信号の変化の一例を示すタイミングチャート
【発明を実施するための形態】
【００１５】
以下、本発明による復号装置について、実施の形態を用いて説明する。なお、以下の実施の形態において、同じ符号を付した構成要素は同一または相当するものであり、再度の説明を省略することがある。
【００１６】
（実施の形態１）
本発明の実施の形態１による復号装置について、図面を参照しながら説明する。本実施の形態による復号装置は、指数ゴロム符号の復号を行うものである。
【００１７】
図１は、本実施の形態による復号装置１の構成を示すブロック図である。本実施の形態による復号装置１は、第１の検出部１１と、カウンタ１２と、カウンタホールド１３と、第２の検出部１４と、遅延部１５と、読み込み部１６と、読み込み値ホールド１７と、計算部１８と、計算値ホールド１９と、加算器２０とを備える。
【００１８】
なお、この復号装置１には、指数ゴロム符号が順次入力され、その指数ゴロム符号が順次復号されるものとする。その指数ゴロム符号は、前述のように、０個以上の０の連続であるプリフィックスと、そのプリフィックスに続く１であるセパレータと、そのセパレータに続く、プリフィックスの０と同数の０または１の符号列であるサフィックスとを有するものである。本実施の形態では、指数ゴロム符号のビットストリームが復号装置１に入力される場合について説明を行うが、そうでなくてもよい。例えば、復号装置１は、記録媒体等において記憶されている指数ゴロム符号を順次、読み出しながら復号処理を行ってもよい。
【００１９】
第１の検出部１１は、指数ゴロム符号のセパレータを検出する。具体的には、指数ゴロム符号のビットストリーム（ＢＳ）において、プリフィックスの０が順次、入力されてきている際に、セパレータの「１」が入力されると、そのことを検出する。そして、第１の検出部１１は、セパレータを検出すると、その旨をカウンタ１２、カウンタホールド１３、第２の検出部１４、読み込み部１６に渡す。具体的には、第１の検出部１１は、セパレータを検出すると、カウンタ１２、及びカウンタホールド１３に出力しているｕｐ＿ｄｏｗｎ信号を「１」から「０」にする。なお、ｕｐ＿ｄｏｗｎ信号は、指数ゴロム符号のプリフィックスが入力されている際には「１」となり、サフィックスが入力されている際には「０」となる信号である。また、第１の検出部１１は、セパレータを検出すると、第２の検出部１４、及び読み込み部１６に出力しているｓｈｉｆｔ＿ｅｎａｂｌｅ信号を「０」から「１」にする。なお、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号は、指数ゴロム符号のプリフィックスが入力されている際には「０」となり、サフィックスが入力されている際には「１」となる信号である。このように、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号は、ｕｐ＿ｄｏｗｎ信号を反転させた信号である。また、第１の検出部１１は、後述する第２の検出部１４によって、サフィックスの入力の終了が検出された際に、ｕｐ＿ｄｏｗｎ信号を「０」から「１」にすると共に、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号を「１」から「０」にする。第２の検出部１４がサフィックスの入力の終了を検出した旨は、第２の検出部１４が出力するｒｓｔ＿ｓ信号が「１」から「０」になったことによって知ることができる。
【００２０】
カウンタ１２は、第１の検出部１１がセパレータを検出するまでのプリフィックスにおける０の個数をカウントアップし、第１の検出部１１がセパレータを検出した後のサフィックスにおける０及び１の符号の個数を、カウントアップした結果のカウント値からカウントダウンする。すなわち、プリフィックスの符号が入力されている場合に、第１の検出部１１がセパレータを検出するまで、カウンタ１２は、符号（＝０）が入力されるごとにカウント値をカウントアップする。また、サフィックスの符号が入力されている場合に、後述する第２の検出部１４がカウントダウンの終了を検出するまで、カウンタ１２は、符号（＝０または１）が入力されるごとにカウント値をカウントダウンする。また、カウンタ１２は、後述する第２の検出部１４がカウントダウンの終了を検出すると、次の指数ゴロム符号のプリフィックスにおける０の個数のカウントアップを開始する。このように、カウンタ１２は、指数ゴロム符号が入力されるごとに、プリフィックスでは０ごとにカウントアップを行い、サフィックスでは０及び１の符号ごとにカウントダウンを行う。したがって、このカウント値が所定の値となった場合に、サフィックスが終了したことを知ることができる。その検出を行うのが後述する第２の検出部１４である。具体的には、カウンタ１２は、ｕｐ＿ｄｏｗｎ信号が「１」の場合、すなわち、プリフィックスの符号が入力されている場合には、クロック（ＣＬＫ）ごとにカウント値を「１」だけインクリメントする。また、カウンタ１２は、ｕｐ＿ｄｏｗｎ信号が「０」の場合、すなわち、サフィックスの符号が入力されている場合には、クロックごとにカウント値を「１」だけデクリメントする。また、カウンタ１２は、後述する第２の検出部１４がサフィックスの入力の終了を検出した場合に、カウント値を「０」にリセットする。第２の検出部１４がサフィックスの入力の終了を検出した旨は、第２の検出部１４が出力するｒｓｔ＿ｓ信号が「１」から「０」になったことによって知ることができる。なお、指数ゴロム符号のビットストリームのビットレートと、クロックの周波数とが同期していることは当然である。
【００２１】
カウンタホールド１３は、カウンタ１２によってカウントアップされたプリフィックスの０の個数をホールドする。その方法は問わないが、本実施の形態では、ｕｐ＿ｄｏｗｎ信号が「１」の場合には、クロックごとにカウンタ１２のカウント値をホールドし、ｕｐ＿ｄｏｗｎ信号が「０」の場合には、新たなホールドを行わないことによって、プリフィックスの０の個数がカウンタホールド１３によってホールドされる場合について説明する。すなわち、本実施の形態によるカウンタホールド１３は、第１の検出部１１がセパレータを検出するまで、カウンタ１２がカウントアップするごとにカウント値をホールドするものである。
【００２２】
第２の検出部１４は、カウンタ１２がサフィックスにおけるすべての符号のカウントダウンを終了したことを検出する。具体的には、第２の検出部１４は、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が「１」の場合、すなわち、サフィックスの符号が入力されている場合に、カウンタ１２のカウント値があらかじめ設定されている値になった時にカウントダウンの終了を検出する。そして、第２の検出部１４は、カウントダウンの終了を検出すると、第１の検出部１１、カウンタ１２、遅延部１５、読み込み値ホールド１７、計算値ホールド１９に出力しているｒｓｔ＿ｓ信号を「１」から「０」にする。なお、そのｒｓｔ＿ｓ信号は、「１」から「０」に変更された後に、再度、「１」に戻るものとする。また、第２の検出部１４は、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が「０」の場合、すなわち、プリフィックスの符号が入力されている場合には、その検出の処理を行わないものとする。
【００２３】
遅延部１５は、第２の検出部１４によるカウントダウンの終了の検出時点を所定の期間だけ遅延させた時点に、後述する読み込み部１６の読み込み値をリセットする。そのカウントダウンの終了の検出時点を所定の期間だけ遅延させた時点とは、後述する読み込み値ホールド１７による符号列のホールド後の時点のことである。これは、読み込み部１６が読み込んだ値を、読み込み値ホールド１７がホールドするまで消去しないようにするためである。例えば、遅延部１５は、第２の検出部１４がカウントダウンの終了を検出すると、その次のクロックのタイミングで、読み込み部１６にカウントダウンの終了を伝える。すなわち、遅延部１５は、約１クロックの周期だけ遅延させて、読み込み部１６にカウントダウンの終了を伝える。より具体的には、遅延部１５は、第２の検出部１４が出力しているｒｓｔ＿ｓ信号が「１」から「０」になった場合に、その次のクロックのタイミングで読み込み部１６に出力しているｒｓｔ＿ｄ信号を「１」から「０」にする。なお、そのｒｓｔ＿ｄ信号は、その次のクロックのタイミングで「０」から「１」に戻るものとする。また、カウントダウンの終了が読み込み部１６に伝えられることにより、読み込み部１６は、読み込み値のリセットを行うものとする。
【００２４】
読み込み部１６は、第１の検出部１１がセパレータを検出してから第２の検出部１４がカウントダウンの終了を検出するまで、指数ゴロム符号のサフィックスの符号列を読み込む。すなわち、読み込み部１６は、サフィックスの符号が入力されている場合に、第２の検出部１４がカウントダウンの終了を検出するまで、新たなサフィックスの符号が入力されるごとに、その符号を読み込んでいく。この読み込み部１６は、例えば、シフトレジスタによって構成されてもよく、指数ゴロム符号のサフィックスの符号列を適宜、メモリに格納する制御手段によって構成されてもよい。本実施の形態では、前者の場合について説明する。具体的には、読み込み部１６は、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が「１」である場合に、クロックごとに入力される指数ゴロム符号を順次、読み込んでいく。その結果、指数ゴロム符号のサフィックスの符号列が読み込み部１６によって読み込まれることになる。一方、遅延部１５が出力しているｒｓｔ＿ｄ信号が「１」から「０」になると、読み込み部１６は、読み込んでいた符号列をリセットして「０」に戻す。そして、次の指数ゴロム符号のサフィックスの符号列の入力に備えることになる。
【００２５】
読み込み値ホールド１７は、読み込み部１６が読み込んだ指数ゴロム符号のサフィックスの符号列をホールドする。本実施の形態では、読み込み値ホールド１７は、第２の検出部１４がカウントダウンの終了を検出したことに応じて、読み込み部１６の出力をホールドするものとする。「カウントダウンの終了を検出したことに応じて」とは、カウントダウンの終了の検出の直後であってもよい。具体的には、読み込み値ホールド１７は、ｒｓｔ＿ｓ信号が「０」から「１」に変化する際に、読み込み部１６の出力である読み込み値（＝サフィックスの符号列）をホールドする。
【００２６】
計算部１８は、カウンタ１２がカウントアップしたプリフィックスにおける０の個数（この個数をｎとする）を用いて、２ｎ−１を計算する。具体的には、カウンタホールド１３がホールドしたプリフィックスの０の個数を用いて、計算部１８は、その計算を行う。また、この計算の方法は問わない。例えば、ｎの値と、２ｎ−１の値との関係は次のようになるため、ｎの値を入力として、２ｎ−１の値を出力とする論理回路を、ハードウェア記述言語を用いて構成してもよい。その場合には、減算器を用いて計算するよりも、より高速に算出することができ、回路規模を削減することができる。
ｎ                ２ｎ−１
００              ０００
０１              ００１
１０              ０１１
１１              １１１
【００２７】
なお、計算部１８による２ｎ−１の計算の方法は問わない。例えば、ｎの値と、２ｎ−１の値とを対応付けるテーブル等の情報を用いて２ｎ−１の値を算出してもよく、左シフトレジスタや減算器を用いて２ｎ−１の値を算出してもよい。
【００２８】
計算値ホールド１９は、計算部１８が計算した２ｎ−１の値である計算値をホールドする。本実施の形態では、計算値ホールド１９は、読み込み値ホールド１７と同様に、第２の検出部１４がカウントダウンの終了を検出したことに応じて、計算部１８の出力をホールドするものとする。「カウントダウンの終了を検出したことに応じて」とは、カウントダウンの終了の検出の直後であってもよい。具体的には、計算値ホールド１９は、ｒｓｔ＿ｓ信号が「０」から「１」に変化する際に、計算部１８の出力である２ｎ−１の値をホールドする。
【００２９】
加算器２０は、計算部１８の計算結果と、読み込み部１６が読み込んだサフィックスの符号列とを加算し、その加算結果である指数ゴロム符号の復号結果を出力する。加算器２０は、一の指数ゴロム符号について、そのプリフィックスの０の個数を用いた計算部１８の計算結果と、読み込み部１６が読み込んだ、そのサフィックスの符号列とを加算する。具体的には、加算器２０は、読み込み値ホールド１７がホールドしたサフィックスの符号列と、計算値ホールド１９がホールドした２ｎ−１の計算結果とを加算して出力する。なお、加算器２０の出力は、読み込み値ホールド１７がサフィックスの符号列をホールドし、計算値ホールド１９が２ｎ−１の計算結果をホールドした後に、サンプリングされて取り込まれてもよい。具体的には、ｒｓｔ＿ｓ信号が「０」から「１」に変化して符号列等のホールドが行われた後に、加算器２０の出力がサンプリングされて取り込まれてもよい。
【００３０】
なお、このようにして、第１の検出部１１によって指数ゴロム符号のプリフィックスからサフィックスへの変化が検出され、第２の検出部１４によって一の指数ゴロム符号のサフィックスから、その次の指数ゴロム符号のプリフィックスへの変化が検出され、カウンタ１２によってプリフィックスの０の個数をカウントし、読み込み部１６によってサフィックスの符号列を読み込むことによって、バッファ回路を設けることなく、指数ゴロム符号を復号することができる。また、シンプルな処理によって、指数ゴロム符号の復号を行うことができる。
【００３１】
また、本実施の形態では、各要素のリセットのためにｒｓｔ信号や、ｒｓｔ＿ｓ信号、ｒｓｔ＿ｄ信号を用いているが、これらの信号は「１」から「０」になるタイミングで各要素をリセットするものである。
【００３２】
次に、本実施の形態による復号装置１のより詳細な構成の一例について説明する。図２は、本実施の形態による復号装置１のより詳細な構成の一例を示す論理回路図である。
【００３３】
図２において、第１の検出部１１は、遅延フリップフロップ１１ａ，１１ｂと、論理素子１１ｃ，１１ｄとを備える。遅延フリップフロップ１１ａは、クロック（ＣＬＫ）に同期してＢＳの値を取り込み、その取り込んだ値を論理素子１１ｃに出力する。また、遅延フリップフロップ１１ａはｒｓｔ＿ｓ信号によってリセットされる。遅延フリップフロップ１１ｂは、論理素子１１ｄの出力に同期して論理素子１１ｃの出力を取り込み、その取り込んだ値であるｓｈｉｆｔ＿ｅｎａｂｌｅ信号と、そのｓｈｉｆｔ＿ｅｎａｂｌｅ信号が反転された信号であるｕｐ＿ｄｏｗｎ信号とを出力する。論理素子１１ｃは、遅延フリップフロップ１１ａの出力を反転させるＮＯＴ素子と、そのＮＯＴ素子の出力とＢＳとを入力とするＡＮＤ素子とを有する。論理素子１１ｄは、クロック（ＣＬＫ）と、遅延フリップフロップ１１ｂの出力であるｕｐ＿ｄｏｗｎ信号とを入力とするＡＮＤ素子である。
【００３４】
このような構成により、ＢＳが０から１に変化したタイミングで、論理素子１１ｃの出力は「１」となり、それ以外の場合には、論理素子１１ｃの出力は「０」となる。そして、その論理素子１１ｃの出力が遅延フリップフロップ１１ｂに取り込まれ、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号として出力される。ただし、遅延フリップフロップ１１ｂのクロックの入力の前段にＡＮＤ素子である論理素子１１ｄが存在することにより、一度、ｕｐ＿ｄｏｗｎ信号が「１」から「０」になると、新たなクロックが入力されないことになり、ｒｓｔ＿ｓ信号によってリセットされるまで、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号＝１，ｕｐ＿ｄｏｗｎ信号＝０が保持されることになる。ｒｓｔ＿ｓ信号によってリセットされると、遅延フリップフロップ１１ａの論理素子１１ｃへの出力は「０」になり、遅延フリップフロップ１１ｂのｓｈｉｆｔ＿ｅｎａｂｌｅ信号の出力は「０」になり、ｕｐ＿ｄｏｗｎ信号の出力は「１」になる。したがって、第１の検出部１１において、プリフィックスでＢＳが０から１に変化したタイミングで、論理素子１１ｃの出力「１」が遅延フリップフロップ１１ｂに取り込まれ、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が「１」になり、ｕｐ＿ｄｏｗｎ信号が「０」になる。その後は、ｒｓｔ＿ｓ信号によってリセットがかけられるまで、そのｓｈｉｆｔ＿ｅｎａｂｌｅ信号等の値は保持されることになる。
【００３５】
カウンタ１２は、ｕｐ＿ｄｏｗｎ信号が「１」の場合にはクロック（ＣＬＫ）に同期してカウントアップを行い、ｕｐ＿ｄｏｗｎ信号が「０」の場合にはクロック（ＣＬＫ）に同期してカウントダウンを行う。なお、カウントダウンは、カウントアップを行った後のカウント値から行われる。また、ｒｓｔ＿ｓ信号によってリセットされると、カウンタ１２のカウント値が０になる。また、図２において、カウンタ１２の出力は図中上側が上位ビットであり、図中下側が下位ビットである。
【００３６】
選択器２１は、初期リセットのためのｒｓｔ信号と、第２の検出部１４の出力とを入力として、そのうちの一方を選択して出力する。この選択器２１の出力がｒｓｔ＿ｓ信号である。なお、選択器２１は、初期リセットのためにｒｓｔ信号が「０」になった場合にはｒｓｔ信号を選択し、その後、ｒｓｔ信号が「１」に戻った場合には、第２の検出部１４の出力を選択するものとする。
【００３７】
第２の検出部１４は、カウンタ１２の最下位ビット以外のビットをそれぞれ反転させる複数のＮＯＴ素子１４ａ〜１４ｅと、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号とカウンタ１２の最下位ビットとＮＯＴ素子１４ａ〜１４ｅのそれぞれの出力とを入力とするＮＡＮＤ素子１４ｆとを備える。ＮＡＮＤ素子１４ｆには、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が入力されているため、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が「０」の期間、すなわち、プリフィックスの期間は、第２の検出部１４の出力は「１」に保たれる。一方、カウンタ１２によるカウントダウンが行われる場合、すなわち、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が「１」の場合に、カウンタ１２のカウント値が「０００００１」となると、ＮＡＮＤ素子１４ｆの出力は「０」となる。なお、初期リセットのとき以外は選択器２１は第２の検出部１４の出力を選択するため、ＮＡＮＤ素子１４ｆの出力が「０」になると、ｒｓｔ＿ｓ信号は「０」となる。そして、ｒｓｔ＿ｓ信号が「０」になると、第１の検出部１１の遅延フリップフロップ１１ｂがリセットされ、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が「０」になる。その結果、ＮＡＮＤ素子１４ｆの出力はすぐに「１」に戻る。このように、図２の具体例では、第２の検出部１４は、カウント値が「０００００１」になった場合に、カウントダウンの終了を検出していることになる。
【００３８】
カウンタホールド１３は、ｕｐ＿ｄｏｗｎ信号が「１」の場合、すなわち、カウンタ１２がカウントアップを行う場合には、クロック（ＣＬＫ）に同期してカウンタ１２のカウント値をホールドする。一方、ｕｐ＿ｄｏｗｎ信号が「０」の場合には、カウンタホールド１３は、カウント値のホールドを行わない。図２では、カウンタホールド１３は、第２の検出部１４の複数のＮＯＴ素子１４ａ〜１４ｅによって反転されたカウンタ１２の出力が再度、複数のＮＯＴ素子２２〜２６によって反転されたものを入力とする場合について示しているが、カウンタホールド１３は、カウンタ１２の出力を直接、入力としてもよい。また、カウンタホールド１３は、初期セットの際にのみｒｓｔ信号によってリセットされる。
【００３９】
遅延部１５は、ＮＡＮＤ素子１５ａ，１５ｂと、ＮＯＴ素子１５ｃと、遅延フリップフロップ１５ｄとを備える。ＮＡＮＤ素子１５ａの一方の入力はｒｓｔ＿ｓ信号であり、他方の入力はＮＡＮＤ素子１５ｂの出力である。また、ＮＡＮＤ素子１５ｂの一方の入力はＮＡＮＤ素子１５ａの出力であり、他方の入力は遅延フリップフロップ１５ｄの出力、すなわち、ｒｓｔ＿ｄ信号である。ＮＯＴ素子１５ｃは、ＮＡＮＤ素子１５ａの出力を反転させて遅延フリップフロップ１５ｄに入力する。遅延フリップフロップ１５ｄは、初期セットの際にのみｒｓｔ信号によってリセットされるものであり、クロック（ＣＬＫ）に同期してＮＯＴ素子１５ｃの出力を取り込み、ｒｓｔ＿ｄ信号を出力する。
【００４０】
その図２の論理回路の構成から分かるように、遅延部１５は、初期リセットがかけられてｒｓｔ＿ｓ信号が「０」となった際には、ｒｓｔ＿ｄ信号が「０」となる。その後に初期リセットが戻されてｒｓｔ＿ｓ信号が「１」になると、次のクロックのタイミングでｒｓｔ＿ｄ信号は「１」になる。その後は、ｒｓｔ＿ｓ信号＝０になるまで、ｒｓｔ＿ｄ信号が「１」に保持される。また、第２の検出部１４がカウントダウンの終了を検出してｒｓｔ＿ｓ信号が「０」になり、その後にｒｓｔ＿ｓ信号が「１」に戻ってクロックがかかったタイミングで、ｒｓｔ＿ｄ信号は「０」になる。また、次のクロックでｒｓｔ＿ｄ信号は「１」に戻る。その後は、ｒｓｔ＿ｓ信号＝０になるまで、ｒｓｔ＿ｄ信号が「１」に保持される。このようにして、遅延部１５は、ｒｓｔ＿ｓ信号を約１クロックの周期だけ遅延させたｒｓｔ＿ｄ信号を出力することができる。
【００４１】
読み込み部１６は、前述のように、シフトレジスタである。ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が「１」の場合には、クロック（ＣＬＫ）に同期してＢＳの値を１ビットずつずらしながら読み込み、その読み込んだ値を出力する。一方、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が「０」の場合には、その読み込みを行わない。また、読み込み部１６は、ｒｓｔ＿ｄ信号によってリセットされる。リセットされると出力が０になる。
【００４２】
読み込み値ホールド１７、計算値ホールド１９は、それぞれ読み込み部１６の出力、計算部１８の出力をホールドする。そのホールドは、ｒｓｔ＿ｓ信号が「０」から「１」となるタイミングで行われる。すなわち、ｒｓｔ＿ｓ信号によってリセットが行われ、その直後に、前述のようにしてｒｓｔ＿ｓ信号が「１」に戻るタイミングで、読み込み値等のホールドが行われる。また、読み込み値ホールド１７、及び計算値ホールド１９は、初期リセットの際にのみｒｓｔ信号によってリセットされるものである。リセットされると出力が０になる。
【００４３】
次に、図３を用いて、各信号の変化について説明する。図３は、復号装置１が図２で示される論理回路である場合であって、ビットストリーム（ＢＳ）「００１１０００…」が入力される場合における各信号の変化を示すタイミングチャートである。その入力のはじめの５ビットが一の指数ゴロム符号に対応している。
【００４４】
まず、ｒｓｔ信号が０となり初期リセットがかけられると、選択器２１はｒｓｔ信号を選択するため、ｒｓｔ＿ｓ信号は０になる（これについては図３で図示していない）。その結果、ｕｐ＿ｄｏｗｎ信号は１になり、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号は０になる。また、カウンタ１２のカウント値や、カウンタホールド１３、読み込み値ホールド１７、計算値ホールド１９の出力も０になる。また、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が０であるため、第２の検出部１４の出力は１になる。また、遅延部１５の出力であるｒｓｔ＿ｄ信号も０となるため、読み込み部１６の出力も０となる。また、カウンタホールド１３の出力ＣＮＴ１が０であるため、計算部１８の出力ＰＢも０となる。また、読み込み値ホールド１７の出力ＳＢ１が０であり、計算値ホールド１９の出力ＰＢ１が０であるため、加算器２０の出力ＧＢも０となる。なお、ｒｓｔ信号が０から１に戻るタイミングで、選択器２１は、第２の検出部１４の出力を選択するため、ｒｓｔ＿ｓ信号は１に戻る。
【００４５】
その後、指数ゴロム符号のビットストリーム（ＢＳ）が順次入力され、クロックが入力されるごとに、カウンタ１２がカウント値を１ずつインクリメントする。また、それに応じて、カウンタホールド１３の出力ＣＮＴ１も１クロックの周期だけ遅れて更新されていく。また、カウンタホールド１３の出力ＣＮＴ１の更新にともなって計算部１８の出力ＰＢも更新されるがｒｓｔ＿ｓ信号が「１」のままであるため、計算値ホールド１９は、その計算部１８の出力ＰＢをホールドしない。また、読み込み部１６は、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が０であるため、ビットストリームの値を読み込まない。また、ｒｓｔ＿ｓ信号が「１」のままであるため、読み込み値ホールド１７も読み込み部１６の出力ＳＢをホールドしない。
【００４６】
次に、セパレータの「１」が入力されると、遅延フリップフロップ１１ａの出力は０であり、ビットストリームの値が１であるため、論理素子１１ｃの出力が０から１になる。そして、遅延フリップフロップ１１ｂは、次のクロックのタイミングで、その１の値を取り込み、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が０から１になり、ｕｐ＿ｄｏｗｎ信号が１から０になる。その結果、カウンタ１２は、次のクロックのタイミングからは、カウントダウンを行うようになる。また、カウンタホールド１３は、ｕｐ＿ｄｏｗｎ信号が１から０になったタイミングでのカウント値のホールドを行った後は、クロックが入力されても新たなホールドを行わなくなる。また、読み込み部１６は、ｓｈｉｆｔ＿ｅｎａｂｌｅ信号が０から１になったため、次のクロックのタイミングから、入力されたビットストリームを順次、取り込むことになる。
【００４７】
その後、クロックが入力されるごとに、カウンタ１２がカウント値を１ずつデクリメントする。また、読み込み部１６も、クロックが入力されるごとに、順次、入力されるビットを読み込んでいく。
【００４８】
そのようにしてカウンタ１２のカウント値が「０００００１」になると、ＮＡＮＤ素子１４ｆへの入力がすべて１になるため、ＮＡＮＤ素子１４ｆの出力、すなわち、第２の検出部１４の出力であるｒｓｔ＿ｓ信号が０になる。その結果、遅延フリップフロップ１１ａ，１１ｂがリセットされてｓｈｉｆｔ＿ｅｎａｂｌｅ信号が１から０になり、ｕｐ＿ｄｏｗｎ信号が０から１になる。また、カウンタ１２もリセットされるため、カウンタ１２の出力も０になる。なお、ｒｓｔ＿ｓ信号は読み込み部１６には入力されていないため、読み込み部１６はリセットされない。また、カウンタホールド１３にはｒｓｔ＿ｓ信号が入力されていないため、カウンタホールド１３もリセットされないが、ｕｐ＿ｄｏｗｎ信号が「１」になったため、カウンタホールド１３は、次のクロックのタイミングからカウンタ１２のカウント値のホールドを再開することになる。
【００４９】
ｒｓｔ＿ｓ信号が０になったことによりｓｈｉｆｔ＿ｅｎａｂｌｅ信号が０になり、カウンタ１２の出力もすべて０になるため、第２の検出部１４の出力であるｒｓｔ＿ｓ信号はすぐに１に戻る。そして、ｒｓｔ＿ｓ信号が０から１に戻るタイミングで、読み込み値ホールド１７は、読み込み部１６の出力ＳＢをホールドする。その結果、サフィックスの符号列が読み込み値ホールド１７でホールドされることになる。また、ｒｓｔ＿ｓ信号が０から１に戻るタイミングで、計算値ホールド１９は、計算部１８の出力ＰＢをホールドする。なお、この時点では、カウンタホールド１３は、カウンタ１２がカウントしたプリフィックスの０の個数をまだホールドしているため、計算値ホールド１９は、２ｎ−１の値をホールドすることになる。ただし、ｎ（＝２）はプリフィックスの０の個数である。また、加算器２０は、読み込み値ホールド１７の出力ＳＢ１と、計算値ホールド１９の出力ＰＢ１とを加算して出力する。その出力ＧＢは、入力された指数ゴロム符号「００１１０」に対応する復号結果「５」となる。なお、図２では図示していないが、前述のように、指数ゴロム符号の復号結果が出力されるタイミング、すなわち、ｒｓｔ＿ｓ信号が０から１に戻るタイミングをトリガとして、加算器２０の出力ＧＢを取り込むようにしてもよい。そのようにすることで、指数ゴロム符号の復号結果を順次、取り込むことができるようになる。
【００５０】
その後、次のクロックが入力されるタイミングから、前述の説明と同様にして、新たな指数ゴロム符号に対するプリフィックスの０の個数のカウント等が開始されることになり、順次、指数ゴロム符号の復号処理が継続されることになる。
【００５１】
なお、図３で示されるタイミングチャートでは、プリフィックスに１以上の０が存在する場合について説明したが、プリフィックスの０が０個である場合、すなわち、プリフィックスが存在しない場合であっても、適切に符号番号「０」を出力できることは、図２の論理回路を参照することによって理解可能である。
【００５２】
また、図２で示される論理回路の場合には、カウンタ１２がセパレータの入力時にもカウントアップする構成としたため、第２の検出部１４が、カウント値が１になった場合にサフィックスの終了を検出するようにしたが、これは一例であって、例えば、カウンタ１２がセパレータの入力時にカウントアップを行わない構成とした場合には、第２の検出部１４は、例えば、カウント値が０になった場合にサフィックスの終了を検出してもよい。このように、サフィックスの終了を検出する際のカウント値については任意性があることになる。
【００５３】
以上のように、本実施の形態による復号装置１によれば、前述の特許文献１の復号回路と異なり、バッファ回路を設けることなく指数ゴロム符号の復号処理を実現することができる。したがって、指数ゴロム符号の復号処理で用いられるメモリの容量を削減することができる。その結果、この復号装置１をハードウェアとして構成した場合に、回路規模を削減することができる。また、本実施の形態による復号装置１では、入力される指数ゴロム符号のビットレートに同期したクロックで動作させることによって、リアルタイム処理を実現可能である。したがって、前述の特許文献１と異なり、クロックの周波数を上げることなく、リアルタイム処理を行うことができる。
【００５４】
なお、本実施の形態による復号装置１の具体的な構成として、図２の場合について説明したが、復号装置１の構成が図２に限定されないことはいうまでもない。同様の処理を異なる論理回路によって構成してもよく、同様の目的を異なる構成によって実現してもよい。例えば、読み込み部１６が読み込んだサフィックスの符号列を読み込み値ホールド１７が適切にホールドできるのであれば、復号装置１は、遅延部１５を備えなくてもよい。また、例えば、図２では、読み込み部１６が第１の検出部１１の出力するｓｈｉｆｔ＿ｅｎａｂｌｅ信号を用いて、入力されている符号がサフィックスからプリフィックスに変化したことを受け取る場合、すなわち、読み込み部１６が、第２の検出部１４が検出したサフィックスのカウントダウンの終了（すなわち、入力がサフィックスからプリフィックスに変化したこと）を第１の検出部１１を経由して受け取る場合について説明したが、そうでなくてもよい。例えば、読み込み部１６は、第２の検出部１４から直接、入力がサフィックスからプリフィックスに変化したことを受け取り、それに応じて、符号の読み込みを終了するようにしてもよい。
【００５５】
また、上記実施の形態において、各構成要素が実行する処理に関係する情報、例えば、各構成要素が受け付けたり、取得したり、選択したり、生成したり、送信したり、受信したりした情報や、各構成要素が処理で用いる数式等の情報等は、上記説明で明記していない場合であっても、図示しない記録媒体において、一時的に、あるいは長期にわたって保持されていてもよい。また、その図示しない記録媒体への情報の蓄積を、各構成要素、あるいは、図示しない蓄積部が行ってもよい。また、その図示しない記録媒体からの情報の読み出しを、各構成要素、あるいは、図示しない読み出し部が行ってもよい。
【００５６】
また、上記実施の形態において、各構成要素等で用いられる情報、例えば、各構成要素が処理で用いる各種の設定値等の情報がユーザによって変更されてもよい場合には、上記説明で明記していない場合であっても、ユーザが適宜、それらの情報を変更できるようにしてもよく、あるいは、そうでなくてもよい。それらの情報をユーザが変更可能な場合には、その変更は、例えば、ユーザからの変更指示を受け付ける図示しない受付部と、その変更指示に応じて情報を変更する図示しない変更部とによって実現されてもよい。
【００５７】
また、上記実施の形態において、各構成要素は例えば図２で示されるように専用のハードウェアにより構成されてもよく、あるいは、ソフトウェアにより実現可能な構成要素については、プログラムを実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の記録媒体に記録されたソフトウェア・プログラムをＣＰＵ等のプログラム実行部が読み出して実行することによって、各構成要素が実現され得る。なお、上記実施の形態における復号装置１を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、０個以上の０の連続であるプリフィックスと、当該プリフィックスに続く１であるセパレータと、当該セパレータに続く、前記プリフィックスの０と同数の０または１の符号列であるサフィックスとを有する指数ゴロム符号を順次復号する復号装置として機能させるためのプログラムであって、指数ゴロム符号のセパレータを検出する第１の検出部、前記第１の検出部がセパレータを検出するまでのプリフィックスにおける０の個数をカウントアップし、前記第１の検出部がセパレータを検出した後のサフィックスにおける０及び１の符号の個数を、カウントアップした結果のカウント値からカウントダウンするカウンタ、前記カウンタがサフィックスにおけるすべての符号のカウントダウンを終了したことを検出する第２の検出部、前記カウンタがカウントアップしたプリフィックスにおける０の個数（この個数をｎとする）を用いて、２ｎ−１を計算する計算部、前記第１の検出部がセパレータを検出してから前記第２の検出部がカウントダウンの終了を検出するまで、指数ゴロム符号のサフィックスの符号列を読み込む読み込み部、前記計算部の計算結果と、前記読み込み部が読み込んだサフィックスの符号列とを加算し、その加算結果である指数ゴロム符号の復号結果を出力する加算器、として機能させ、前記カウンタは、前記第２の検出部がカウントダウンの終了を検出すると、次の指数ゴロム符号のプリフィックスにおける０の個数のカウントアップを開始する、ものである。
【００５８】
なお、上記プログラムにおいて、上記プログラムが実現する機能には、ハードウェアでしか実現できない機能は含まれない。例えば、情報を読み込む読み込み部などにおけるメモリなどのハードウェアでしか実現できない機能は、上記プログラムが実現する機能には少なくとも含まれない。また、上記実施の形態による復号装置１をソフトウェアによって実現する場合には、カウンタ１２や、カウンタホールド１３、読み込み部１６、読み込み値ホールド１７、計算値ホールド１９におけるデータの記憶は、ＣＰＵ等がデータを一時記憶メモリ等に蓄積することによって実現されてもよい。
【００５９】
また、このプログラムは、サーバなどからダウンロードされることによって実行されてもよく、所定の記録媒体（例えば、ＣＤ−ＲＯＭなどの光ディスクや磁気ディスク、半導体メモリなど）に記録されたプログラムが読み出されることによって実行されてもよい。また、このプログラムは、プログラムプロダクトを構成するプログラムとして用いられてもよい。
【００６０】
また、このプログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
【００６１】
また、本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【産業上の利用可能性】
【００６２】
以上より、本発明による復号装置等によれば、指数ゴロム符号の復号処理において使用するメモリの容量を削減できるという効果が得られ、指数ゴロム符号を復号する装置等として有用である。
【符号の説明】
【００６３】
１  復号装置
１１  第１の検出部
１２  カウンタ
１３  カウンタホールド
１４  第２の検出部
１５  遅延部
１６  読み込み部
１７  読み込み値ホールド
１８  計算部
１９  計算値ホールド
２０  加算器
２１  選択器
【図１】
2010200281.tif 000003
【図２】
2010200281.tif 000004
【図３】
2010200281.tif 000005