説明

復号装置、及びプログラム

【課題】指数ゴロム符号を復号する復号装置を提供する。
【解決手段】入力される指数ゴロム符号のセパレータ「1」を検出する第1の検出部11、セパレータの検出までのプリフィックスの0の数をカウントアップし、セパレータの検出後のサフィックスの符号の数を、カウントアップ後のカウント値からカウントダウンするカウンタ12、サフィックスの全符号のカウントダウンの終了を検出する第2の検出部14、カウントアップ後のプリフィックスの0の数(=n)を用いて2−1を計算する計算部18、セパレータの検出からカウントダウンの終了の検出まで、サフィックスの符号列を読み込む読み込み部16、計算結果と読み込まれた符号列とを加算した復号結果を出力する加算器20を備え、カウンタ12は、カウントダウンの終了の検出後、次のプリフィックスの0の数のカウントアップを開始する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、指数ゴロム符号を復号する復号装置等に関する。
【背景技術】
【0002】
画像圧縮技術の一つであるH.264/AVCでは、基本的なシンタックス要素の符号化に指数ゴロム符号を用いている。その指数ゴロム符号は、次に示すように、プリフィックス(Prefix)、セパレータ(Separator)、サフィックス(Suffix)を有し、プリフィックスとサフィックスとのビット数は等しくなっている。また、プリフィックスは、0個以上の0を有する。なお、プリフィックスが接頭辞と呼ばれることもあり、セパレータが分離記号と呼ばれることもあり、サフィックスが接尾辞と呼ばれることもある。
【0003】
指数ゴロム符号 符号番号
1 0
0 1 0 1
0 1 1 2
0 0 1 0 0 3
0 0 1 0 1 4
0 0 1 1 0 5
0 0 1 1 1 6
0 0 0 1 0 0 0 7
0 0 0 1 0 0 1 8
: : : : : : : :
: : : : : : : :
プリフィックス S サフィックス
なお、「S」はセパレータを示している。
【0004】
指数ゴロム符号を復号した符号番号は、プリフィックスにおける0の個数を「n」として、サフィックスの値を「m」とすると次のようになる。なお、プリフィックス及びサフィックスに符号が存在しない場合には、サフィックスの値は0であるとする(すなわち、m=0)。
符号番号=2−1+m
【0005】
このような指数ゴロム符号の復号を行う種々の方法が知られている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2006−254225号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、従来の特許文献1の技術では、指数ゴロム符号のビットストリームをバッファ回路に読み込んでプリフィックスの0の個数をカウントするなどの処理を行っていたため、そのバッファ回路が必須であり、また、複雑な制御を行うため、多くの回路が必要であり、それだけ回路規模が大きくなっていた。また、指数ゴロム符号の一部をバッファ回路に読み込んでから処理を行うため、指数ゴロム符号のビットストリームについて処理を行うためには、そのバッファよりも前段に他の記憶手段を設けるか、あるいは、バッファ回路に読み込まれた符号列を、指数ゴロム符号のビットストリームのビットレートよりもよほど高速なレートで処理する必要がある。前者の場合には、さらに回路規模が増大することとなり、後者の場合には、それだけ消費電力が大きくなる(消費電力はクロック周波数に比例するため)。
【0008】
本発明は、上記課題を解決するためになされたものであり、使用するメモリ容量を削減することができると共に、リアルタイム処理を行うことができる指数ゴロム符号の復号装置等を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記目的を達成するため、本発明による復号装置は、0個以上の0の連続であるプリフィックスと、当該プリフィックスに続く1であるセパレータと、当該セパレータに続く、前記プリフィックスの0と同数の0または1の符号列であるサフィックスとを有する指数ゴロム符号が順次入力され、当該指数ゴロム符号を復号する復号装置であって、指数ゴロム符号のセパレータを検出する第1の検出部と、前記第1の検出部がセパレータを検出するまでのプリフィックスにおける0の個数をカウントアップし、前記第1の検出部がセパレータを検出した後のサフィックスにおける0及び1の符号の個数を、カウントアップした結果のカウント値からカウントダウンするカウンタと、前記カウンタがサフィックスにおけるすべての符号のカウントダウンを終了したことを検出する第2の検出部と、前記カウンタがカウントアップしたプリフィックスにおける0の個数(この個数をnとする)を用いて、2−1を計算する計算部と、前記第1の検出部がセパレータを検出してから前記第2の検出部がカウントダウンの終了を検出するまで、指数ゴロム符号のサフィックスの符号列を読み込む読み込み部と、前記計算部の計算結果と、前記読み込み部が読み込んだサフィックスの符号列とを加算し、その加算結果である指数ゴロム符号の復号結果を出力する加算器と、を備え、前記カウンタは、前記第2の検出部がカウントダウンの終了を検出すると、次の指数ゴロム符号のプリフィックスにおける0の個数のカウントアップを開始する、ものである。
【0010】
このような構成により、特許文献1に記載されているような指数ゴロム符号のビットストリームの一部を記憶させるバッファ回路が不要となる。したがって、使用するメモリ容量を削減することができる。その結果、この復号装置を論理回路のハードウェアとして構成した場合に、回路規模を縮小させることができる。また、このような構成によって、リアルタイム処理も実現することができる。
【0011】
また、本発明による復号装置において、前記第1の検出部がセパレータを検出するまで、前記カウンタがカウントアップするごとにカウント値をホールドするカウンタホールドと、前記第2の検出部がカウントダウンの終了を検出したことに応じて、前記計算部の計算値である計算結果をホールドする計算値ホールドと、前記第2の検出部がカウントダウンの終了を検出したことに応じて、前記読み込み部が読み込んだ読み込み値であるサフィックスの符号列をホールドする読み込み値ホールドと、前記第2の検出部によるカウントダウンの終了の検出時点を所定の期間だけ遅延させた時点である前記読み込み値ホールドによる符号列のホールド後の時点に前記読み込み部の読み込み値をリセットする遅延部と、をさらに備え、前記計算部は、前記カウンタホールドがホールドしたカウント値(n)を用いて前記計算を行い、前記加算器は、前記計算値ホールドがホールドした計算結果と、前記読み込み値ホールドがホールドしたサフィックスの符号列とを加算してもよい。
【0012】
このような構成により、カウント値や読み込み値等を適切にホールドすることができ、そのホールドした値を用いて復号処理を行うことができる。
【発明の効果】
【0013】
本発明による復号装置等によれば、指数ゴロム符号を復号する際に、使用するメモリ容量を削減することができると共に、リアルタイム処理を行うことができるようになる。
【図面の簡単な説明】
【0014】
【図1】本発明の実施の形態1による復号装置の構成を示すブロック図
【図2】同実施の形態による復号装置のさらに詳細な構成の一例を示す図
【図3】同実施の形態における信号の変化の一例を示すタイミングチャート
【発明を実施するための形態】
【0015】
以下、本発明による復号装置について、実施の形態を用いて説明する。なお、以下の実施の形態において、同じ符号を付した構成要素は同一または相当するものであり、再度の説明を省略することがある。
【0016】
(実施の形態1)
本発明の実施の形態1による復号装置について、図面を参照しながら説明する。本実施の形態による復号装置は、指数ゴロム符号の復号を行うものである。
【0017】
図1は、本実施の形態による復号装置1の構成を示すブロック図である。本実施の形態による復号装置1は、第1の検出部11と、カウンタ12と、カウンタホールド13と、第2の検出部14と、遅延部15と、読み込み部16と、読み込み値ホールド17と、計算部18と、計算値ホールド19と、加算器20とを備える。
【0018】
なお、この復号装置1には、指数ゴロム符号が順次入力され、その指数ゴロム符号が順次復号されるものとする。その指数ゴロム符号は、前述のように、0個以上の0の連続であるプリフィックスと、そのプリフィックスに続く1であるセパレータと、そのセパレータに続く、プリフィックスの0と同数の0または1の符号列であるサフィックスとを有するものである。本実施の形態では、指数ゴロム符号のビットストリームが復号装置1に入力される場合について説明を行うが、そうでなくてもよい。例えば、復号装置1は、記録媒体等において記憶されている指数ゴロム符号を順次、読み出しながら復号処理を行ってもよい。
【0019】
第1の検出部11は、指数ゴロム符号のセパレータを検出する。具体的には、指数ゴロム符号のビットストリーム(BS)において、プリフィックスの0が順次、入力されてきている際に、セパレータの「1」が入力されると、そのことを検出する。そして、第1の検出部11は、セパレータを検出すると、その旨をカウンタ12、カウンタホールド13、第2の検出部14、読み込み部16に渡す。具体的には、第1の検出部11は、セパレータを検出すると、カウンタ12、及びカウンタホールド13に出力しているup_down信号を「1」から「0」にする。なお、up_down信号は、指数ゴロム符号のプリフィックスが入力されている際には「1」となり、サフィックスが入力されている際には「0」となる信号である。また、第1の検出部11は、セパレータを検出すると、第2の検出部14、及び読み込み部16に出力しているshift_enable信号を「0」から「1」にする。なお、shift_enable信号は、指数ゴロム符号のプリフィックスが入力されている際には「0」となり、サフィックスが入力されている際には「1」となる信号である。このように、shift_enable信号は、up_down信号を反転させた信号である。また、第1の検出部11は、後述する第2の検出部14によって、サフィックスの入力の終了が検出された際に、up_down信号を「0」から「1」にすると共に、shift_enable信号を「1」から「0」にする。第2の検出部14がサフィックスの入力の終了を検出した旨は、第2の検出部14が出力するrst_s信号が「1」から「0」になったことによって知ることができる。
【0020】
カウンタ12は、第1の検出部11がセパレータを検出するまでのプリフィックスにおける0の個数をカウントアップし、第1の検出部11がセパレータを検出した後のサフィックスにおける0及び1の符号の個数を、カウントアップした結果のカウント値からカウントダウンする。すなわち、プリフィックスの符号が入力されている場合に、第1の検出部11がセパレータを検出するまで、カウンタ12は、符号(=0)が入力されるごとにカウント値をカウントアップする。また、サフィックスの符号が入力されている場合に、後述する第2の検出部14がカウントダウンの終了を検出するまで、カウンタ12は、符号(=0または1)が入力されるごとにカウント値をカウントダウンする。また、カウンタ12は、後述する第2の検出部14がカウントダウンの終了を検出すると、次の指数ゴロム符号のプリフィックスにおける0の個数のカウントアップを開始する。このように、カウンタ12は、指数ゴロム符号が入力されるごとに、プリフィックスでは0ごとにカウントアップを行い、サフィックスでは0及び1の符号ごとにカウントダウンを行う。したがって、このカウント値が所定の値となった場合に、サフィックスが終了したことを知ることができる。その検出を行うのが後述する第2の検出部14である。具体的には、カウンタ12は、up_down信号が「1」の場合、すなわち、プリフィックスの符号が入力されている場合には、クロック(CLK)ごとにカウント値を「1」だけインクリメントする。また、カウンタ12は、up_down信号が「0」の場合、すなわち、サフィックスの符号が入力されている場合には、クロックごとにカウント値を「1」だけデクリメントする。また、カウンタ12は、後述する第2の検出部14がサフィックスの入力の終了を検出した場合に、カウント値を「0」にリセットする。第2の検出部14がサフィックスの入力の終了を検出した旨は、第2の検出部14が出力するrst_s信号が「1」から「0」になったことによって知ることができる。なお、指数ゴロム符号のビットストリームのビットレートと、クロックの周波数とが同期していることは当然である。
【0021】
カウンタホールド13は、カウンタ12によってカウントアップされたプリフィックスの0の個数をホールドする。その方法は問わないが、本実施の形態では、up_down信号が「1」の場合には、クロックごとにカウンタ12のカウント値をホールドし、up_down信号が「0」の場合には、新たなホールドを行わないことによって、プリフィックスの0の個数がカウンタホールド13によってホールドされる場合について説明する。すなわち、本実施の形態によるカウンタホールド13は、第1の検出部11がセパレータを検出するまで、カウンタ12がカウントアップするごとにカウント値をホールドするものである。
【0022】
第2の検出部14は、カウンタ12がサフィックスにおけるすべての符号のカウントダウンを終了したことを検出する。具体的には、第2の検出部14は、shift_enable信号が「1」の場合、すなわち、サフィックスの符号が入力されている場合に、カウンタ12のカウント値があらかじめ設定されている値になった時にカウントダウンの終了を検出する。そして、第2の検出部14は、カウントダウンの終了を検出すると、第1の検出部11、カウンタ12、遅延部15、読み込み値ホールド17、計算値ホールド19に出力しているrst_s信号を「1」から「0」にする。なお、そのrst_s信号は、「1」から「0」に変更された後に、再度、「1」に戻るものとする。また、第2の検出部14は、shift_enable信号が「0」の場合、すなわち、プリフィックスの符号が入力されている場合には、その検出の処理を行わないものとする。
【0023】
遅延部15は、第2の検出部14によるカウントダウンの終了の検出時点を所定の期間だけ遅延させた時点に、後述する読み込み部16の読み込み値をリセットする。そのカウントダウンの終了の検出時点を所定の期間だけ遅延させた時点とは、後述する読み込み値ホールド17による符号列のホールド後の時点のことである。これは、読み込み部16が読み込んだ値を、読み込み値ホールド17がホールドするまで消去しないようにするためである。例えば、遅延部15は、第2の検出部14がカウントダウンの終了を検出すると、その次のクロックのタイミングで、読み込み部16にカウントダウンの終了を伝える。すなわち、遅延部15は、約1クロックの周期だけ遅延させて、読み込み部16にカウントダウンの終了を伝える。より具体的には、遅延部15は、第2の検出部14が出力しているrst_s信号が「1」から「0」になった場合に、その次のクロックのタイミングで読み込み部16に出力しているrst_d信号を「1」から「0」にする。なお、そのrst_d信号は、その次のクロックのタイミングで「0」から「1」に戻るものとする。また、カウントダウンの終了が読み込み部16に伝えられることにより、読み込み部16は、読み込み値のリセットを行うものとする。
【0024】
読み込み部16は、第1の検出部11がセパレータを検出してから第2の検出部14がカウントダウンの終了を検出するまで、指数ゴロム符号のサフィックスの符号列を読み込む。すなわち、読み込み部16は、サフィックスの符号が入力されている場合に、第2の検出部14がカウントダウンの終了を検出するまで、新たなサフィックスの符号が入力されるごとに、その符号を読み込んでいく。この読み込み部16は、例えば、シフトレジスタによって構成されてもよく、指数ゴロム符号のサフィックスの符号列を適宜、メモリに格納する制御手段によって構成されてもよい。本実施の形態では、前者の場合について説明する。具体的には、読み込み部16は、shift_enable信号が「1」である場合に、クロックごとに入力される指数ゴロム符号を順次、読み込んでいく。その結果、指数ゴロム符号のサフィックスの符号列が読み込み部16によって読み込まれることになる。一方、遅延部15が出力しているrst_d信号が「1」から「0」になると、読み込み部16は、読み込んでいた符号列をリセットして「0」に戻す。そして、次の指数ゴロム符号のサフィックスの符号列の入力に備えることになる。
【0025】
読み込み値ホールド17は、読み込み部16が読み込んだ指数ゴロム符号のサフィックスの符号列をホールドする。本実施の形態では、読み込み値ホールド17は、第2の検出部14がカウントダウンの終了を検出したことに応じて、読み込み部16の出力をホールドするものとする。「カウントダウンの終了を検出したことに応じて」とは、カウントダウンの終了の検出の直後であってもよい。具体的には、読み込み値ホールド17は、rst_s信号が「0」から「1」に変化する際に、読み込み部16の出力である読み込み値(=サフィックスの符号列)をホールドする。
【0026】
計算部18は、カウンタ12がカウントアップしたプリフィックスにおける0の個数(この個数をnとする)を用いて、2−1を計算する。具体的には、カウンタホールド13がホールドしたプリフィックスの0の個数を用いて、計算部18は、その計算を行う。また、この計算の方法は問わない。例えば、nの値と、2−1の値との関係は次のようになるため、nの値を入力として、2−1の値を出力とする論理回路を、ハードウェア記述言語を用いて構成してもよい。その場合には、減算器を用いて計算するよりも、より高速に算出することができ、回路規模を削減することができる。
n 2−1
00 000
01 001
10 011
11 111
【0027】
なお、計算部18による2−1の計算の方法は問わない。例えば、nの値と、2−1の値とを対応付けるテーブル等の情報を用いて2−1の値を算出してもよく、左シフトレジスタや減算器を用いて2−1の値を算出してもよい。
【0028】
計算値ホールド19は、計算部18が計算した2−1の値である計算値をホールドする。本実施の形態では、計算値ホールド19は、読み込み値ホールド17と同様に、第2の検出部14がカウントダウンの終了を検出したことに応じて、計算部18の出力をホールドするものとする。「カウントダウンの終了を検出したことに応じて」とは、カウントダウンの終了の検出の直後であってもよい。具体的には、計算値ホールド19は、rst_s信号が「0」から「1」に変化する際に、計算部18の出力である2−1の値をホールドする。
【0029】
加算器20は、計算部18の計算結果と、読み込み部16が読み込んだサフィックスの符号列とを加算し、その加算結果である指数ゴロム符号の復号結果を出力する。加算器20は、一の指数ゴロム符号について、そのプリフィックスの0の個数を用いた計算部18の計算結果と、読み込み部16が読み込んだ、そのサフィックスの符号列とを加算する。具体的には、加算器20は、読み込み値ホールド17がホールドしたサフィックスの符号列と、計算値ホールド19がホールドした2−1の計算結果とを加算して出力する。なお、加算器20の出力は、読み込み値ホールド17がサフィックスの符号列をホールドし、計算値ホールド19が2−1の計算結果をホールドした後に、サンプリングされて取り込まれてもよい。具体的には、rst_s信号が「0」から「1」に変化して符号列等のホールドが行われた後に、加算器20の出力がサンプリングされて取り込まれてもよい。
【0030】
なお、このようにして、第1の検出部11によって指数ゴロム符号のプリフィックスからサフィックスへの変化が検出され、第2の検出部14によって一の指数ゴロム符号のサフィックスから、その次の指数ゴロム符号のプリフィックスへの変化が検出され、カウンタ12によってプリフィックスの0の個数をカウントし、読み込み部16によってサフィックスの符号列を読み込むことによって、バッファ回路を設けることなく、指数ゴロム符号を復号することができる。また、シンプルな処理によって、指数ゴロム符号の復号を行うことができる。
【0031】
また、本実施の形態では、各要素のリセットのためにrst信号や、rst_s信号、rst_d信号を用いているが、これらの信号は「1」から「0」になるタイミングで各要素をリセットするものである。
【0032】
次に、本実施の形態による復号装置1のより詳細な構成の一例について説明する。図2は、本実施の形態による復号装置1のより詳細な構成の一例を示す論理回路図である。
【0033】
図2において、第1の検出部11は、遅延フリップフロップ11a,11bと、論理素子11c,11dとを備える。遅延フリップフロップ11aは、クロック(CLK)に同期してBSの値を取り込み、その取り込んだ値を論理素子11cに出力する。また、遅延フリップフロップ11aはrst_s信号によってリセットされる。遅延フリップフロップ11bは、論理素子11dの出力に同期して論理素子11cの出力を取り込み、その取り込んだ値であるshift_enable信号と、そのshift_enable信号が反転された信号であるup_down信号とを出力する。論理素子11cは、遅延フリップフロップ11aの出力を反転させるNOT素子と、そのNOT素子の出力とBSとを入力とするAND素子とを有する。論理素子11dは、クロック(CLK)と、遅延フリップフロップ11bの出力であるup_down信号とを入力とするAND素子である。
【0034】
このような構成により、BSが0から1に変化したタイミングで、論理素子11cの出力は「1」となり、それ以外の場合には、論理素子11cの出力は「0」となる。そして、その論理素子11cの出力が遅延フリップフロップ11bに取り込まれ、shift_enable信号として出力される。ただし、遅延フリップフロップ11bのクロックの入力の前段にAND素子である論理素子11dが存在することにより、一度、up_down信号が「1」から「0」になると、新たなクロックが入力されないことになり、rst_s信号によってリセットされるまで、shift_enable信号=1,up_down信号=0が保持されることになる。rst_s信号によってリセットされると、遅延フリップフロップ11aの論理素子11cへの出力は「0」になり、遅延フリップフロップ11bのshift_enable信号の出力は「0」になり、up_down信号の出力は「1」になる。したがって、第1の検出部11において、プリフィックスでBSが0から1に変化したタイミングで、論理素子11cの出力「1」が遅延フリップフロップ11bに取り込まれ、shift_enable信号が「1」になり、up_down信号が「0」になる。その後は、rst_s信号によってリセットがかけられるまで、そのshift_enable信号等の値は保持されることになる。
【0035】
カウンタ12は、up_down信号が「1」の場合にはクロック(CLK)に同期してカウントアップを行い、up_down信号が「0」の場合にはクロック(CLK)に同期してカウントダウンを行う。なお、カウントダウンは、カウントアップを行った後のカウント値から行われる。また、rst_s信号によってリセットされると、カウンタ12のカウント値が0になる。また、図2において、カウンタ12の出力は図中上側が上位ビットであり、図中下側が下位ビットである。
【0036】
選択器21は、初期リセットのためのrst信号と、第2の検出部14の出力とを入力として、そのうちの一方を選択して出力する。この選択器21の出力がrst_s信号である。なお、選択器21は、初期リセットのためにrst信号が「0」になった場合にはrst信号を選択し、その後、rst信号が「1」に戻った場合には、第2の検出部14の出力を選択するものとする。
【0037】
第2の検出部14は、カウンタ12の最下位ビット以外のビットをそれぞれ反転させる複数のNOT素子14a〜14eと、shift_enable信号とカウンタ12の最下位ビットとNOT素子14a〜14eのそれぞれの出力とを入力とするNAND素子14fとを備える。NAND素子14fには、shift_enable信号が入力されているため、shift_enable信号が「0」の期間、すなわち、プリフィックスの期間は、第2の検出部14の出力は「1」に保たれる。一方、カウンタ12によるカウントダウンが行われる場合、すなわち、shift_enable信号が「1」の場合に、カウンタ12のカウント値が「000001」となると、NAND素子14fの出力は「0」となる。なお、初期リセットのとき以外は選択器21は第2の検出部14の出力を選択するため、NAND素子14fの出力が「0」になると、rst_s信号は「0」となる。そして、rst_s信号が「0」になると、第1の検出部11の遅延フリップフロップ11bがリセットされ、shift_enable信号が「0」になる。その結果、NAND素子14fの出力はすぐに「1」に戻る。このように、図2の具体例では、第2の検出部14は、カウント値が「000001」になった場合に、カウントダウンの終了を検出していることになる。
【0038】
カウンタホールド13は、up_down信号が「1」の場合、すなわち、カウンタ12がカウントアップを行う場合には、クロック(CLK)に同期してカウンタ12のカウント値をホールドする。一方、up_down信号が「0」の場合には、カウンタホールド13は、カウント値のホールドを行わない。図2では、カウンタホールド13は、第2の検出部14の複数のNOT素子14a〜14eによって反転されたカウンタ12の出力が再度、複数のNOT素子22〜26によって反転されたものを入力とする場合について示しているが、カウンタホールド13は、カウンタ12の出力を直接、入力としてもよい。また、カウンタホールド13は、初期セットの際にのみrst信号によってリセットされる。
【0039】
遅延部15は、NAND素子15a,15bと、NOT素子15cと、遅延フリップフロップ15dとを備える。NAND素子15aの一方の入力はrst_s信号であり、他方の入力はNAND素子15bの出力である。また、NAND素子15bの一方の入力はNAND素子15aの出力であり、他方の入力は遅延フリップフロップ15dの出力、すなわち、rst_d信号である。NOT素子15cは、NAND素子15aの出力を反転させて遅延フリップフロップ15dに入力する。遅延フリップフロップ15dは、初期セットの際にのみrst信号によってリセットされるものであり、クロック(CLK)に同期してNOT素子15cの出力を取り込み、rst_d信号を出力する。
【0040】
その図2の論理回路の構成から分かるように、遅延部15は、初期リセットがかけられてrst_s信号が「0」となった際には、rst_d信号が「0」となる。その後に初期リセットが戻されてrst_s信号が「1」になると、次のクロックのタイミングでrst_d信号は「1」になる。その後は、rst_s信号=0になるまで、rst_d信号が「1」に保持される。また、第2の検出部14がカウントダウンの終了を検出してrst_s信号が「0」になり、その後にrst_s信号が「1」に戻ってクロックがかかったタイミングで、rst_d信号は「0」になる。また、次のクロックでrst_d信号は「1」に戻る。その後は、rst_s信号=0になるまで、rst_d信号が「1」に保持される。このようにして、遅延部15は、rst_s信号を約1クロックの周期だけ遅延させたrst_d信号を出力することができる。
【0041】
読み込み部16は、前述のように、シフトレジスタである。shift_enable信号が「1」の場合には、クロック(CLK)に同期してBSの値を1ビットずつずらしながら読み込み、その読み込んだ値を出力する。一方、shift_enable信号が「0」の場合には、その読み込みを行わない。また、読み込み部16は、rst_d信号によってリセットされる。リセットされると出力が0になる。
【0042】
読み込み値ホールド17、計算値ホールド19は、それぞれ読み込み部16の出力、計算部18の出力をホールドする。そのホールドは、rst_s信号が「0」から「1」となるタイミングで行われる。すなわち、rst_s信号によってリセットが行われ、その直後に、前述のようにしてrst_s信号が「1」に戻るタイミングで、読み込み値等のホールドが行われる。また、読み込み値ホールド17、及び計算値ホールド19は、初期リセットの際にのみrst信号によってリセットされるものである。リセットされると出力が0になる。
【0043】
次に、図3を用いて、各信号の変化について説明する。図3は、復号装置1が図2で示される論理回路である場合であって、ビットストリーム(BS)「0011000…」が入力される場合における各信号の変化を示すタイミングチャートである。その入力のはじめの5ビットが一の指数ゴロム符号に対応している。
【0044】
まず、rst信号が0となり初期リセットがかけられると、選択器21はrst信号を選択するため、rst_s信号は0になる(これについては図3で図示していない)。その結果、up_down信号は1になり、shift_enable信号は0になる。また、カウンタ12のカウント値や、カウンタホールド13、読み込み値ホールド17、計算値ホールド19の出力も0になる。また、shift_enable信号が0であるため、第2の検出部14の出力は1になる。また、遅延部15の出力であるrst_d信号も0となるため、読み込み部16の出力も0となる。また、カウンタホールド13の出力CNT1が0であるため、計算部18の出力PBも0となる。また、読み込み値ホールド17の出力SB1が0であり、計算値ホールド19の出力PB1が0であるため、加算器20の出力GBも0となる。なお、rst信号が0から1に戻るタイミングで、選択器21は、第2の検出部14の出力を選択するため、rst_s信号は1に戻る。
【0045】
その後、指数ゴロム符号のビットストリーム(BS)が順次入力され、クロックが入力されるごとに、カウンタ12がカウント値を1ずつインクリメントする。また、それに応じて、カウンタホールド13の出力CNT1も1クロックの周期だけ遅れて更新されていく。また、カウンタホールド13の出力CNT1の更新にともなって計算部18の出力PBも更新されるがrst_s信号が「1」のままであるため、計算値ホールド19は、その計算部18の出力PBをホールドしない。また、読み込み部16は、shift_enable信号が0であるため、ビットストリームの値を読み込まない。また、rst_s信号が「1」のままであるため、読み込み値ホールド17も読み込み部16の出力SBをホールドしない。
【0046】
次に、セパレータの「1」が入力されると、遅延フリップフロップ11aの出力は0であり、ビットストリームの値が1であるため、論理素子11cの出力が0から1になる。そして、遅延フリップフロップ11bは、次のクロックのタイミングで、その1の値を取り込み、shift_enable信号が0から1になり、up_down信号が1から0になる。その結果、カウンタ12は、次のクロックのタイミングからは、カウントダウンを行うようになる。また、カウンタホールド13は、up_down信号が1から0になったタイミングでのカウント値のホールドを行った後は、クロックが入力されても新たなホールドを行わなくなる。また、読み込み部16は、shift_enable信号が0から1になったため、次のクロックのタイミングから、入力されたビットストリームを順次、取り込むことになる。
【0047】
その後、クロックが入力されるごとに、カウンタ12がカウント値を1ずつデクリメントする。また、読み込み部16も、クロックが入力されるごとに、順次、入力されるビットを読み込んでいく。
【0048】
そのようにしてカウンタ12のカウント値が「000001」になると、NAND素子14fへの入力がすべて1になるため、NAND素子14fの出力、すなわち、第2の検出部14の出力であるrst_s信号が0になる。その結果、遅延フリップフロップ11a,11bがリセットされてshift_enable信号が1から0になり、up_down信号が0から1になる。また、カウンタ12もリセットされるため、カウンタ12の出力も0になる。なお、rst_s信号は読み込み部16には入力されていないため、読み込み部16はリセットされない。また、カウンタホールド13にはrst_s信号が入力されていないため、カウンタホールド13もリセットされないが、up_down信号が「1」になったため、カウンタホールド13は、次のクロックのタイミングからカウンタ12のカウント値のホールドを再開することになる。
【0049】
rst_s信号が0になったことによりshift_enable信号が0になり、カウンタ12の出力もすべて0になるため、第2の検出部14の出力であるrst_s信号はすぐに1に戻る。そして、rst_s信号が0から1に戻るタイミングで、読み込み値ホールド17は、読み込み部16の出力SBをホールドする。その結果、サフィックスの符号列が読み込み値ホールド17でホールドされることになる。また、rst_s信号が0から1に戻るタイミングで、計算値ホールド19は、計算部18の出力PBをホールドする。なお、この時点では、カウンタホールド13は、カウンタ12がカウントしたプリフィックスの0の個数をまだホールドしているため、計算値ホールド19は、2−1の値をホールドすることになる。ただし、n(=2)はプリフィックスの0の個数である。また、加算器20は、読み込み値ホールド17の出力SB1と、計算値ホールド19の出力PB1とを加算して出力する。その出力GBは、入力された指数ゴロム符号「00110」に対応する復号結果「5」となる。なお、図2では図示していないが、前述のように、指数ゴロム符号の復号結果が出力されるタイミング、すなわち、rst_s信号が0から1に戻るタイミングをトリガとして、加算器20の出力GBを取り込むようにしてもよい。そのようにすることで、指数ゴロム符号の復号結果を順次、取り込むことができるようになる。
【0050】
その後、次のクロックが入力されるタイミングから、前述の説明と同様にして、新たな指数ゴロム符号に対するプリフィックスの0の個数のカウント等が開始されることになり、順次、指数ゴロム符号の復号処理が継続されることになる。
【0051】
なお、図3で示されるタイミングチャートでは、プリフィックスに1以上の0が存在する場合について説明したが、プリフィックスの0が0個である場合、すなわち、プリフィックスが存在しない場合であっても、適切に符号番号「0」を出力できることは、図2の論理回路を参照することによって理解可能である。
【0052】
また、図2で示される論理回路の場合には、カウンタ12がセパレータの入力時にもカウントアップする構成としたため、第2の検出部14が、カウント値が1になった場合にサフィックスの終了を検出するようにしたが、これは一例であって、例えば、カウンタ12がセパレータの入力時にカウントアップを行わない構成とした場合には、第2の検出部14は、例えば、カウント値が0になった場合にサフィックスの終了を検出してもよい。このように、サフィックスの終了を検出する際のカウント値については任意性があることになる。
【0053】
以上のように、本実施の形態による復号装置1によれば、前述の特許文献1の復号回路と異なり、バッファ回路を設けることなく指数ゴロム符号の復号処理を実現することができる。したがって、指数ゴロム符号の復号処理で用いられるメモリの容量を削減することができる。その結果、この復号装置1をハードウェアとして構成した場合に、回路規模を削減することができる。また、本実施の形態による復号装置1では、入力される指数ゴロム符号のビットレートに同期したクロックで動作させることによって、リアルタイム処理を実現可能である。したがって、前述の特許文献1と異なり、クロックの周波数を上げることなく、リアルタイム処理を行うことができる。
【0054】
なお、本実施の形態による復号装置1の具体的な構成として、図2の場合について説明したが、復号装置1の構成が図2に限定されないことはいうまでもない。同様の処理を異なる論理回路によって構成してもよく、同様の目的を異なる構成によって実現してもよい。例えば、読み込み部16が読み込んだサフィックスの符号列を読み込み値ホールド17が適切にホールドできるのであれば、復号装置1は、遅延部15を備えなくてもよい。また、例えば、図2では、読み込み部16が第1の検出部11の出力するshift_enable信号を用いて、入力されている符号がサフィックスからプリフィックスに変化したことを受け取る場合、すなわち、読み込み部16が、第2の検出部14が検出したサフィックスのカウントダウンの終了(すなわち、入力がサフィックスからプリフィックスに変化したこと)を第1の検出部11を経由して受け取る場合について説明したが、そうでなくてもよい。例えば、読み込み部16は、第2の検出部14から直接、入力がサフィックスからプリフィックスに変化したことを受け取り、それに応じて、符号の読み込みを終了するようにしてもよい。
【0055】
また、上記実施の形態において、各構成要素が実行する処理に関係する情報、例えば、各構成要素が受け付けたり、取得したり、選択したり、生成したり、送信したり、受信したりした情報や、各構成要素が処理で用いる数式等の情報等は、上記説明で明記していない場合であっても、図示しない記録媒体において、一時的に、あるいは長期にわたって保持されていてもよい。また、その図示しない記録媒体への情報の蓄積を、各構成要素、あるいは、図示しない蓄積部が行ってもよい。また、その図示しない記録媒体からの情報の読み出しを、各構成要素、あるいは、図示しない読み出し部が行ってもよい。
【0056】
また、上記実施の形態において、各構成要素等で用いられる情報、例えば、各構成要素が処理で用いる各種の設定値等の情報がユーザによって変更されてもよい場合には、上記説明で明記していない場合であっても、ユーザが適宜、それらの情報を変更できるようにしてもよく、あるいは、そうでなくてもよい。それらの情報をユーザが変更可能な場合には、その変更は、例えば、ユーザからの変更指示を受け付ける図示しない受付部と、その変更指示に応じて情報を変更する図示しない変更部とによって実現されてもよい。
【0057】
また、上記実施の形態において、各構成要素は例えば図2で示されるように専用のハードウェアにより構成されてもよく、あるいは、ソフトウェアにより実現可能な構成要素については、プログラムを実行することによって実現されてもよい。例えば、ハードディスクや半導体メモリ等の記録媒体に記録されたソフトウェア・プログラムをCPU等のプログラム実行部が読み出して実行することによって、各構成要素が実現され得る。なお、上記実施の形態における復号装置1を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、コンピュータを、0個以上の0の連続であるプリフィックスと、当該プリフィックスに続く1であるセパレータと、当該セパレータに続く、前記プリフィックスの0と同数の0または1の符号列であるサフィックスとを有する指数ゴロム符号を順次復号する復号装置として機能させるためのプログラムであって、指数ゴロム符号のセパレータを検出する第1の検出部、前記第1の検出部がセパレータを検出するまでのプリフィックスにおける0の個数をカウントアップし、前記第1の検出部がセパレータを検出した後のサフィックスにおける0及び1の符号の個数を、カウントアップした結果のカウント値からカウントダウンするカウンタ、前記カウンタがサフィックスにおけるすべての符号のカウントダウンを終了したことを検出する第2の検出部、前記カウンタがカウントアップしたプリフィックスにおける0の個数(この個数をnとする)を用いて、2−1を計算する計算部、前記第1の検出部がセパレータを検出してから前記第2の検出部がカウントダウンの終了を検出するまで、指数ゴロム符号のサフィックスの符号列を読み込む読み込み部、前記計算部の計算結果と、前記読み込み部が読み込んだサフィックスの符号列とを加算し、その加算結果である指数ゴロム符号の復号結果を出力する加算器、として機能させ、前記カウンタは、前記第2の検出部がカウントダウンの終了を検出すると、次の指数ゴロム符号のプリフィックスにおける0の個数のカウントアップを開始する、ものである。
【0058】
なお、上記プログラムにおいて、上記プログラムが実現する機能には、ハードウェアでしか実現できない機能は含まれない。例えば、情報を読み込む読み込み部などにおけるメモリなどのハードウェアでしか実現できない機能は、上記プログラムが実現する機能には少なくとも含まれない。また、上記実施の形態による復号装置1をソフトウェアによって実現する場合には、カウンタ12や、カウンタホールド13、読み込み部16、読み込み値ホールド17、計算値ホールド19におけるデータの記憶は、CPU等がデータを一時記憶メモリ等に蓄積することによって実現されてもよい。
【0059】
また、このプログラムは、サーバなどからダウンロードされることによって実行されてもよく、所定の記録媒体(例えば、CD−ROMなどの光ディスクや磁気ディスク、半導体メモリなど)に記録されたプログラムが読み出されることによって実行されてもよい。また、このプログラムは、プログラムプロダクトを構成するプログラムとして用いられてもよい。
【0060】
また、このプログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
【0061】
また、本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【産業上の利用可能性】
【0062】
以上より、本発明による復号装置等によれば、指数ゴロム符号の復号処理において使用するメモリの容量を削減できるという効果が得られ、指数ゴロム符号を復号する装置等として有用である。
【符号の説明】
【0063】
1 復号装置
11 第1の検出部
12 カウンタ
13 カウンタホールド
14 第2の検出部
15 遅延部
16 読み込み部
17 読み込み値ホールド
18 計算部
19 計算値ホールド
20 加算器
21 選択器

