(57)【特許請求の範囲】
【請求項１】
入力データと複数のフィルタ係数からなるフィルタ係数群とをブースアルゴリズムを用いて積和演算するフィルタ演算器であって、
入力データと隣接するフィルタ係数の差分との乗算を行う２つ以上の乗算ユニットと、
隣接する前記乗算ユニットの乗算結果を加算する加算器とを備え、
前記乗算ユニットは、
ブースのアルゴリズムに従って繰り返し部分積を生成する部分積生成ユニットと、
前記部分積生成ユニットの出力を累積加算する加算器とを有するフィルタ演算器。
【請求項２】
前記部分積生成ユニットは、
現在のデータと前回のデータとの差分と前記フィルタ係数の差分とを乗算する部分積乗算部と、
前記減算結果に基づき前記部分積乗算部での繰り返し演算回数を決定する回数決定部と、
前記前回のデータまでの累積結果と前記現在のデータの乗算結果とを加算する累積加算器とを有する
ことを特徴とする請求項１記載のフィルタ演算器。
【請求項３】
前記回数決定部は、前記減算結果の上位ビットから、ビットの値に変化がある位置をサーチし、当該サーチ結果に基づき乗算回数を決定する
ことを特徴とする請求項２記載のフィルタ演算器。
【請求項４】
前記回数決定部は、前記減算結果の下位ビットから上位ビットまでの全ビットについて、ビットの値に変化がある位置をサーチし、当該サーチ結果に基づき乗算回数を決定する
ことを特徴とする請求項２記載のフィルタ演算器。
【請求項５】
前記回数決定部は、前記減算結果を下位から２ビットごとに区切り、各組と下位組の最上位ビットの計３ビット毎のグループとし、各グループについて、全てのビットの値が同一か否かを判定し、当該判定結果に基づき乗算回数を決定する
ことを特徴とする請求項２記載のフィルタ演算器。
【請求項６】
前記回数決定部は、前記減算結果を下位から２ビットごとに区切り、各組と下位組の最上位ビットの計３ビット毎のグループとし、前記減算結果の下位ビットから上位ビットまでの全ビットについて、前記各グループについてビットの値に変化があるか否かをサーチし、当該サーチ結果に基づき乗算回数を決定する
ことを特徴とする請求項２記載のフィルタ演算器。
【請求項７】
前記回数決定部は、前記乗算回数と共に、前記減算結果を下位から２ビットごとに区切り、各組と下位組の最上位ビットの計３ビット毎のグループとした場合、各グループ内でビットの値に変化があるグループが下位から何番目かを示す順序情報を出力する
ことを特徴とする請求項１乃至５のいずれか１項記載のフィルタ演算器。
【請求項８】
前記部分積乗算部は、前記乗算回数が入力されるデータ選択部と、前記データ選択部により選択されたデータに基づき部分積を演算する部分積生成部と、前記部分積生成部が生成した部分積を所定ビットシフトするビットシフト部とを有する
ことを特徴とする請求項２記載のフィルタ演算器。
【請求項９】
前記乗算ユニットは、第１の乗算ユニットと前記第１の乗算ユニットに接続される第２の乗算ユニットとを有し、
前記第１の乗算ユニットは、
現在のデータと前回のデータとの差分を求める減算器と、
前記減算器により減算された値と、前記フィルタ係数の差分とを乗算する部分積乗算部と、
前記減算結果に基づき前記部分積乗算部での繰り返し演算回数を決定する回数決定部と、
前記前回のデータまでの累積結果と前記現在のデータの乗算結果とを加算する累積加算器とを有し、
前記第２の乗算ユニットは、前記第１の乗算ユニットで求められた減算結果と、前記フィルタ係数の差分とを乗算する部分積乗算部と、
前記減算結果に基づき前記部分積乗算部での繰り返し演算回数を決定する回数決定部と、
前記前回のデータまでの累積結果と前記現在のデータの乗算結果とを加算する累積加算器とを有する
ことを特徴とする請求項１記載のフィルタ演算器。
【請求項１０】
予測画像を生成する動き補償処理装置であって、
垂直方向の入力データに対してフィルタ演算を行なう第１フィルタ演算部と、
水平方向の入力データに応じてフィルタ演算を行なう第２フィルタ演算部と、
前記第１及び第２フィルタ演算部の演算結果又は第１及び第２のフィルタ演算に入力する入力データに対して重み付けを行なう重み付け演算部とを有し、
前記第１及び第２フィルタ演算部は、入力データと複数のフィルタ係数からなるフィルタ係数群とをブースアルゴリズムを用いて積和演算するフィルタ演算部であって、
前記入力データと隣接するフィルタ係数の差分との乗算を行う２つ以上の乗算ユニットと、
隣接する前記乗算ユニットの乗算結果を加算する加算器とを備え、
前記乗算ユニットは、
ブースのアルゴリズムに従って繰り返し部分積を生成する部分積生成ユニットと、
前記部分積生成ユニットの出力を累積加算する加算器とを有する動き補償処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動画の圧縮符号化復号に使用される動き補償処理におけるフィルタ演算を実行するために好適なフィルタ処理装置及びこれを具備する動き補償処理装置に関する。
【背景技術】
【０００２】
次世代ＤＶＤ（Digital Versatile Disk）やＤＴＶ（デジタルテレビ）に採用が決定しているＨ．２６４／ＡＶＣやＶＣ−１といった新しいコーデックがある。これらの復号装置においては、動き補償部での動き補償予測フィルタのフィルタ演算をブースのアルゴリズムを適用した乗算器で構成される場合がある。
【０００３】
乗算器の演算時間は、部分積加算をするために必要とする時間と桁上げ信号吸収をするために必要な時間の総和であり、演算速度を高速にする上でこれらの処理時間の短縮が問題となる。その対策として加算回路を減らすために部分積の数そのものを削減する必要がある。そのためには乗数の連続する複数ビットを一まとめのグループにして、このグループに対応した部分積を生成すれば部分積を削減することができる。そこで部分積数削減のために用いられるのが２次のブースである。２次のブースとは、乗数を２ビットごとに区切り、各組と下位組の最上位ビットの計３ビットをひとまとめにするというアルゴリズムを適用した部分積削減の手法である。
【０００４】
しかしながら、上記のようなコーデックのフィルタ演算を行なう際、これをブースのアルゴリズムを適用した乗算器で構成すると、多数の乗算器が必要となり回路規模が増大する。また、同様にＨ．２６４の画面内予測における予測画像の生成に使用されるフィルタ演算をブースのアルゴリズムを適用した乗算器で適用すると回路規模は増大する。
【０００５】
ところで、特許文献１には、乗算器の数を極力少なくし、回路規模を小さくした離散コサイン変換器が開示されている。図１３は、特許文献１に記載の離散コサイン変換器を示す図である。この離散コサイン変換器は、加算器６１２、６４０、６４２、差分器６１０、レジスタ６１４、マルチプレクサ６１６、６５２、マルチプレクサ乗算器６１８、６２０、６２２、６３４、バタフライ加算器６２６、６２８、６３０、６３２、６４４、６４６、６４８、６５０、乗算器６２４、６３６、６３８、及び量子化器６５４を有する。画像データの交流成分として差分器６１０による差分データを得て、これに対しＤＣＴを行う。そして、差分についてのＤＣＴとすることによって、必要な係数の数が少なくなるため、乗算器の数を減少できる。さらに、同一の係数を異なるデータに対し乗算する場合にはマルチプレクサ乗算器６１８、６２０、６２２、６３４を用い、時分割で乗算を行う。このため、乗算器の数をさらに減少することができる。また、乗算すべき係数を量子化器６５４の量子化テーブルに対し予め乗算しておくため、乗算回数を減少することができる。このように、特許文献１に記載の離散コサイン変換器は、離散コサイン変換の特性を利用し、乗算とバタフライ演算を利用して高速に同演算を実行するものである。
【０００６】
また、特許文献２には、モンゴメリ乗算剰余の多倍長演算を行う回路において、ブロック単位演算器における減算のための遅延時間を短縮し、更に減算回路を別途必要とせず、動作周波数を維持したままで演算を行うことを目的とした乗算装置が開示されている。
【０００７】
この乗算装置においては、ビットパターンで表された被乗数Ａと乗数Ｂの乗算を行う。このため、被乗数Ａから２次ブースアルゴリズムにおける複数の部分積を生成する部分積生成手段と、乗数Ｂを２次ブースアルゴリズムによりエンコードして、乗数Ｂの連続する３つのビットであるｂ２ｉ＋１、ｂ２ｉ、およびｂ２ｉ−１を指定するｉの値に応じた選択信号を出力するエンコーダ手段と、選択信号に応じて、複数の部分積のいずれかを選択して出力する選択手段と、選択手段から出力される、ｉの数と同じ数だけの部分積を加算して、乗算結果を生成する加算手段とを備える。そして、エンコーダ手段が、ｉが０のときには−Ａを表す部分積を選択するための選択信号を出力し、ｉが０以外のときには０を表す部分積を選択するための選択信号を出力し、加算手段が、該−Ａを表す部分積から被乗数Ａの２の補数を生成して、被乗数Ａの２の補数を乗算結果として出力するような動作モードを設ける。
【特許文献１】特開平６−４４２９１号公報
【特許文献２】特開２００４−２５８１４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に記載の離散コサイン変換器においては、高速に乗算を実施するために、大規模な乗算器を使用するため回路規模が大きいという問題点がある。また汎用的に処理させるために、特に画像の性質を利用するものではないため、演算精度が求められる場合には、その分だけ演算器も演算精度分だけ回路規模も大きくなり、消費電力増大につながる。特許文献２に記載の技術においても、同様に回路規模が大きく、消費電力が増大するという問題点がある。
【課題を解決するための手段】
【０００９】
本発明に係るフィルタ演算器は、入力データと複数のフィルタ係数からなるフィルタ係数群とをブースアルゴリズムを用いて積和演算するフィルタ演算器であって、入力データと隣接するフィルタ係数の差分との乗算を行う２つ以上の乗算ユニットと、隣接する前記乗算ユニットの乗算結果を加算する加算器とを備え、前記乗算ユニットは、ブースのアルゴリズムに従って繰り返し部分積を生成する部分積生成ユニットと、前記部分積生成ユニットの出力を累積加算する加算器とを有するものである。
【００１０】
本発明にかかる動き補償処理装置は、予測画像を生成する動き補償処理装置であって、垂直方向の入力データに対してフィルタ演算を行なう第１フィルタ演算部と、水平方向の入力データに応じてフィルタ演算を行なう第２フィルタ演算部と、前記第１及び第２フィルタ演算部の演算結果又は第１及び第２のフィルタ演算に入力する入力データに対して重み付けを行なう重み付け演算部とを有し、前記第１及び第２フィルタ演算部は、入力データと複数のフィルタ係数からなるフィルタ係数群とをブースアルゴリズムを用いて積和演算するフィルタ演算部であって、前記入力データと隣接するフィルタ係数の差分との乗算を行う２つ以上の乗算ユニットと、隣接する前記乗算ユニットの乗算結果を加算する加算器とを備え、前記乗算ユニットは、ブースのアルゴリズムに従って繰り返し部分積を生成する部分積生成ユニットと、前記部分積生成ユニットの出力を累積加算する加算器とを有するものである。
【００１１】
本発明においては、入力データと隣接するフィルタ係数の差分との乗算を行う。このため、隣接するフィルタ係数の差分が小さい場合、演算値を小さくすることができ、よって、回路規模、消費電力、処理速度を向上することができる。
【発明の効果】
【００１２】
本発明によれば、ハードウェア量及び消費電力を削減することができるブースアルゴリズムを利用したフィルタ演算器及び動き補償装置を提供することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。本実施の形態は、ブースアルゴリズムを利用したフィルタ演算器であって、画像の性質を利用し、隣接画素（現在のデータと１つ前のデータ）間の画素値の差分量が小さいことを利用して回路規模を削減する装置において、隣接画素間の差分を取る際に、ブースエンコーダがエンコードするビット単位で減算を行うことにより演算器の規模を飛躍的に小さくするものである。
【００１４】
先ず、本実施の形態にかかるフィルタ演算器を適用することができる画像復号装置について説明する。ここでは、一例として、Ｈ.２６４及びＶＣ−１における動き補償処理におけるフィルタ演算を実行するフィルタ演算器に適用した場合について説明する。なお、本発明は、Ｈ．２６４及びＶＣ−１の両規格におけるフィルタ演算が可能な動き補償回路について説明するが、Ｈ．２６４のみのフィルタ演算を行なう動き補償回路、ＶＣ−１のみのフィルタ演算を行なう動き補償回路、又はその他ＭＰＥＧ（Moving Picture Experts Group）２、４等のフィルタ演算器にも適用可能であることは勿論である。
【００１５】
先ず、Ｈ.２６４、ＶＣ−１の画像復号装置について説明する。図１及び図２は、それぞれＨ.２６４及びＶＣ−１に準拠して符号化された圧縮画像を復号する復号装置を示すブロック図である。Ｈ．２６４は、ＭＰＥＧ４  ＡＶＣ（Advanced Video Coding）とも呼ばれ、データ圧縮率は、ＭＰＥＧ−２の２倍以上、ＭＰＥＧ−４の１．５倍以上とすることができる圧縮符号化方式である。また、ＶＣ−１（Windows Media Video（ＷＭＶ）９）（登録商標）はマイクロソフト社が開発した動画圧縮技術であり、Ｈ．２６４と同程度のデータ圧縮率を有する。これらのアドバンスドコーデック（高圧縮コーデック）は、ＨＤ  ＤＶＤ（High Definition DVD）、又はブルーレイディスク等の次世代ＤＶＤ規格に適用される。
【００１６】
図１に示すように、Ｈ.２６４の画像復号装置１００は、可変長復号部１０２と、逆量子化部１０３と、逆アダマール変換部１０４と、加算器１０５と、デブロッキングフィルタ１０６と、動き補償部１１２と、重み付け予測部１１１と、画面内予測部１１０と、復号画像１０８を表示するモニタ１０９を有する。
【００１７】
可変長復号部１０２は、圧縮データ１０１が入力され可変長符号化された圧縮データを、変換テーブルに基づき可変長復号する。そして、可変長復号された復号データは、逆量子化部１０３にて逆量子化され、逆アダマール変換部１０４にて逆アダマール変換され加算器１０５へ送られる。加算器１０５の出力は、デブロッキングフィルタ１０６によりブロック歪を除去され、復号画像１０８とされ、モニタ１０９を介して表示される。
【００１８】
ここで、加算器１０５の出力が画面内予測部１１０にも入力され、予測画像１１３が生成される。また、復号画像が動き補償部１１２にて動き補償処理が行なわれ、重み付け予測部１１１にて重み付けされて予測画像１１３が生成される。加算器１０５は、Ｉフレーム処理の際には画面内予測部１１０からの予測画像１１３に予測誤差を加算し出力する。一方、Ｐ、Ｂフレーム処理の際には、切替部１０７にて切り替え、重み付け予測部１１１から送られる予測画像１１３に予測誤差を加算して出力する。
【００１９】
また、図２に示すように、ＶＣ−１の画像復号装置２００も、画像復号装置１００とほぼ同様に構成され、可変長復号部２０２、逆量子化部２０３、逆ＤＣＴ変換部２０４、加算器２０５、ループフィルタ２０６、重み付け予測部２０９、動き補償部２１０、及び復号画像２０７を表示するモニタ２０８を有する。ＶＣ−１の画像復号装置２００は、画面内予測を行なわない点、重み付け予測を行なってから動き補償処理を行う点、デブロッキングフィルタ１０６の代わりにループフィルタ２０６が使用される点が異なる。
【００２０】
図３は、Ｈ.２６４及びＶＣ−１の規格に準拠したフィルタ演算を含む動き補償処理を実行する動き補償（ＭＣ）部を示すブロック図である。この動き補償部３００は、Ｈ．２６４及びＶＣ−１のいずれの動き補償部でも使用可能な構成とされている。すなわち、両規格にて共有できる。この動き補償部３００は、フィルタ演算部３０２、３０３と、セレクタ３０１、３０４、３０７、３１０、３１３と、乗算器３１２、加算器３０６、３０８、３１１と、ラインメモリ３０９とを有する。
【００２１】
Ｈ．２６４では、フィルタ演算部３０２、３０３にてフィルタ演算施した後、上述した重み付け係数を使用してオフセット付き重み補間信号を求め、予測画像２１１を得る。ここで、入力ＩＮから入力された参照ピクチャＲ０の画素値が、フィルタ演算部３０２にて垂直方向フィルタによるフィルタ演算が実行され、フィルタ演算部３０３にて水平方向フィルタによるフィルタ演算が施される。そして、生成されたフィルタ演算済みのデータがラインメモリ３０９に格納される。次に、参照ピクチャＲ１の画素値が入力ＩＮから入力されると、同様に、フィルタ演算部３０２、３０３にてフィルタ演算が施され、フィルタ演算済みのデータに乗算器３０５にて重み係数を乗算し、加算器３０６にてオフセット値を加算する。一方、ラインメモリに格納されているデータがセレクタ３１３を介して乗算器３１２にて重み付き係数と乗算され、これらが加算器３０８にて加算され、オフセット付き重み補間信号Ｗ０Ｘ０＋Ｗ１Ｘ１＋Ｄを生成する。生成されたデータは、ラインメモリ３０９を経て出力ＯＵＴから出力される。
【００２２】
ＶＣ−１の場合は、入力ＩＮからのデータがセレクタ３１３、セレクタ３１０を介し、更にセレクタ３０４から乗算器３０５、加算器３０６を介し、そしてセレクタ３０１を介してフィルタ演算部３０２、３０３に入力される。フィルタ演算部３０３の結果は、セレクタ３０４、セレクタ３０７を介してそのままラインメモリ３０９へ格納され、出力ＯＵＴから出力される。乗算器３１２、加算器３１１、乗算器３０５、加算器３０６では、以下の重み付けが実行される。
Ｈ＝（ｉＳｃａｌｅ×Ｆ＋ｉＳｈｉｆｔ＋３２）＞＞６
ここで、Ｆは入力値、ｉＳｃａｌｅ、ｉＳｈｉｆｔは重み係数を示す。
【００２３】
このように構成された動き補償部３００は、セレクタ３０１、３０４、３０７、３１０、３１３にてフィルタ演算部３０２、３０３への入力、出力を適宜選択するため、重み付けをフィルタ演算後に実行するＨ．２６４であっても、重み付けをフィルタ演算前に実行するＶＣ−１であっても、いずれの演算にも適用可能である。
【００２４】
次に、このような動き補償部等に使用することができるフィルタ演算部について詳細に説明する。なお、上記においては、Ｈ．２６４やＶＣ−１を例にとって説明したが、本実施の形態にかかるフィルタ演算器は、ＭＰＥＧ４、２などにおけるフィルタ演算部としても使用することが可能である。図４は、フィルタ演算部３０２、３０３の詳細を示す図であって、本実施の形態にかかるフィルタ演算器を示すブロック図である。フィルタ演算部３０２、３０３は同様の構成のため、ここではフィルタ演算部３０２について説明する。図４に示すフィルタ演算器１は、フィルタ乗算ユニット１０ａ、１０ｂ、１０ｃ・・・を有する。なお、図４においては、フィルタ乗算ユニットを４つ示すが、４つに限らず、フィルタ乗算ユニットはフィルタ係数の個数に応じて適宜設けるものとする。下記表１は、Ｈ．２６４及びＶＣ−１における輝度信号Ｇｙ、色差信号Ｇｃに対するフィルタ係数を示す。
【００２５】
【表１】
0004881270.tif 000002
【００２６】
この表１に示すように、Ｈ．２６４は、輝度信号Ｇｙが６タップフィルタ、色差信号Ｇｃは２タップフィルタのフィルタ演算となる。また、ＶＣ−１の輝度信号Ｇｙが４タップフィルタ、色差信号Ｇｃは２タップフィルタのフィルタ演算となる。このため、図４に示に示すフィルタ演算器１は、例えば６個のフィルタ乗算ユニット１０ａ、１０ｂ、１０ｃ、・・・を有する。なお、フィルタ乗算ユニットを１つとして繰り返し演算を行なうようにしてもよい。フィルタ乗算ユニット１０ａ、１０ｂ、１０ｃ、・・・の各演算結果は加算器２３、セレクタ２４、レジスタ（Ｆａｄｄ＿ｄ）２５、加算器２６、及びレジスタ（Ｆｏｕｔ＿ａ）２７を介して出力される。フィルタ演算器１０ａ、１０ｂ、１０ｃ、・・・のうち、フィルタ演算器１０ｂ、１０ｃ・・・及びフィルタ乗算ユニット１０ａ、１０ｂ、１０ｃ・・・の後段は同じ構成を有する。
【００２７】
ここで、本実施の形態にかかるフィルタ演算器１は、フィルタ乗算ユニット１０ａ〜１０ｄにより、入力データと隣接するフィルタ係数の差分との乗算を行う。そして、加算器２３により、隣接するフィルタ乗算ユニットの乗算結果を加算する。フィルタ係数の差分が小さい場合は、差分を求めることで回路規模を削減することができる。さらに、このとき、フィルタ乗算ユニットでは、現在の画像データと１フレーム前の画像データとの差分をとることによりさらに演算量を低減し、これにより、演算時間を短縮化するものである。
【００２８】
ここで、本実施の形態にかかるフィルタ演算器は、ブースのアルゴリズムを使用して乗算を行うフィルタ演算器である。そこで、本実施の形態にかかるフィルタ演算器の理解を容易とするため、先ず、２次のブースアルゴリズムを利用した乗算器について説明する。
【００２９】
乗数Ｙを符号付き８ビット整数
Ｙ＝−ｙ[７]・２７＋ｙ[６]・２６＋ｙ[５]・２５＋ｙ[４]・２４＋ｙ[３]・２３＋ｙ[２]・２２＋ｙ[１]・２１＋ｙ[０]・２０
とすると、任意整数である被乗数Ｘとの積Ｐ＝Ｘ×Ｙは以下のようになる。
【００３０】
【数１】
0004881270.tif 000003
【００３１】
この（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を算出するものをブースエンコーダ、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉを部分積という。ここで、本明細書においては、ブースエンコーダにより求められるデコード値（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を符号データということとする。また、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉ（部分積）を生成する回路を部分積生成ユニット、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉのうち、符号データ（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を求める回路をブースエンコーダ、符号データ×被乗数からなる演算を行ない部分積を求める回路を乗算部、部分積のうち、×２２ｉの演算を実行する部分をビットシフト部、乗算部及びビットシフト部からなり、各ｉに対応した部分積を生成する回路を部分積生成部ということとする。
【００３２】
ここで、下記表２に示すように、符号データ（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）の値の組み合わせは８通りしかなく、０、±１、±２の値のみしかとらない。よって、乗算器は、０、±Ｘ、±２Ｘに２２ｉを乗算した値（部分積）を算出して加算する値の組み合わせの対応（真理値表）として書ける。また、符号データの値は８通りしかないため、ブースエンコーダは、単なる組み合わせ論理回路により得ることができる。
【００３３】
【表２】
0004881270.tif 000004
【００３４】
０、±Ｘ、±２Ｘのうち、２Ｘの生成は１ビットのシフトで行なうことができる。一方、負数の生成は被乗数Ｘが２の補数表現であるのでＸの各ビットを反転させ最下位ビットに１を加えればよい。これを実現するために、例えば、符号データ（−２・ｙ[２ｉ＋１]＋ｙ[２ｉ]＋ｙ[２ｉ-１]）を生成する回路（ブースエンコーダ）は、乗数Ｙの入力に対して部分積の絶対値（０、Ｘ、２Ｘ）を選択するための２つの信号と反転を選択するための１つの信号とからなる３つの信号を生成する。また、乗算部は、この３つの信号を受けて、絶対値が０の場合は０を、Ｘの場合は被乗数Ｘ を、２Ｘの場合は被乗数Ｘを１ビットシフトしたものを選択し、さらに、反転が必要な場合はその値を反転させて部分積を生成することができる。さらに、×２２ｉを実行するビットシフト部は、単純にビット線を２ｉだけシフトさせればよい。
【００３５】
図５は、このような２次のブースのアルゴリズムに従って乗算を実行する乗算器を示すブロック図である。乗算器４００は、被乗数Ｘを出力するレジスタＦ０と、乗数Ｙを出力するレジスタＦ７を有する。更に、乗数Ｙ及び被乗数Ｘが入力され部分積を生成する部分積生成ユニット４０１と、部分積生成ユニット４０１にて生成された部分積を加算する加算器４５０とを有する。部分積生成ユニット４０１は、４つのブースエンコーダ４１０、４２０、４３０、４４０及び４つの部分積生成部４５０、４６０、４７０、４８０を有する。
【００３６】
ブースエンコーダ４１０、４２０、４３０、４４０は、上述したように、乗数Ｙのうち所定ビットが入力され、ブースのアルゴリズムに従って符号データ（０、±１、±２）を生成する。
【００３７】
各部分積生成部４５０、４６０、４７０、４８０は、被乗数Ｘが入力され、ブースエンコーダにより得られた符号データと被乗数Ｘとの乗算結果を出力する乗算部と、乗算部の演算結果のビットシフトを行なうビットシフト部とから構成されるものとする。
【００３８】
各ブースエンコーダ４１０、４２０、４３０、４４０及び各部分積生成部４５０、４６０、４７０、４８０は、Ｘ×（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])×２２ｉの"ｉ"に対応したものとなっており、例えば乗数Ｙが８ビット（ｙ０〜ｙ７とする）であれば、ｉ＝０〜３であり、それぞれ（−２・ｙ１＋ｙ０＋０)、（−２・ｙ３＋ｙ２＋ｙ１）、（−２・ｙ５＋ｙ４＋ｙ３）、（−２・ｙ７＋ｙ６＋ｙ５)及びＸ×（−２・ｙ１＋ｙ０＋０)×２０、Ｘ×（−２・ｙ３＋ｙ２＋ｙ１）×２２、Ｘ×（−２・ｙ５＋ｙ４＋ｙ３）×２４、Ｘ×（−２・ｙ７＋ｙ６＋ｙ５)×２６を求める。図５においては、これらの部分積を求める部分積生成部を、それぞれ４５０、４６０、４７０、４８０としている。なお、本実施の形態においては、ブースエンコーダでデコードする乗数Ｙが８ビットを例にとって説明するが、これ未満、又は以上であってもよいことは勿論である。その場合は、部分積生成部の個数を適宜調整すればよい。
【００３９】
次に、実際の演算を例にとって、この乗算器４００の動作について説明する。８ビットの乗数Ｙは、図６（ａ）のように表すことができる。乗数を２ビットごとに区切り、各組と下位組の最上位ビットの計３ビット（ただしｙ−１＝０）のデータから符号データが得られる。これらに被乗数Ｘを乗算し、対応するビットシフト（×２ｉ）を演算することで部分積を生成することができる。このため、図６（ｂ）に示すように、レジスタＦ７は８ビットを出力するシフトレジスタからなり、乗数Ｙ｛ｙ０〜ｙ７｝を出力する。このときブースエンコーダ４１０には、乗数Ｙのうち下位２ビット{ｙ０、ｙ１}、ブースエンコーダ４２０、４３０、４４０にはそれぞれ、{ｙ１、ｙ２、ｙ３}、{ｙ３、ｙ４、ｙ５}、{ｙ５、ｙ６、ｙ７}を入力する。ブースエンコーダ４１０は、入力されたこれらの所定ビットから符号データを生成する。得られた符号データは、対応する部分積生成部４５０、４６０、４７０、４８０に入力される。部分積生成部４５０、４６０、４７０、４８０は、得られた符号データと被乗数Ｘとの乗算を行なうそれぞれ乗算部４５１、４６１、４７１．４８１と、乗算結果を所定ビットシフトするビットシフト部４５２、４６２、４７２、４８２とを有する。ここでは、被乗数Ｘ＝３５８（１６６Ｈ）、乗数Ｙ＝１２３（７ＢＨ）の乗算について説明する。下記表３は、演算工程における各出力値を示す。
【００４０】
【表３】
0004881270.tif 000005
【００４１】
Ｘ×Ｙ＝３５８×１２３＝４４０３４（ＡＣ０２Ｈ）
Ｙ＝１２３（７ＢＨ）
＝(−２・０＋１＋１)・２６
＋（−２・１＋１＋１）・２４
＋（−２・１＋０＋１）・２２
＋（−２・１＋１＋０）・２０
＝２・２６＋０・２４＋（−１）・２２＋（−１）・２０
よって、下記となる。
Ｘ×Ｙ＝{（２×３５８）×２６}    ・・・部分積生成部４５０にて演算
＋{（０×３５８）×２４}    ・・・部分積生成部４６０にて演算
＋{（−１×３５８）×２２}    ・・・部分積生成部４７０にて演算
＋{（−１×３５８）×２０}    ・・・部分積生成部４８０にて演算
【００４２】
先ず、被乗数入力部Ｆ０からは"３５８"が各部分積生成部４５０、４６０、４７０、４８０に入力される。乗数入力部Ｆ７からは、各ブースエンコーダ４１０、４２０、４３０、４４０に、それぞれ{ｙ０、ｙ１}＝{１、１}、{ｙ１、ｙ２、ｙ３}＝{１、０、１}、{ｙ３、ｙ４、ｙ５}＝{１、１、１}、{ｙ５、ｙ６、ｙ７}＝{１、１、０}が入力される。ブースエンコーダ４１０、４２０、４３０、４４０は入力された所定ビットから、それぞれ（−２・ｙ[２ｉ＋１}＋ｙ[２ｉ]＋ｙ[２ｉ-１])＝（−２・ｙ１＋ｙ０＋０)、（−２・ｙ３＋ｙ２＋ｙ１）、（−２・ｙ５＋ｙ４＋ｙ３）、（−２・ｙ７＋ｙ６＋ｙ５)の演算に対応する符号データを出力する。上記の式より本例では、各ブースエンコーダ４１０、４２０、４３０、４４０は、それぞれ、"−１"、"−１"、"０"、"２"を出力する。
【００４３】
各乗算部４５１、４６１、４７１、４８１は、上記符号データ×被乗数Ｘを演算して、それぞれビットシフト部４５２、４６２、４７２、４８２へ入力する。ビットシフト部４５２はそのまま加算器４９０へ出力する。なお、本例においては説明の明確のため、１ビットシフトのビットシフト部４５２を設けているが設ける必要はない。ビットシフト部４６２、４７２、４８２は、受け取った結果をそれぞれ２ビット、４ビット、６ビットシフトさせた後、加算器４５０へ入力する。
【００４４】
本例の加算器４９０は、全加算器（フルアダー）４９１、４９２と、半加算器（ハーフアダー）４９３と、結果を受け取るレジスタ４９４とを有する。各部分積生成部４５０、４６０、４７０、４８０から入力された値は、加算器４９０にて加算され、乗算結果Ｐとして出力される。
【００４５】
このように、２次のブースのアルゴリズムを使用すると、乗数を、０、±１、±２の符号データ×２２ｉとし、被乗数と演算を行なわせるので、部分積の個数が略半分となる。よって加算器にて加算する部分積の個数を略半減させることができるので、乗算器を小型化することができる。
【００４６】
このような部分積生成ユニットを使用するとフィルタ演算器は図７に示すような演算回路となる。図７は、従来の構成のフィルタ演算器を示す図である。すなわち上述したように、例えば８ビットであれば４つの部分積生成部を要し、例えば１０ビットであれば５つの部分積生成部を要する。なお、図７には簡単のため３つの部分積生成部のみを示している。
【００４７】
図７を簡単に説明すると、フィルタ演算器５０１はレジスタ（フリップフロップ：ＦＦ）５０２、５１０、５１２、５１４、５１７、ブースエンコーダ５０３〜５０５、部分積生成部５０６〜５０８、加算器５０９、５１３、５１５、リミッタ回路５１６を有する。画素データが乗数Ｙとして入力されＦＦ５０２に保持される。ＦＦ５０２から、各ビットに応じて設けられたブースエンコーダ５０３〜５０５へ値が入力され符号データを生成する。その符号データが対応する部分積生成部５０６〜５０８へ入力され部分積が生成される。加算器５０９はそれを加算し、上位ビットと下位ビットをそれぞれＦＦ５１０、５１２に入力される。加算器５１３はＦＦ５１０及びＦＦ５１２からの値を加算してＦＦ５１４に出力する。加算器５１５はＦＦ５１４からの値とフィルタ係数Ｂとを加算し、リミッタ回路５１６は加算器５１５の値を例えば０〜２５５の範囲に制限してＦＦ５１７へ出力する。
【００４８】
このフィルタ演算器は、
[出力画素]＝Ｌｉｍ（[入力画素]×Ａ＋Ｂ）
の演算を実行する。ここで、Ａはフィルタ係数を示す。Ｂは各フィルタ演算において必要に応じて加算される所定の定数である。従来のフィルタ演算器においては、外部のメモリ等から読み出したデータは、バースト的に読み出される。この際、通常、高速演算する場合は、大規模な乗算器によりパイプライン処理する方式になっている。このため、例えば入力画素データが１０ビットであれば部分積生成部が５つ必要となり、回路規模が大きく、よって消費電力も大きい。
【００４９】
そこで、本実施の形態においては、隣接するフィルタ係数の差分を取ることで、演算を簡素化する。これにより、回路規模削減、消費電力低減の効果が得られる。例えば、２次元ＤＣＴ符号化について考える。画像を水平・垂直方向ともＮ画素からなる小ブロック（Ｎ×Ｎ）に分割し、各ブロックに２次元ＤＣＴを施す場合について考える。このとき、Ｎの大きさは例えば８〜１６に設定される。２次元ＤＣＴ変換係数は下記式（２）で与えられる。
【００５０】
【数２】
0004881270.tif 000006
ここでＮは変換効率をあらわす次元であり、ＪＰＥＧ、ＭＰＥＧ等の画像処理では、通常Ｎ＝８が使用される。ｊ，ｋは、変数で０≦ｊ，ｋ≦Ｎ−１である。ｆ（ｊ，ｋ）は画像データ、Ｆ（ｕ，ｖ）は、画像データを変換された係数（変換係数）を示す。
【００５１】
上記式（２）は、Ｎ＝８とすると下記（３）となる。
【数３】
0004881270.tif 000007
【００５２】
ここで、係数ｃｏｓ（２ｊ＋１）ｕπ／１６に着目すると、ｊ＝０〜７、ｕ：整数より、
当該係数は下記の値をとる。
cos(0π/16)=-cos(16π/16)              =cos(32π/16)=…
cos( π/16)=-cos(15π/16)=-cos(17π/16)=cos(31π/16)=…
cos(2π/16)=-cos(14π/16)=-cos(18π/16)=cos(30π/16)=…
cos(3π/16)=-cos(13π/16)=-cos(19π/16)=cos(29π/16)=…
cos(4π/16)=-cos(12π/16)=-cos(20π/16)=cos(28π/16)=…
cos(5π/16)=-cos(11π/16)=-cos(21π/16)=cos(27π/16)=…
cos(6π/16)=-cos(10π/16)=-cos(22π/16)=cos(26π/16)=…
cos(7π/16)=-cos( 9π/16)=-cos(23π/16)=cos(25π/16)=…
cos(8π/16)              =-cos(24π/16)=cos(24π/16)=…
【００５３】
P0=cos(0π/16)=1
P1=cos( π/16)=0.49039…
P2=cos(2π/16)=0.46194…
P3=cos(3π/16)=0.41573…
P4=cos(4π/16)=0.35355…
P5=cos(5π/16)=0.27778…
P6=cos(6π/16)=0.19134…
P7=cos(7π/16)=0.09754…
P8=cos(8π/16)=0
【００５４】
P0=1
P1=  490393/1000000=0011 1110 1100…
P1-P0=28453/1000000=0000 0011 1010…
P2=  461940/1000000=0011 1011 0010…
P2-P1=46205/1000000=0000 0101 1111…
P3=  415735/1000000=0011 0101 0100…
P3-P2=62182/1000000=0000 0111 1111…
P4=  353553/1000000=0010 1101 0100…
P4-P3=75768/1000000=0000 1001 1100…
P5=  277785/1000000=0010 0011 1000…
P5-P4=86443/1000000=0000 1011 0001…
P6=  191342/1000000=0001 1000 0111…
P6-P5=93797/1000000=0000 1100 0000…
P7=   97545/1000000=0000 1100 0111…
P8=        0       =0000 0000 0000
【００５５】
このように、差をとった値（Ｐ１−Ｐ０、Ｐ２−Ｐ１、Ｐ３−Ｐ２、Ｐ４−Ｐ３、Ｐ５−Ｐ４、Ｐ６−Ｐ５）の方が、そのままの値（Ｐ０〜Ｐ７）と比べ、数値が小さい。この場合、例えば、Ｐ２の繰返し演算回数は、６回であるのに対し、Ｐ２−Ｐ１は、繰返し演算回数が４回となる。このように、被乗数であるフィルタ係数において、隣接するフィルタ係数の差分を求めることにより、部分積生成部１７にて乗算する被乗数の値が小さくなることから、演算の高速化及び消費電力の低減を実現することができる。
【００５６】
このため、図４に示すように、本実施の形態におけるフィルタ演算器のフィルタ乗算ユニット１０ａ、１０ｂ、１０ｃ・・・は、一のフィルタ乗算ユニットの演算結果を隣接するフィルタ乗算ユニットの演算結果に加算する回路を有する。すなわち、加算器２３、セレクタ２４、レジスタ２５、加算器２６、及びレジスタ２７を有する。
【００５７】
例えば、フィルタ乗算ユニット１０ａ〜１０ｄではそれぞれ、Ｐ０、Ｐ１−Ｐ０、Ｐ２−Ｐ１、Ｐ３−Ｐ２が演算されるとする。フィルタ乗算ユニット１０ｂの加算器２３により、Ｐ０＋（Ｐ１−Ｐ０）が実行され、Ｐ１が得られる。これがレジスタ２５からフィルタ乗算ユニット１０ｃに対応するセレクタ２４に入力され、加算器２３により、（Ｐ２−Ｐ１）＋Ｐ１＝Ｐ２が求められる。加算器２６は、必要に応じて係数Ｂを加算すると共に、レジスタ２７の値とレジスタ２５の値を加算し、レジスタ２８へ出力する。
【００５８】
以上のようにして、フィルタ演算において演算量を削減することができるが、本実施の形態においては、さらに、図７に示す部分積生成部５０６〜５０８を１つの部分積生成部とし、１つの部分積生成部を繰り返し使用することで回路規模を縮小し、消費電力を削減する。図４に戻って、本実施の形態にかかるフィルタ演算器１のフィルタ乗算ユニット１０ａ〜１０ｄは、レジスタ１１、セレクタ１２、減算器１３、レジスタ１４、選択器（ＭＵＸ）１８、ブースエンコーダ１６、部分積生成部１７、選択器（ＭＵＸ）１８、及び繰返し回数決定部１９を有する。なお、２つ目以降のフィルタ乗算ユニット１０ｂ、１０ｃ、１０ｄにおいては、レジスタ１１、セレクタ１２及び減算器１３を設けず省略することも可能である。
【００５９】
レジスタ１１は、前データと現のデータの差分をとるためにデータを保持する。なお、フィルタ演算器１は、差分を求めるため、最前段のフィルタ乗算ユニット１０ａの前段に、レジスタ１１ａ（Ｆｐ０）を有する。セレクタ１２及び減算器１３により、現データと前データとの差分をとる。レジスタ（Ｆｓ）１４は、この減算器１３の値を保持する。ＭＵＸ１５は、レジスタ１４の値から符号データを求めるビットを選択する。繰返し回数決定部１９は、レジスタ１４の値に基づき部分積生成部１７による乗算回数を決定する。ブースエンコーダ１６は、選択器１５が選択したビットから符号データを求める。部分積生成部１７は、符号データを上述したフィルタ係数の差分と乗算する。ＭＵＸ（ビットシフト部）１８は、乗算結果をビットシフトする。ＭＵＸ１５、ブースエンコーダ１６、部分積生成部１７、ビットシフト部１８及び繰返し回数決定部１９により、ブースのアルゴリズムに従って繰り返し部分積を生成する部分積生成ユニットを構成する。また、ＭＵＸ１５、ブースエンコーダ１６、部分積生成部１７及びビットシフト部１８により、減算器からの減算結果とフィルタ係数の差分とを乗算する部分積乗算部を構成する。
【００６０】
この他、繰返し回数を決定した後、繰返し回数をカウントアップするためのカウンタ、セレクタ、及びインクリメント等を有してもよい。さらに、フィルタ乗算ユニット１０ａ以外は、前データまでの累算結果と現部分乗算結果の出力を累積加算する加算器２０、０か加算器２０２加算結果を選択するセレクタ２１、セレクタ２１の選択結果を保持するレジスタ（Ｆａｄｄ）２２を有する。
【００６１】
このフィルタ演算器１は、通常外部メモリからのデータはバースト的に転送されてくるため、必ずしも常に連続にデータが入力されるとは限らない。また画像データは隣同士の画素同士には比較的相関関係があるため、画素同士の差分も比較的小さい。以上の特徴を利用することで、小規模な部分積生成部を使用し回路規模を大幅に削減させることができる。同時に前データとの差分が少ない場合にはほぼ連続的にデータを出力させ、例外的に差分が大きくなり乗算時間が伸びてもバーストデータ間に若干の時間があるため、それほどの性能劣化を伴わずに処理を可能にすることができる。更に、回路規模削減により消費電力を削減することも可能である。
【００６２】
以下、本実施の形態にかかるフィルタ演算器１について更に詳細に説明する。減算器１３は、入力される現在の画像データからＦＦ１１に保持されている１つ前の画像データを減算して差分データを求める。この理由について説明する。図８は、画像について水平方向の隣り合った画素間の差信号の振幅分布を示す図である（画像情報圧縮、テレビジョン学会偏、Ｐ７１）。横軸は振幅、縦軸は周波数を示す。差信号は０近傍の狭い範囲に集中する。よって、減算器１３により差信号を求めることで、０に近い値とすることができる。差分データとして入力を０に近い値とすることで、後述する繰り返し演算回数を最小限とすることができ、演算処理時間を短縮化することができる。この値はＦＦ１４に保持される。
【００６３】
次に、ＦＦ１４の値に基づき繰り返し回数決定部１９が部分積生成部１７における繰り返し演算回数を決定する。繰り返し回数決定部１９の繰り返し回数決定方法について説明する。図９は、１０ビットの画像データを示す模式図、図１０は繰り返し回数決定部１９の構成を示す図である。先ず、図９に示すように、画像データは、ｙ０〜ｙ９（ただし、ｙ９は符号ビット（Sign））の１０ビットとする。ここで、上述したように、ブースのアルゴリズムにおいては、画像データ（乗数Ｙ）を２ビットごとに区切り、各組と下位組の最上位ビットの計３ビットのデータ群（グループ）Ｓ０〜Ｓ４から符号データが得られる。ｙ０、ｙ１の組は、ｙ−１＝０としたビットを仮定してデータ群（グループ）Ｓ０とする。
【００６４】
１０ビットのデータは、例えば−１は（ｙ９ｙ８ｙ７ｙ６ｙ５ｙ４ｙ３ｙ２ｙ１ｙ０ｙ−１）＝(１１１１１１１１１１０)であり、−２は（１１１１１１１１１００）である。
【００６５】
符号データは、ｙ２ｉ−１＋ｙ２ｉ−２ｙ２ｉ＋１で求まるが、データ群を構成する３ビットが全て同じ符号、すなわち（１１１）又は（０００）であれば、符号データは"０"となる。すなわち、ブースデコーダ１６から出力される値が"０"となるため部分積は必ず"０"となり、演算する必要がない。本実施の形態においては、この符号データが"０"となるデータ群の演算を省くことで部分積生成部１７の繰り返し演算回数を削減するのである。
【００６６】
繰り返し回数の決定方法としては、以下に説明する方法がある。例えば、繰り返し回数は、１０ビットの並びに応じて決定するが、予め１０ビットの並びに応じた繰り返し回数が対応付けられたテーブルを用意し、図１０（ａ）に示すように、このテーブル４１を参照して繰り返し回数を出力する方法がある。
【００６７】
また、他の方法としては、上位ビットから符号を判定していき、符号の変化点を検出する方法がある。例えば、−１であれば、図９に示すように、上位ビットｙ９からｙ０までは全て１であり、ｙ−１で０となるため、変化点はデータ群Ｓ０に含まれる。この場合は、データ群Ｓ０の演算のみを行なえばよく、繰り返し回数は１回である。−２であれば、上位ビットｙ９からｙ１までは全て１であり、ｙ０で０となるため、変化点はデータ群Ｓ０に含まれる。この場合も、データ群Ｓ０の演算のみを行なえばよく、繰り返し回数は１回である。また、６５であれば、上位ビットｙ９からｙ７までは全て０であり、ｙ６で１となるため、変化点はデータ群Ｓ３に含まれる。この場合は、データ群Ｓ０からデータ群Ｓ３までの４グループの演算を行えばよく、繰り返し回数は４回である。
【００６８】
さらに他の方法として、同じく６５において、変化点が検出されてもさらに最下位ビットまで全ビットのサーチを続ける方法がある。この場合、さらにｙ６とｙ５の間に変化点があり、ｙ５からｙ１はまでは０である。そして、ｙ１とｙ０の間、ｙ０とｙ−１との間に変化点がある。この場合、変化点を含むデータ群は、データ群Ｓ３、Ｓ０のみである。よって繰り返し回数を２とすることができる。上述の場合は、変化点が発見された時点で繰り返し回数を決定するので早く繰り返し回数を決定することができる。一方、最上位ビットから最下位ビットまで全ビットをサーチして変化点を検出する方法であると、より繰り返し回数を減らすことができる。この場合、上位ビットから始めたが、最後まで変化点を検出する場合は下位ビットから検出してもよい。例えば−１２８であれば、ｙ−１からｙ６までは"０"であり、ｙ７からｙ９までは"１"であり、ｙ６とｙ７の間に変化点がある。この場合は、データ群Ｓ３のみの演算を行なえばよい。
【００６９】
さらにまた、他の方法としては、データ群毎に、データ群が（０００）又は（１１１）であるか否かを検出するようにしてもよい。理由は、２次のブースデコード結果を０にするためである。この場合は、上位ビット側からであっても下位ビット側からであっても、又は全ビット同時に行なうようにしてもよい。例えば１２７であれば、データ群Ｓ０、Ｓ３が演算対象であり繰り返し回数は２回である。２であれば、データ群Ｓ０のみが演算対象であり繰り返し回数は１である。また１であれば、データ群Ｓ０のみが演算対象であり繰り返し回数は１である。
【００７０】
図１０（ｂ）は、データ群毎に（０００）又は（１１１）であるか否かを検出する回路の一例を示す図である。１０ビットのデータをデータ群Ｓ０〜Ｓ４に分け、それぞれ判定部５１〜５５に入力し、（０００）又は（１１１）であるか否かを判定する。例えば、（０００）又は（１１１）であれば０を、そうでなければ１を出力する。テーブル５６は判定部５１〜５５の出力に応じて繰り返し回数を出力する。このとき、どのデータ群の演算を行なうかの情報（以下データ群情報という。）を一緒に出力する。
【００７１】
図１０（ｃ）は、変化点がどの位置にあるかを検出することで繰り返し回数を決定する具体的な回路の一例を示す図である。上位ビットからＦＦ６１に画像データを入力する。ＦＦ６１に保持された上位のビットと次に入力されるそれより下位のビットとを比較器６２で比較し、一致であれば例えば"０"、不一致であれば例えば"１"を出力する。カウンタ６３はダウンカウンタでありカウント値を９から０までカウントする。回数決定部６４は、"１"が入力されたときのカウンタ値に基づき、繰り返し回数をＭＵＸ１５、１８へ出力する。
【００７２】
以上のようにして、繰り返し回数決定部２２は、少なくとも繰り返し回数を出力する。また、全データ群について（０００）又は（１１１）であるか否かを検出するような場合は、繰り返し回数と、どのデータ群で演算が必要かを示すデータ群情報とをＭＵＸ１５、１８へ出力する。
【００７３】
ＭＵＸ１５は、繰り返し回数のみが入力される場合は、繰り返し回数に応じたデータ群をブースエンコーダ１６へ出力する。たとえば繰り返し回数が３の場合、先ず、（ｙ１，ｙ０，０）を入力し、次のタイミングで（ｙ３，ｙ２，ｙ１）を入力し、次のタイミングで（ｙ５，ｙ４，ｙ３）を入力する。
【００７４】
また、繰り返し回数とデータ群情報が入力される場合には、データ群情報に基づきデータ群をブースエンコーダ１６へ出力する。例えば上述の６５の場合であれば、データ群Ｓ０、及びＳ３にて変化点が検出される。この場合、最初のタイミングで（ｙ１，ｙ０，０）を入力し、次のタイミングで（ｙ７，ｙ６，ｙ５）を入力する。
【００７５】
ブースデコーダ１６及び部分積生成部１７は、上述した演算を行なう。すなわち、ブースデコーダ１６はデータ群から符号データを求め、部分積生成部１７が符号データにフィルタ係数の差分Ａを乗算する。乗算結果をビットシフト部１８へ出力する。
【００７６】
ビットシフト部１８にも、ＭＵＸ１５と同様に繰り返し回数が入力されている。したがって、繰り返し回数が１のときはビットシフトを行なわず（×１のため）そのまま出力する。繰り返し回数２のときは、２ビットシフト（×２２のため）し、出力する。同様に、繰り返し回数が３のときは４ビットシフト（×２４のため）、繰り返し回数が４のときは６ビットシフト（×２６のため）、繰り返し回数が５のときは８ビットシフト（×２８のため）して出力する。
【００７７】
また、ビットシフト部１８、ＭＵＸ１５に繰り返し回数及びデータ群情報が入力されている場合は、データ群情報に基づきビットシフトを行なう。例えば上述の６５の場合であれば、データ群Ｓ０の演算結果に対してはビットシフトせずに出力し、次のタイミングのデータ群Ｓ３の演算の際は、６ビットシフトした値を出力する。
【００７８】
フィルタ乗算ユニット１０ｂ、１０ｃ、１０ｄでは、加算器２０は、ビットシフト部１８からの出力と、レジスタ２２に保持されている前回出力した値とを累積加算し、繰り返し演算が終了するまで再度レジスタ２２に保存する。すなわち、レジスタ２２には、今回の入力データの差分と係数差分乗算結果が格納される。セレクタ２１は、初回の繰り返し演算の際には０を選択し、その他はレジスタ２２の値を選択出力する。この加算器２０は、各データ群Ｓ０〜Ｓ４から得られた部分積を加算することで、今回の画素データ差分×フィルタ係数の差分を得ることができる。
【００７９】
次に、加算器２３は、ビットシフト部１８又はレジスタ２２からの出力と、レジスタ２５に保持されている値とを加算する。まず、隣接するフィルタ乗算ユニットに対応するレジスタ２５の値がセレクタ２４に入力される。例えば、フィルタ乗算ユニット１０ｂに対応するレジスタ２５にはＰ１×入力データが格納されており、これがフィルタ乗算ユニット１０ｃに対応するセレクタ２４に入力される。当該セレクタ２４はこの値を選択してレジスタ２５に保持する。加算器２３からは、（Ｐ２−Ｐ１）×入力データが算出され出力される。このデータとレジスタ２５に格納されているＰ１×入力データとを加算することで、Ｐ２×入力データがセレクタ２４で選択され、レジスタ２５に格納される。このＰ２×入力データは、加算器２６に出力されると共に、隣接するフィルタ乗算ユニット１０ｄのセレクタ２３に入力される。以上により、被乗数Ａとしてフィルタ係数の差分を入力し、これを累積加算することで、レジスタ２５には、入力データ（レジスタＦｐ１１からの入力データ）×フィルタ係数差の乗算結果の累積加算結果が格納される。本実施の形態においては、フィルタ係数及び入力データのいずれも差分を求めてから演算することで、演算量を削減している。
【００８０】
加算器２６は、必要であれば係数Ｂを加算すると共に、レジスタ２５の値とレジスタ２７の値を加算する。これにより、レジスタ２８には、入力データとフィルタ係数の乗算結果が格納される。
【００８１】
次に、本実施の形態にかかるフィルタ演算器１の動作タイミングについて説明する。図１１は、本実施の形態にかかるフィルタ演算器、図１２は、フィルタ演算器１の動作タイミングを示す図である。図１１では、減算器１３及びレジスタ１１、１４、２２、２５、２７以外の構成は省略して示す。上述したように、フィルタ演算器１ｂは、２段目のフィルタ乗算ユニット以降のレジスタ１１及び減算器１３は省略することができる。すなわち、入力用のレジスタ１１は、図１２に示すように、Ｆｐ０、Ｆｐ１の２つだけでもよい。なお、この際、入力データ差分を保持するレジスタ１４から次段のレジスタ１４へ直接転送する経路が必要となる。これにより、従来法（特願２００６−３１３０３７）において必須であった入力データ用の縦続列に並んだフリップフロップ（レジスタ）を削減することができる。
【００８２】
Ｆｓ０〜Ｆｓ４は、フィルタ乗算ユニット１０ａ〜１０ｄのレジスタ１４に相当する。Ｆａｄｄ０〜Ｆａｄｄ３は、フィルタ乗算ユニット１０ａ〜１０ｄのレジスタ２２に相当する。Ｆａｄｄ＿ｄ０〜Ｆａｄｄ＿ｄ３は、フィルタ乗算ユニット１０ａ〜１０ｄのレジスタ２５に相当する。Ｆｏｕｔ＿ａ０〜Ｆｏｕｔ＿ａ３は、フィルタ乗算ユニット１０ａ〜１０ｄのレジスタ２８に相当する。
【００８３】
ここでは、フィルタ演算器１に入力データとして、２１、３２、１５、９が入力され、フィルタ係数４、１１、１７、９と乗算される場合について説明する。Ｆｐ０、Ｆｐ１には、２１、３２、１５、９が順次入力される。Ｆｓ０には、Ｆｐ１−Ｆｐ０が順次入力される。Ｆａｄｄ０は、Ｆｓ０に４を乗算した値が入力される。フィルタ乗算ユニット１０ａは、最前段のため、Ｆａｄｄ＿ｄ０、Ｆｏｕｔ＿ａ０には、Ｆａｄｄ０の値が入力される。一方、Ｆｓ１には、Ｆｐ２−Ｆｐ１が順次入力される。Ｆａｄｄ１は、Ｆｓ１に１１−４＝７を乗算した値が入力される。Ｆａｄｄ＿ｄ１には、Ｆａｄｄ＿ｄ０の値が入力され、次のタイミングで、この値とＦａｄｄ１の値とが加算された値が入力される。フィルタ乗算ユニット１０ｃ、１０ｄも同様である。
【００８４】
本実施の形態においては、フィルタ演算の際、フィルタ係数の差分を求め、この差分と入力データを乗算することで、繰返し演算の回数を減少させることができる。さらに、画像データは隣同士の画素同士には比較的相関関係があるため、画素同士の差分も比較的小さい。このことを利用し、入力画像データについて現在のデータと次のデータとの差分をとってフィルタ係数と乗算し、それを加算してフィルタ演算を行なう。このとき、差分をとった入力データは０近傍の値となるため、繰り返し回数を激減させることができる。また、通常外部メモリからのデータはバースト的に転送されてくるため、常に連続にデータが入力されない。すなわち、データ入力の待ち時間があるため、たとえ繰り返し演算が含まれても待ち時間の間に行なうことができる。
【００８５】
したがって、小規模な部分積生成部を使用し回路規模を大幅に削減させることができる。また、フィルタ係数の差分、前データとの差分が小さい場合にはほぼ連続的にデータを出力することができ、また、例外的に差分が大きくなり繰り返し演算回数が多くなってもデータ転送間の待ち時間を利用することで処理時間をそれほど長期化させることがない。更に、回路規模削減により消費電力を削減することができる。
【００８６】
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、上述の実施の形態では、ハードウェアの構成として説明したが、これに限定されるものではなく、任意の処理を、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、記録媒体に記録して提供することも可能であり、また、インターネットその他の伝送媒体を介して伝送することにより提供することも可能である。
【図面の簡単な説明】
【００８７】
【図１】Ｈ.２６４に準拠して符号化された圧縮画像を復号する復号装置を示すブロック図である。
【図２】ＶＣ−１に準拠して符号化された圧縮画像を復号する復号装置を示すブロック図である。
【図３】Ｈ.２６４及びＶＣ−１の規格に準拠したフィルタ演算を含む動き補償処理を実行する動き補償（ＭＣ）部を示すブロック図である。
【図４】本発明の実施の形態にかかるフィルタ演算器を示すブロック図である。
【図５】２次のブースのアルゴリズムに従って乗算を実行する乗算器を示すブロック図である。
【図６】（ａ）は、ブースのアルゴリズムにより符号データ生成に使用されるビットを説明する図、（ｂ）は、図１に示す乗算器の部分積生成ユニットの詳細を示す図である。
【図７】従来のフィルタ演算器を示す図である。
【図８】画像について水平方向の隣り合った画素間の差信号の振幅分布を示す図である。
【図９】１０ビットの画像データを示す模式図である。
【図１０】本発明の実施の形態にかかる符号データ生成部を示す図である。
【図１１】本発明の実施の形態の変形例にかかるフィルタ演算器を示す図である。
【図１２】本発明の実施の形態にかかるフィルタ演算器の動作タイミングを示す図である。
【図１３】特許文献１に記載の離散コサイン変換器を示す図である。
【符号の説明】
【００８８】
１  フィルタ演算器
１０ａ、１０ｂ、１０ｃ、１０ｄ  フィルタ乗算ユニット
１１、１４、２２、２５、２７、１８３、２３２、４５４  レジスタ
１２、２１、２４、１３２、１８４、３０１、３０７、３１０  セレクタ
１３、１８１、２３１  減算器
１５、１８、１３２  選択器
１６、１８２、２１８、４１１、４２１、４３１、４４１  ブースエンコーダ
１７、２２１、４１０、４２０、４３０、４４０  部分積生成部
１９、２２０  繰返し回数決定部
２０、２３、２６、１０５、２０５、２２５、３１１、４５０  加算器
２６  加算器
２２６  リミッタ回路
１００、２００  画像復号装置
１０１  圧縮データ
１０２、２０２  可変長復号部
１０３、２０３  逆量子化部
１０４  逆アダマール変換部
１０６  デブロッキングフィルタ
１０７  切替部
１０８、２０７  復号画像
１０９、２０８  モニタ
１１０  画面内予測部
１１１、２０９  重み付け予測部
１１２、２１０３００  動き補償部
１１３  予測画像
２０４  逆ＤＣＴ変換部
２０６  ループフィルタ
２０１、３０２、３０３  フィルタ演算部
２２２  累算加算器
３０４、３０５、３１２、４１２、４２２、４３２、４４２  乗算器
３０９  ラインメモリ
４０１  部分積生成ユニット
４１３、４２３、４３３、４４３  ビットシフト部
【図１】
0004881270.tif 000008
【図２】
0004881270.tif 000009
【図３】
0004881270.tif 000010
【図４】
0004881270.tif 000011
【図５】
0004881270.tif 000012
【図６】
0004881270.tif 000013
【図７】
0004881270.tif 000014
【図８】
0004881270.tif 000015
【図９】
0004881270.tif 000016
【図１０】
0004881270.tif 000017
【図１１】
0004881270.tif 000018
【図１２】
0004881270.tif 000019
【図１３】
0004881270.tif 000020