【特許請求の範囲】
【請求項1】
0個以上の0の連続であるプリフィックスと、当該プリフィックスに続く1であるセパレータと、当該セパレータに続く、前記プリフィックスの0と同数の0または1の符号列であるサフィックスとを有する指数ゴロム符号が順次入力され、当該指数ゴロム符号を復号する復号装置であって、
指数ゴロム符号のセパレータを検出する第1の検出部と、
前記第1の検出部がセパレータを検出するまでのプリフィックスにおける0の個数をカウントアップし、前記第1の検出部がセパレータを検出した後のサフィックスにおける0及び1の符号の個数を、カウントアップした結果のカウント値からカウントダウンするカウンタと、
前記カウンタがサフィックスにおけるすべての符号のカウントダウンを終了したことを検出する第2の検出部と、
前記カウンタがカウントアップしたプリフィックスにおける0の個数(この個数をnとする)を用いて、2−1を計算する計算部と、
前記第1の検出部がセパレータを検出してから前記第2の検出部がカウントダウンの終了を検出するまで、指数ゴロム符号のサフィックスの符号列を読み込む読み込み部と、
前記計算部の計算結果と、前記読み込み部が読み込んだサフィックスの符号列とを加算し、その加算結果である指数ゴロム符号の復号結果を出力する加算器と、を備え、
前記カウンタは、前記第2の検出部がカウントダウンの終了を検出すると、次の指数ゴロム符号のプリフィックスにおける0の個数のカウントアップを開始する、復号装置。
【請求項2】
前記第1の検出部がセパレータを検出するまで、前記カウンタがカウントアップするごとにカウント値をホールドするカウンタホールドと、
前記第2の検出部がカウントダウンの終了を検出したことに応じて、前記計算部の計算値である計算結果をホールドする計算値ホールドと、
前記第2の検出部がカウントダウンの終了を検出したことに応じて、前記読み込み部が読み込んだ読み込み値であるサフィックスの符号列をホールドする読み込み値ホールドと、
前記第2の検出部によるカウントダウンの終了の検出時点を所定の期間だけ遅延させた時点である前記読み込み値ホールドによる符号列のホールド後の時点に前記読み込み部の読み込み値をリセットする遅延部と、をさらに備え、
前記計算部は、前記カウンタホールドがホールドしたカウント値(n)を用いて前記計算を行い、
前記加算器は、前記計算値ホールドがホールドした計算結果と、前記読み込み値ホールドがホールドしたサフィックスの符号列とを加算する、請求項1記載の復号装置。
【請求項3】
コンピュータを、
0個以上の0の連続であるプリフィックスと、当該プリフィックスに続く1であるセパレータと、当該セパレータに続く、前記プリフィックスの0と同数の0または1の符号列であるサフィックスとを有する指数ゴロム符号を順次復号する復号装置として機能させるためのプログラムであって、
指数ゴロム符号のセパレータを検出する第1の検出部、
前記第1の検出部がセパレータを検出するまでのプリフィックスにおける0の個数をカウントアップし、前記第1の検出部がセパレータを検出した後のサフィックスにおける0及び1の符号の個数を、カウントアップした結果のカウント値からカウントダウンするカウンタ、
前記カウンタがサフィックスにおけるすべての符号のカウントダウンを終了したことを検出する第2の検出部、
前記カウンタがカウントアップしたプリフィックスにおける0の個数(この個数をnとする)を用いて、2−1を計算する計算部、
前記第1の検出部がセパレータを検出してから前記第2の検出部がカウントダウンの終了を検出するまで、指数ゴロム符号のサフィックスの符号列を読み込む読み込み部、
前記計算部の計算結果と、前記読み込み部が読み込んだサフィックスの符号列とを加算し、その加算結果である指数ゴロム符号の復号結果を出力する加算器、として機能させ、
前記カウンタは、前記第2の検出部がカウントダウンの終了を検出すると、次の指数ゴロム符号のプリフィックスにおける0の個数のカウントアップを開始する、プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate


【公開番号】特開2010−200281(P2010−200281A)
【公開日】平成22年9月9日(2010.9.9)
【国際特許分類】
【出願番号】特願2009−46107(P2009−46107)
【出願日】平成21年2月27日(2009.2.27)
【出願人】(503420833)学校法人常翔学園 (62)
【Fターム(参考)】