(57)【特許請求の範囲】
【請求項１】
離散コサイン変換あるいは逆離散コサイン変換を行う離散コサイン変換器において、入力データの各同一ビット位置のビットからなる複数のビット列であって、同時に入力される複数のビット列をそれぞれ構成要素とする、複数の部分和を同時に生成する部分和生成手段を有することを特徴とする離散コサイン変換器。
【請求項２】
前記部分和生成手段が、入力データのビット数と同数のメモリを有し、該メモリは入力データの所定のビット位置のビットからなるビット列を同時入力し、そのビット列を構成要素とする部分和を出力することを特徴とする請求項１に記載の離散コサイン変換器。
【請求項３】
離散コサイン変換あるいは逆離散コサイン変換を行う離散コサイン変換器において、入力データの各同一ビット位置のビットからなる複数のビット列をそれぞれ構成要素とする、複数の部分和を同時に生成する部分和生成手段を有し、
前記部分和生成手段が、複数の部分和を出力するメモリと、入力データのビット数と同数の部分和選択手段を有し、該部分和選択手段は入力データの所定のビット位置のビットからなるビット列を入力し、そのビット列を構成要素とする部分和を、前記複数の部分和の中から選択して出力することを特徴とする離散コサイン変換器。
【請求項４】
離散コサイン変換あるいは逆離散コサイン変換を行う離散コサイン変換器において、各入力データの各連続したビット位置のビットからなる複数のビット列であって、同時に入力される複数のビット列をそれぞれ構成要素とする、複数の部分和を同時に生成する部分和生成手段を有することを特徴とする離散コサイン変換器。
【請求項５】
前記部分和生成手段は、全ての部分和をビット位置に応じてシフトさせて加算することを特徴とする請求項１から４のいずれかに記載の離散コサイン変換器。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、画像データの圧縮装置などにおいては離散コサイン変換を行い、画像データの伸長装置などにおいては逆離散コサイン変換を行う、離散コサイン変換器に関するものである。
【０００２】
【従来の技術】
画像信号はデータ量が多いため、データ量を圧縮して送信または記録を行い、受信または再生の際に元のデータ量に伸長することが多い。一般に、画像データは低周波成分が多く、高周波成分が少ないので、低周波成分を細かく量子化し、高周波成分を粗く量子化するが、そのためには画像データを周波数成分に変換する必要がある。画像データを周波数成分に変換する手法としては、離散コサイン変換（Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎ：以下、ＤＣＴと表現する）が用いられ、その逆の変換を行う手法としては、逆離散コサイン変換（Ｉｎｖｅｒｓｅ  Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎ：以下、ＩＤＣＴと表現する）が用いられる。
【０００３】
そして、一般に、画像データは縦８×横８の画素単位で処理されることが多く、８×８の２次元ＤＣＴ及び８×８の２次元ＩＤＣＴが必要となる。しかし、２次元ＤＣＴや２次元ＩＤＣＴを直接回路化しようとすると回路規模が非常に大きくなるため、通常は、１次元ＤＣＴや１次元ＩＤＣＴを画像の縦方向及び横方向にそれぞれ１回ずつ行うことで、２次元ＤＣＴや２次元ＩＤＣＴを実現している。
【０００４】
以下に、１次元ＤＣＴ及び１次元ＩＤＣＴについて説明する。８個の入力信号をＸｊ（ｊ＝０〜７）とすると、ＤＣＴの変換式は、次に示す（数１）で表される。
【０００５】
【数１】
0003547567.tif 000002
0003547567.tif 000003
この変換式で得られる８個のＹｉ（Ｉ＝０から７）はＤＣＴ係数と呼ばれる。
【０００６】
そして、（数１）の変換式は、行列式を用いると、次に示す（数２）のように表される。
【０００７】
【数２】
0003547567.tif 000004
尚、Ｃｋ（ｋ＝１〜７）はｃｏｓ（ｋπ／１６）を表す。
【０００８】
また、（数２）より、次に示す（数３）及び（数４）が導き出される。
【０００９】
【数３】
0003547567.tif 000005
【００１０】
【数４】
0003547567.tif 000006
【００１１】
一方、１次元ＤＣＴと逆の変換を行う１次元ＩＤＣＴの変換式は、次に示す（数５）で表される。
【００１２】
【数５】
0003547567.tif 000007
0003547567.tif 000008
【００１３】
そして、（数５）の変換式は、行列式を用いると、次に示す（数６）のように表される。
【００１４】
【数６】
0003547567.tif 000009
【００１５】
また、（数６）より、次に示す（数７）、（数８）が導き出される。
【００１６】
【数７】
0003547567.tif 000010
【００１７】
【数８】
0003547567.tif 000011
【００１８】
以上に示したＤＣＴ、ＩＤＣＴの変換式のうち、実際にＤＣＴ、ＩＤＣＴを行う際には、一般に、乗算の回数を減らすために、それぞれ（数２）、（数６）に示す８×８の行列演算式ではなく、（数３）及び（数４）、（数７）及び（数８）に示す４×４の行列演算式を用いる。
【００１９】
次に、行列演算を構成する積和演算を行うには、乗算器と加算器で構成される積和演算器を用いることが多いが、乗算器の回路規模が大きくなるため、乗算器の代わりにメモリを用いて積和演算を行う手法も提案されている。このメモリと加算器を用いて積和演算を行う手法の１つとしては、例えば、Ａ．Ｐｅｌｅｄ  ａｎｄ  Ｂ．Ｌｉｕ，“Ａ  Ｎｅｗ  Ｈａｒｄｗａｒｅ  Ｒｅａｌｉｚａｔｉｏｎ  ｏｆ  Ｄｉｇｉｔａｌ  Ｆｉｌｔｅｒｓ”，ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ａｃｏｕｓｔｉｃｓ，Ｓｐｅｅｃｈ，ａｎｄ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｉｎｇ，ｖｏｌ．ＡＳＳＰ−２２，ｐｐ．４５６〜４６２，Ｄｅｃ．１９７４に記載されている、分散算術（Ｄｉｓｔｒｉｂｕｔｅｄ  Ａｒｉｔｈｍｅｔｉｃ）方式が知られている。
【００２０】
以下に、分散算術方式についての説明を行う。まず、次に示す（数９）の変数Ｘｊ（ｊ＝０〜Ｍ−１）と固定係数Ｃｊ（ｊ＝０〜Ｍ−１）との積和演算式について考える。
【００２１】
【数９】
0003547567.tif 000012
【００２２】
ここで、ＸｊをＮビットの２の補数で表現すると、Ｘｊは次に示す（数１０）のようになる。
【００２３】
【数１０】
0003547567.tif 000013
ただし、Ｘｊ（ｋ）はＸｊのビット位置ｋ（最上位のｋ個下の位）のビットを表し、０または１である。
【００２４】
（数１０）より、（数９）は次に示す（数１１）のようになる。
【００２５】
【数１１】
0003547567.tif 000014
【００２６】
ここで、部分和Ｚｋを次に示す（数１２）のように定義すると、（数１１）は次に示す（数１３）となる。
【００２７】
【数１２】
0003547567.tif 000015
【００２８】
【数１３】
0003547567.tif 000016
【００２９】
以上のように、変数Ｘｊ（ｊ＝０〜Ｍ−１）と固定係数Ｃｊ（ｊ＝０〜Ｍ−１）との積和演算結果Ｙは（数１３）で得られるわけであるが、（数１２）で定義した部分和Ｚｋについて着目してみると、その構成要素はＣｊ（ｊ＝０〜Ｍ−１）と、Ｘｊ（ｋ）（ｊ＝０〜Ｍ−１）、つまり、変数Ｘｊ（ｊ＝０〜Ｍ−１）のビット位置ｋのビットからなるＭビットのビット列（Ｘ０（ｋ）Ｘ１（ｋ）Ｘ２（ｋ）・・・ＸＭ−１（ｋ））（以下、Ｍビット列Ｘｊ（ｋ）（ｊ＝０〜Ｍ−１）と表現する）とであり、Ｃｊは固定係数であるので、部分和Ｚｋは、Ｍビット列Ｘｊ（ｋ）（ｊ＝０〜Ｍ−１）の関数である。そこで、ビット列Ｘｊ（ｋ）（ｊ＝０〜Ｍ−１）をアドレスとしてアクセスすれば（入力すれば）、そのビット列に対応した部分和Ｚｋを読み出す（出力する）ことができるように、部分和Ｚｋの取り得る値をメモリに予め記憶させておき、そして、メモリから読み出される部分和Ｚｋを、その構成要素であるビット列をなすビットのビット位置ｋに応じて（数１３）に示すようにシフトして加算するようにしておけば、積和演算を行うことができる。
【００３０】
このような分散算術方式を用いた１次元ＤＣＴ回路（離散コサイン変換器）のブロック図を図１１に示す。この回路は入力されたＸｊ（ｊ＝０〜７）に対して、（数３）及び（数４）に示した行列演算を構成する８個の積和演算を、それぞれ分散算術方式を用いて行い、ＤＣＴ係数Ｙｉ（ｉ＝０〜７）を出力するように構成されている。尚、Ｘｊ（ｊ＝０〜７）、Ｙｉ（ｉ＝０〜７）はともに９ビットのデータとする。
【００３１】
以下に、この回路の動作について説明する。入力端子４０１から入力された８個のデータＸ０〜Ｘ７は、入力順にレジスタ４０２〜４０９へ順次転送され、それぞれレジスタ４０９〜４０２に保持される。レジスタ４０９〜４０２のそれぞれの出力Ｘ０〜Ｘ７は加算器／差分器４１０で加算あるいは減算されて、加算結果Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４がそれぞれレジスタ４１１〜４１４に保持され、差分結果Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４がそれぞれレジスタ４１５〜４１８に保持される。尚、入力Ｘｊ（ｊ＝０〜７）が９ビットのデータであるので、加算結果Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４、及び、差分結果Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４はそれぞれ１０ビットのデータとなる。
【００３２】
次に、レジスタ４１１〜４１４のそれぞれの出力Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４を入力するビット分配器４１９と、レジスタ４１５〜４１８のそれぞれの出力Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４を入力するビット分配器４２０との動作について、これらの構成を示す図１２を用いて説明する。ビット分配器４１９において、レジスタ４１１〜４１４の出力は、それぞれ最上位ビットから最下位ビットまでの１０本の信号線（最上位［９］〜最下位［０］）に分けられ、同一ビット位置の４本の信号線が組み合わされた４ビットの信号線が１０組構成されて、セレクタ４７９に入力される。そして、セレクタ４７９にて、１０組の４ビットの信号線は最上位ビットの組のものから順に選択されて、つまり、信号線［９］、［８］、・・・、［０］の順に４ビットの信号線が積和演算ブロック４２１〜４２４に出力される。同様に、ビット分配器４２０においても、レジスタ４１５〜４１８の出力に基づいて４ビットの信号線が１０組構成され、信号線［９］、［８］、・・・、［０］の順に４ビットの信号線が積和演算ブロック４２５〜４２８に出力される。
【００３３】
まとめると、ビット分配器４１９からは、レジスタ１１１〜１１４のそれぞれの出力であるＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が、最上位ビットからなるものから順に積和演算ブロック４２１〜４２４に出力されることになる。同様に、ビット分配器４２０からは、レジスタ１１５〜１１８のそれぞれの出力であるＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が、最上位ビットからなるものから順に積和演算ブロック４２５〜４２８に出力される。
【００３４】
次に、積和演算ブロック４２１〜４２４はビット分配器４１９から１０組の４ビット列を順次入力して、（数３）に示した行列演算を構成する４個の積和演算を行い、それぞれＹ０、Ｙ２、Ｙ４、Ｙ６を計算し、積和演算ブロック４２５〜４２８はビット分配器４２０から１０組の４ビット列を順次入力して、（数４）に示した行列演算を構成する４個の積和演算を行い、それぞれＹ１、Ｙ３、Ｙ５、Ｙ７を計算するが、これらの動作について、積和演算ブロック４２１がＹ０を計算する動作を例にとって説明を行う。
【００３５】
積和演算ブロック４２１に設けられたＲＯＭ４２９は、図１３に示すように、入力する４ビット列が、（００００）であるときは０を、（０００１）であるときはＣ４を、・・・、（１１１１）であるときは４Ｃ４を、それぞれ出力するようになっており、これにより、Ｙ０＝｛Ｃ４（Ｘ０＋Ｘ７）＋Ｃ４（Ｘ１＋Ｘ６）＋Ｃ４（Ｘ２＋Ｘ５）＋Ｃ４（Ｘ３＋Ｘ４）｝／２であることからして、入力する４ビット列がＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の同一ビット位置のビットからなるものであれば、Ｙ０の部分和を出力することになる。また、積和演算ブロック４２１において、図示はしていないが、１０個おきの入力に対するＲＯＭ４２９の出力極性が反転するようになっており、最上位ビットからなる４ビット列を構成要素とする部分和がマイナスであることに対応している。以下の説明は、このようにＲＯＭ４２９が構成されていることを前提として行うものとする。
【００３６】
まず、ビット分配器４１９からのＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の最上位ビットからなる４ビット列がＲＯＭ４２９に入力され、これにより、ＲＯＭ４２９からは、最上位ビットからなる４ビット列を構成要素とするＹ０の部分和が出力されることになる。そして、ＲＯＭ４２９の出力は加算器４３７に入力され、シフタ４５３の初期出力値０と加算されて、レジスタ４４５に保持される。つまり、この段階では、最上位ビットからなる４ビット列を構成要素とするＹ０の部分和がレジスタ４４５に保持されていることになる。
【００３７】
次に、ビット分配器４１９からのＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４のビット位置１のビットからなる４ビット列がＲＯＭ４２９に入力され、これにより、ＲＯＭ４２９からは、ビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和が出力されることになる。そして、ＲＯＭ４２９の出力は加算器４３７に入力され、シフタ４５３にて１ビット上にシフトされて加算器４３７に入力される、レジスタ４４５に保持されているデータと加算され、その加算結果がレジスタ４４５に保持される。つまり、この段階では、最上位ビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトしている）とビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果がレジスタ４４５に保持されていることになる。
【００３８】
以降は、ビット分配器４１９からのＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４のビット位置２のビットからなる４ビット列、ビット位置３のビットからなる４ビット列、・・・、最下位ビット（ビット位置９のビット）からなる４ビット列の順でＲＯＭ４２９に入力されるが、その都度、上述したように、ＲＯＭ４２９の出力が加算器４３７にてレジスタ４４５に保持されているデータ（シフタ４５３により１ビット上にシフトされる）と加算され、その加算結果がレジスタ４４５に保持される。
【００３９】
そして、ビット分配器４１９からＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が、最上位ビットからなるものから順に積和演算ブロック４２１に全て入力され、上述した動作が終了すると、レジスタ４４５に保持されているデータは、丸め回路４６１で９ビットに丸められ、レジスタ４６９に保持された後、積和演算ブロック４２１から出力される。
【００４０】
ところで、ビット分配器４１９からＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が積和演算ブロック４２１に全て入力され、上述した動作が終了したときには、上述した動作内容及び（数１３）からして、レジスタ４４５に保持されているデータはＹ０であり、積和演算ブロック４２１からはＹ０が出力されることになる。
【００４１】
また、積和演算ブロック４２２〜４２４においても、それぞれが有するＲＯＭ４３０〜４３２の入出力関係が図１３に示すようになっているとともに、積和演算ブロック４２１と同様の動作を行うので、ビット分配器４１９からＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が最上位ビットからなるものから順に入力され、それぞれＹ２、Ｙ４、Ｙ６が出力されることになる。
【００４２】
また、積和演算ブロック４２５〜４２８においても、それぞれが有するＲＯＭ４３３〜４３６の入出力関係が図１３に示すようになっているとともに、積和演算ブロック４２１と同様の動作を行うので、ビット分配器４２０からＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が最上位ビットからなるものから順に入力され、それぞれＹ１、Ｙ３、Ｙ５、Ｙ７が出力されることになる。
【００４３】
尚、（数３）及び（数４）に示した行列の各係数を１０ビットとしており、これに伴って、ＲＯＭ４２９〜４３６の出力のビット数は１２、加算器４３７〜４４４、レジスタ４４５〜４５２、シフタ４５３〜４６０のそれぞれの出力のビット数は２１となる。
【００４４】
最後に、積和演算ブロック４２１〜４２８がそれぞれ出力するＹ０、Ｙ２、Ｙ４、Ｙ６、Ｙ１、Ｙ３、Ｙ５、Ｙ７は、出力セレクタ４７７に入力され、所定の順に選択されて、順次出力端子４７８から出力され、１次元ＤＣＴが完了する。
【００４５】
ここで、当該１次元ＤＣＴ回路においては、入力端子４０１からＸｊ（ｊ＝０〜７）が順に８ステップで入力されるのに対し、積和演算ブロック４２１〜４２８でのＹ０〜Ｙ７の演算には、Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４、及び、Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４のビット数と同数の１０ステップを要し、入力時間よりも演算時間の方が長くなっている、つまり、当該ＤＣＴ回路はリアルタイムで演算を行うことができない。したがって、当該ＤＣＴ回路に入力端子４０１から絶え間なく入力を行うと、演算が間に合わなくなるので、入力端子４０１から絶え間なく入力を行うことができず、ひいては、画像圧縮を効率的に行うことができないという問題につながる。
【００４６】
そこで、この問題を解決するため、例えば、Ｓ．Ｕｒａｍｏｔｏ  ｅｔ  ａｌ．，“Ａ  １００−ＭＨｚ  ２−Ｄ  Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍ  Ｃｏｒｅ  Ｐｒｏｃｅｓｓｏｒ”，ＩＥＥＥ  Ｊｏｕｒｎａｌ  ｏｆ  Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｃｉｒｃｕｉｔｓ，ｖｏｌ．２７，Ｎｏ．４，ｐｐ．４９２〜４９９，Ａｐｒ．１９９２に記載されているように、入力データの各同一ビット位置のビットからなる複数の４ビット列を２組ずつ同時に処理する手法が提案されている。
【００４７】
この手法を用いた１次元ＤＣＴ回路（離散コサイン変換器）のブロック図を図１４に示す。この回路は入力されたＸｊ（ｊ＝０〜７）に対して、（数３）及び（数４）に示した行列演算を分散算術方式を用いて行い、ＤＣＴ係数Ｙｉ（ｉ＝０〜７）を出力するように構成されている。尚、Ｘｊ（ｊ＝０〜７）、Ｙｉ（ｉ＝０〜７）はともに９ビットのデータとする。
【００４８】
以下に、この回路の動作について説明する。入力端子５０１から入力された８個のデータＸ０〜Ｘ７は、入力順にレジスタ５０２〜５０９へ順次転送され、それぞれレジスタ５０９〜５０２に保持される。レジスタ５０９〜５０２のそれぞれの出力Ｘ０〜Ｘ７は加算器／差分器５１０で加算あるいは減算されて、加算結果Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４がそれぞれレジスタ５１１〜５１４に保持され、差分結果Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４がそれぞれレジスタ５１５〜５１８に保持される。尚、入力Ｘｊ（ｊ＝０〜７）が９ビットのデータであるので、加算結果Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４、及び、差分結果Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４はそれぞれ１０ビットのデータとなる。
【００４９】
次に、レジスタ５１１〜５１４のそれぞれの出力Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４を入力するビット分配器５１９と、レジスタ５１５〜５１８のそれぞれの出力Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４を入力するビット分配器５２０との動作について、これらの構成を示す図１５を用いて説明する。ビット分配器５１９において、レジスタ５１１〜５１４のそれぞれの出力は、それぞれ最上位ビットから最下位ビットまでの１０本の信号線（最上位［９］〜最下位［０］）に分けられ、同一ビット位置の４本の信号線が組み合わされた４ビットの信号線が１０組構成されて、このうち、信号線［９］、［７］、［５］、［３］、［１］の５組の４ビットの信号線がセレクタ６０３に入力され、信号線［８］、［６］、［４］、［２］、［０］の５組の４ビットの信号線がセレクタ６０４に入力される。そして、セレクタ６０３、６０４にて、５組の４ビットの信号線は上位ビットの組のものから順に選択されて、つまり、信号線［９］と［８］、［７］と［６］、［５］と［４］、［３］と［２］、［１］と［０］の順に２組の４ビットの信号線が同時に積和演算ブロック５２１〜５２４に出力されることになる。同様に、ビット分配器５２０においても、レジスタ５１５〜５１８の出力に基づいて４ビットの信号線が１０組構成され、信号線［９］と［８］、［７］と［６］、［５］と［４］、［３］と［２］、［１］と［０］の順に２組の４ビットの信号線が同時に積和演算ブロック５２５〜５２８に出力されることになる。
【００５０】
まとめると、ビット分配器５１９からは、レジスタ５１１〜５１４の出力である４個のデータＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が、最上位ビットからなるものから順に２組ずつ積和演算ブロック５２１〜５２４に出力されることになる。同様に、ビット分配器５２０からは、レジスタ５１５〜５１８の出力である４個のデータＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が、最上位ビットからなるものから順に２組ずつ積和演算ブロック５２５〜５２８に出力されることになる。
【００５１】
次に、積和演算ブロック５２１〜５２４は、ビット分配器５１９から１０組の４ビット列を２組ずつ順次入力して、（数３）に示した行列演算を構成する４個の積和演算を行い、それぞれＹ０、Ｙ２、Ｙ４、Ｙ６を計算し、積和演算ブロック５２５〜５２８は、ビット分配器５２０から１０組の４ビット列を２組ずつ順次入力して、（数４）に示した行列演算を構成する４個の積和演算を行い、それぞれＹ１、Ｙ３、Ｙ５、Ｙ７を計算するが、これらの動作について、積和演算ブロック５２１がＹ０を計算する動作を例にとって説明を行う。
【００５２】
積和演算ブロック５２１に設けられたＲＯＭ５２９、５３０は、図１３に示すように、入力する４ビット列が、（００００）であるときは０を、（０００１）であるときはＣ４を、・・・、（１１１１）であるときは４Ｃ４を、それぞれ出力するようになっており、これにより、Ｙ０＝｛Ｃ４（Ｘ０＋Ｘ７）＋Ｃ４（Ｘ１＋Ｘ６）＋Ｃ４（Ｘ２＋Ｘ５）＋Ｃ４（Ｘ３＋Ｘ４）｝／２であることからして、入力する４ビット列がＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の同一ビット位置のビットからなるものであれば、Ｙ０の部分和を出力することになる。また、積和演算ブロック５２１において、図示はしていないが、５個おきの入力に対する上側のＲＯＭ（ＲＯＭ５２９）の出力極性が反転するようになっており、最上位ビットからなる４ビット列を構成要素とする部分和がマイナスであることに対応している。以下の説明は、このようにＲＯＭ５２９、５３０が構成されていることを前提として行うものとする。
【００５３】
まず、ビット分配器５１９からのＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の最上位ビットからなる４ビット列、ビット位置１のビットからなる４ビット列がそれぞれＲＯＭ５２９、５３０に入力され、これにより、ＲＯＭ５２９からは最上位ビットからなる４ビット列を構成要素とするＹ０の部分和が出力され、ＲＯＭ５３０からはビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和が出力されることになる。そして、ＲＯＭ５２９、５３０の２つの出力は、ＲＯＭ５２９の出力がシフタ５４５で１ビット上にシフトされた後、加算器５５３にて加算される。この加算結果は加算器５６１でシフタ５７７の初期出力値０と加算され、その加算結果がレジスタ５６９に保持される。つまり、この段階では、最上位ビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトしている）と、ビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果がレジスタ５６９に保持されていることになる。
【００５４】
次に、ビット分配器５１９からのＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４のビット位置２のビットからなる４ビット列、ビット位置３のビットからなる４ビット列がそれぞれＲＯＭ５２９、５３０に入力され、これにより、ＲＯＭ５２９からはビット位置２のビットからなる４ビット列を構成要素とするＹ０の部分和が出力され、ＲＯＭ５３０からはビット位置３のビットからなる４ビット列を構成要素とするＹ０の部分和が出力されることになる。そして、ＲＯＭ５２９、５３０の２つの出力は、ＲＯＭ５２９の出力がシフタ５４５で１ビット上にシフトされた後、加算器５５３にて加算される。この加算結果は加算器５６１でシフタ５７７にて２ビット上にシフトされた、レジスタ５６９に保持されているデータと加算され、その加算結果がレジスタ５６９に保持される。つまり、この段階では、最上位ビットからなる４ビット列を構成要素とするＹ０の部分和（３ビット上にシフトしている）と、ビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和（２ビット上にシフトしている）と、ビット位置２のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトしている）と、ビット位置３のビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果がレジスタ５６９に保持されていることになる。
【００５５】
以降は、ビット分配器５１９からのＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４のビット位置４のビットからなる４ビット列、ビット位置５のビットからなる４ビット列が、その次に、ビット位置６のビットからなる４ビット列、ビット位置７のビットからなる４ビット列が、その次に、ビット位置８のビットからなる４ビット列、最下位ビット（ビット位置９のビット）からなる４ビット列が、という順でそれぞれＲＯＭ５２９、５３０に入力されるが、その都度、上述したように、ＲＯＭ５２９の出力（シフタ５４５により１ビット上にシフトされる）とＲＯＭ５３０の出力とが加算器５５３にて加算され、その加算結果がレジスタ５６９に保持されているデータ（シフタ５７７により２ビット上にシフトされる）と加算器５６１にて加算され、その加算結果がレジスタ５６９に保持される。
【００５６】
そして、ビット分配器５１９からＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が、最上位ビットからなるものから順に２組ずつ積和演算ブロック５２１に全て入力され、上述した動作が終了すると、レジスタ５６９に保持されているデータは、丸め回路５８５で９ビットに丸められ、レジスタ５９３に保持された後、積和演算ブロック５２１から出力される。
【００５７】
ところで、ビット分配器５１９からＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が、最上位ビットからなるものから順に２組ずつ積和演算ブロック５２１に全て入力され、上述した動作が終了したときには、上述した動作内容及び（数１３）からして、レジスタ５６９に保持されているデータはＹ０であり、積和演算ブロック５２１からはＹ０が出力されることになる。
【００５８】
また、積和演算ブロック５２２〜５２４においても、それぞれが有するＲＯＭ５３１及び５３２、５３３及び５３４、５３５及び５３６の入出力関係が図１３に示すようになっているとともに、積和演算ブロック５２１と同様の動作を行うので、ビット分配器５１９からＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が、最上位ビットからなるものから順に２組ずつ入力され、それぞれＹ２、Ｙ４、Ｙ６が出力されることになる。
【００５９】
また、積和演算ブロック５２５〜５２８においても、それぞれが有するＲＯＭ５３７及び５３８、５３９及び５４０、５４１及び５４２、５４３及び５４４の入出力関係が図１３に示すようになっているとともに、積和演算ブロック５２１と同様の動作を行うので、ビット分配器５２０からＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が、最上位ビットからなるものから順に２組ずつ入力され、それぞれＹ１、Ｙ３、Ｙ５、Ｙ７が出力されることになる。
【００６０】
尚、（数３）及び（数４）に示した行列の各係数を１０ビットとしており、これに伴って、ＲＯＭ５２９〜５４４の出力のビット数は１２、加算器５５３〜５６０の出力のビット数は１３、加算器５６１〜５６８、レジスタ５６９〜５７６、シフタ５７７〜５８４のそれぞれの出力のビット数は２１となる。
【００６１】
最後に、積和演算ブロック５２１〜５２８がそれぞれ出力するＹ０、Ｙ２、Ｙ４、Ｙ６、Ｙ１、Ｙ３、Ｙ５、Ｙ７は、出力セレクタ６０１に入力され、所定の順に選択されて、順次出力端子６０２から出力され、１次元ＤＣＴが完了する。
【００６２】
ここで、当該１次元ＤＣＴ回路においては、入力端子５０１からＸｊ（ｊ＝０〜７）が順に８ステップで入力されるのに対し、積和演算ブロック５２１〜５２８でのＹ０〜Ｙ７の演算には、Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４、及び、Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４のビット数の半分である５ステップで済み、入力時間よりも演算時間の方が短くなっている、つまり、当該ＤＣＴ回路はリアルタイムに演算を行うことができる。したがって、当該ＤＣＴ回路に入力端子５０１から絶え間なく入力を行っても、演算が間に合わなくなることはなく、入力端子５０１から絶え間なく入力を行うことが可能であり、画像圧縮を効率的に行うことができる。
【００６３】
【発明が解決しようとする課題】
このように、メモリと加算器により、乗算器を用いず、しかも、リアルタイムな１次元ＤＣＴを行うことができる。しかしながら、当該１次元ＤＣＴ回路では、８個の積和演算を並列に行い、それぞれの積和演算について入力データの同一ビット位置のビットからなる２組の４ビット列をそれぞれ構成要素とする２つの部分和を順次生成し、それらを加算して記憶しておく必要があるため、加算器の数が１６、レジスタの数が１６と多くなるとともに、レジスタは積和演算の最終結果を保持する必要があるため、入出力ビット幅が２１と大きくなり、これを受けて、レジスタに係わる加算器の出力ビット幅、及び、シフタの入出力ビット幅も２１と大きくなるので、回路規模が大きくなってしまう。また、レジスタのビット幅の大きな出力がシフタを介して加算器に帰還されており、信号変化が多くなるので、消費電力が大きい。
【００６４】
そこで、本発明は、乗算器を用いず、しかも、リアルタイムな離散コサイン変換器であって、回路規模を小さくするとともに、消費電力を小さくした離散コサイン変換器を提供することを目的とする。
【００６５】
【課題を解決するための手段】
上記の目的を達成するため、請求項１に記載の離散コサイン変換器では、入力データの各同一ビット位置のビットからなる複数のビット列であって、同時に入力される複数のビット列をそれぞれ構成要素とする、複数の部分和を同時に生成する部分和生成手段を有している。
【００６６】
また、請求項２に記載の離散コサイン変換器では、請求項１に記載の離散コサイン変換器において、前記部分和生成手段が、入力データのビット数と同数のメモリを有し、該メモリは入力データの所定のビット位置のビットからなるビット列を同時入力し、そのビット列を構成要素とする部分和を出力する。
【００６７】
また、請求項３に記載の離散コサイン変換器では、入力データの各同一ビット位置のビットからなる複数のビット列をそれぞれ構成要素とする、複数の部分和を同時に生成する部分和生成手段を有し、前記部分和生成手段が、複数の部分和を出力するメモリと、入力データのビット数と同数の部分和選択手段を有し、該部分和選択手段は入力データの所定のビット位置のビットからなるビット列を入力し、そのビット列を構成要素とする部分和を、前記複数の部分和の中から選択して出力する。
【００６８】
また、請求項４に記載の離散コサイン変換器では、各入力データの各連続したビット位置のビットからなる複数のビット列であって、同時に入力される複数のビット列をそれぞれ構成要素とする、複数の部分和を同時に生成する部分和生成手段を有している。
また、請求項５に記載の離散コサイン変換器では、請求項１から４のいずれかに記載の離散コサイン変換器において、前記部分和生成手段は、全ての部分和をビット位置に応じてシフトさせて加算する。
【００６９】
以上のような構成にすることによって、１つの積和演算に関する全ての部分和を同時に生成するので、複数の積和演算を、従来技術のように並列して行うのではなく、１つずつ時分割して行うようにすれば、リアルタイム性を損なうことなく、必要となるレジスタ、加算器、及び、シフタの数が減少する。また、部分和の加算を帰還させずに順送りして行うことができるようになるため、入力側に近い加算器ほどその出力ビット幅が小さくて済み、さらに、信号変化も少なくなる。
【００７０】
【発明の実施の形態】
以下に、本発明の実施形態を図面を参照しながら説明する。図１は本発明の第１実施形態である１次元ＤＣＴ回路（離散コサイン変換器）のブロック図であって、この回路は入力されたＸｊ（ｊ＝０〜７）に対して、（数３）及び（数４）に示した行列演算を分散算術方式を用いて行い、ＤＣＴ係数Ｙｉ（ｉ＝０〜７）を出力するように構成されている。尚、Ｘｊ（ｊ＝０〜７）、Ｙｉ（ｉ＝０〜７）はともに９ビットのデータとする。
【００７１】
以下に、この回路の動作について説明する。入力端子１０１から入力された８個のデータＸ０〜Ｘ７は、入力順にレジスタ１０２〜１０９へ順次転送され、それぞれレジスタ１０９〜１０２に保持される。レジスタ１０９〜１０２のそれぞれの出力Ｘ０〜Ｘ７は加算器／差分器１１０で加算あるいは減算されて、加算結果Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４がそれぞれレジスタ１１１〜１１４に保持され、差分結果Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４がそれぞれレジスタ１１５〜１１８に保持される。尚、入力Ｘｊ（ｊ＝０〜７）が９ビットのデータであるので、加算結果Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４、及び、差分結果Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４はそれぞれ１０ビットのデータとなる。
【００７２】
次に、レジスタ１１１〜１１４のそれぞれの出力Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４と、レジスタ１１５〜１１８のそれぞれの出力Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４とを入力するビット分配器１１９との動作について、この構成を示す図２を用いて説明する。ビット分配器１１９において、レジスタ１１１〜１１４のそれぞれの出力は、ビット操作部１５２により、それぞれ最上位ビットから最下位ビットまでの１０本の信号線（最上位［９］〜最下位［０］）に分けられ、同一ビット位置の４本の信号線が組み合わされた４ビットの信号線が１０組構成されて、信号線［９］の４ビットの信号線はセレクタ１５４に、信号線［８］の４ビットの信号線はセレクタ１５５に、・・・、信号線［０］の４ビットの信号線はセレクタ１６３にというように、それぞれセレクタ１５４〜１６３に入力される。
【００７３】
同様に、レジスタ１１５〜１１８のそれぞれの出力は、ビット操作部１５３により、それぞれ最上位ビットから最下位ビットまでの１０本の信号線（最上位［９］〜最下位［０］）に分けられ、同じビット位置の４本の信号線が組み合わされた４ビットの信号線が１０組構成されて、信号線［９］の４ビットの信号線はセレクタ１５４に、信号線［８］の４ビットの信号線はセレクタ１５５に、・・・、信号線［０］の４ビットの信号線はセレクタ１６３にというように、それぞれセレクタ１５４〜１６３に入力される。
【００７４】
このように、セレクタ１５４〜１６３は、Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の同一ビット位置のビットからなる４ビット列と、Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の同一ビット位置のビットからなる４ビット列との、２組の４ビット列を入力するが、Ｙ０、Ｙ２、Ｙ４、Ｙ６を算出する場合には前者の４ビット列を、Ｙ１、Ｙ３、Ｙ５、Ｙ７を算出する場合には後者の４ビット列を、それぞれ積和演算ブロック１２１に出力するようになっている。
【００７５】
まとめると、ビット分配器１１９からは、Ｙ０、Ｙ２、Ｙ４、Ｙ６を算出する場合、レジスタ１１１〜１１４のそれぞれの出力であるＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が同時に積和演算ブロック１２１に出力され、Ｙ１、Ｙ３、Ｙ５、Ｙ７を算出する場合、レジスタ１１５〜１１８のそれぞれの出力であるＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が同時に積和演算ブロック１２１に出力されることになる。
【００７６】
次に、積和演算ブロック１２１はビット分配器１１９から１０組の４ビット列を同時に入力して、（数３）及び（数４）に示した行列演算を構成する８個の積和演算を所定の順に行い、Ｙ０、Ｙ１、Ｙ２、Ｙ３、Ｙ４、Ｙ５、Ｙ６、Ｙ７を順次計算するが、この動作について、（数３）に示した第１行目の演算を行う、つまり、Ｙ０を計算する動作を例にとって説明を行う。
【００７７】
積和演算ブロック１２１に設けられたＲＯＭ１２２〜１３１は、行選択回路１２０からの３ビットの行選択信号と、この行選択信号とは別に４ビット列を入力し、図３に示すように、行選択信号が（０００）であれば、４ビット列が、（００００）であるときは０を、（０００１）であるときはＣ４を、・・・、（１１１１）であるときは４Ｃ４を、それぞれ出力し、また、行選択信号が（００１）であれば、４ビット列が、（００００）であるときは０を、（０００１）であるときは−Ｃ２を、・・・、（１１１１）であるときは０を、それぞれ出力し、・・・・・・、また、行選択信号が（１１１）であれば、４ビット列が、（００００）であるときは０を、（０００１）であるときは−Ｃ１を、・・・、（１１１１）であるときは−Ｃ１＋Ｃ３−Ｃ５＋Ｃ７を、それぞれ出力するようになっており、これにより、（数３）及び（数４）からして、入力する行選択信号が（０００）で、４ビット列がＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の同一ビット位置のビットからなるものであれば、Ｙ０の部分和を出力することになり、入力する行選択信号が（００１）で、４ビット列がＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の同一ビット位置のビットからなるものであれば、Ｙ２の部分和を出力することになり、・・・、入力する行選択信号が（１１１）で、４ビット列がＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の同一ビット位置のビットからなるものであれば、Ｙ７の部分和を出力することになる。また、図示はしていないが、ＲＯＭ１２２に格納されているデータは、他のＲＯＭ１２３〜１３１に格納されているデータとは極性が反転しており、最上位ビットからなる４ビット列を構成要素とする部分和がマイナスであることに対応している。以下の説明は、このようにＲＯＭ１２２〜１３１が構成されていることを前提として行うものとする。
【００７８】
まず、行選択回路１２０から行選択信号として（０００）がＲＯＭ１２２〜１３１に入力されるとともに、ビット分配器１１９からＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の、最上位ビットからなる４ビット列がＲＯＭ１２２に、ビット位置１のビットからなる４ビット列がＲＯＭ１２３に、・・・、最下位ビット（ビット位置９のビット）からなる４ビット列がＲＯＭ１３１に、それぞれ入力され、これにより、ＲＯＭ１２２からは最上位ビットからなる４ビット列を構成要素とするＹ０の部分和が、ＲＯＭ１２３からはビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和が、・・・、ＲＯＭ１３１からは最下位ビットからなる４ビット列を構成要素とするＹ０の部分和が、それぞれ出力されることになる。
【００７９】
次に、ＲＯＭ１２２、１２４、１２６、１２８、１３０の出力は、それぞれ、シフタ１３２、１３３、１３４、１３５、１３６にて１ビット上にシフトされた後、加算器１３７、１３８、１３９、１４０、１４１において、ＲＯＭ１２３、１２５、１２７、１２９、１３１の出力と加算される。したがって、加算器１３７、１３８、１３９、１４０、１４１の出力は、それぞれ、最上位ビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）とビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果、ビット位置２のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）とビット位置３のビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果、・・・、ビット位置８のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）と最下位ビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果となる。
【００８０】
次に、加算器１３８、１４０の出力は、それぞれ、シフタ１４２、１４３にて２ビット上にシフトされた後、加算器１４４、１４５において、加算器１３９、１４１の出力と加算される。したがって、加算器１４４の出力は、ビット位置２のビットからなる４ビット列を構成要素とするＹ０の部分和（３ビット上にシフトされている）と、ビット位置３のビットからなる４ビット列を構成要素とするＹ０の部分和（２ビット上にシフトされている）と、ビット位置４のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）と、ビット位置５のビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果となり、加算器１４５の出力は、ビット位置６のビットからなる４ビット列を構成要素とするＹ０の部分和（３ビット上にシフトされている）と、ビット位置７のビットからなる４ビット列を構成要素とするＹ０の部分和（２ビット上にシフトされている）と、ビット位置８のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）と、最下位ビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果となる。
【００８１】
次に、加算器１４４の出力は、シフタ１４６にて４ビット上にシフトされた後、加算器１４７において、加算器１４５の出力と加算される。したがって、加算器１４７の出力は、ビット位置２のビットからなる４ビット列を構成要素とするＹ０の部分和（７ビット上にシフトされている）と、ビット位置３のビットからなる４ビット列を構成要素とするＹ０の部分和（６ビット上にシフトされている）と、ビット位置４のビットからなる４ビット列を構成要素とするＹ０の部分和（５ビット上にシフトされている）と、ビット位置５のビットからなる４ビット列を構成要素とするＹ０の部分和（４ビット上にシフトされている）と、ビット位置６のビットからなる４ビット列を構成要素とするＹ０の部分和（３ビット上にシフトされている）と、ビット位置７のビットからなる４ビット列を構成要素とするＹ０の部分和（２ビット上にシフトされている）と、ビット位置８のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）と、最下位ビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果となる。
【００８２】
次に、加算器１３７の出力は、シフタ１４８にて８ビット上にシフトされた後、加算器１４９において、加算器１４７の出力と加算される。したがって、加算器１４９の出力は、最上位ビットからなる４ビット列を構成要素とするＹ０の部分和（９ビット上にシフトされている）と、ビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和（８ビット上にシフトされている）と、ビット位置２のビットからなる４ビット列を構成要素とするＹ０の部分和（７ビット上にシフトされている）と、ビット位置３のビットからなる４ビット列を構成要素とするＹ０の部分和（６ビット上にシフトされている）と、ビット位置４のビットからなる４ビット列を構成要素とするＹ０の部分和（５ビット上にシフトされている）と、ビット位置５のビットからなる４ビット列を構成要素とするＹ０の部分和（４ビット上にシフトされている）と、ビット位置６のビットからなる４ビット列を構成要素とするＹ０の部分和（３ビット上にシフトされている）と、ビット位置７のビットからなる４ビット列を構成要素とするＹ０の部分和（２ビット上にシフトされている）と、ビット位置８のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）と、最下位ビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果となる。
【００８３】
そして、加算器１４９の出力は、丸め回路１５０で９ビットに丸められ、積和演算ブロック１２１から出力端子１５１へ出力される。
【００８４】
以上の動作により、Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列をそれぞれ構成要素とするＹ０の１０個の部分和（全ての部分和）が同時に生成され、これらがビット位置に応じて（数式１３）に示すようにシフトされて加算されるので、Ｙ０が計算されることになる。
【００８５】
また、積和演算ブロック１２１において、ビット分配器１１９からは、Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の最上位ビットからなる４ビット列〜最下位ビットからなる４ビット列の１０組の４ビット列がそれぞれＲＯＭ１２２〜１３１に入力され、行選択回路１２０からＲＯＭ１２２〜１３１に入力される行選択信号が（００１）、（０１０）、あるいは、（０１１）である場合は、それぞれＹ２、Ｙ４、Ｙ６が計算されることになる。
【００８６】
また、積和演算ブロック１２１において、ビット分配器１１９からは、Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の最上位ビットからなる４ビット列〜最下位ビットからなる４ビット列の１０組の４ビット列がそれぞれＲＯＭ１２２〜１３１に入力され、行選択回路１２０からＲＯＭ１２２〜１３１に入力される行選択信号が（１００）、（１０１）、（１１０）、あるいは、（１１１）である場合は、それぞれＹ１、Ｙ３、Ｙ５、Ｙ７が計算されることになる。
【００８７】
そして、行選択回路１２０から３ビットの行選択信号として、（０００）、（００１）、・・・、（１１１）のどれが出力されるか、及び、ビット分配器１１９から１０組の４ビット列として、レジスタ１１１〜１１４のそれぞれの出力であるＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなるものが同時に出力されるか、あるいは、レジスタ１１５〜１１８のそれぞれの出力であるＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の各同一ビット位置のビットからなるものが同時に出力されるかが、それぞれ適切に切り換わるようになっており、Ｙ０〜Ｙ７が所定の順で計算され、１次元ＤＣＴが完了する。
【００８８】
ここで、当該１次元ＤＣＴ回路においては、入力端子１０１からＸｊ（ｊ＝０〜７）が順に８ステップで入力されるのに対し、積和演算ブロック１２１でのＹ０〜Ｙ７の演算には、Ｙ０〜Ｙ７の個数と同数の８ステップを要し、入力時間と演算時間が等しくなっている、つまり、当該ＤＣＴ回路はリアルタイムに演算を行うことができる。したがって、当該ＤＣＴ回路に入力端子１０１から絶え間なく入力を行っても、演算が間に合わなくなることはなく、入力端子１０１から絶え間なく入力を行うことが可能であり、画像圧縮を効率的に行うことができる。
【００８９】
また、（数３）及び（数４）に示す行列演算を構成する８個の積和演算を、従来技術のように並列して行うのではなく、１つずつ時分割して行っており、さらに、１つの積和演算の対象である４個のデータの各同一ビット位置のビットからなる１０組の４ビット列をそれぞれ構成要素とする１０個の部分和、つまり、１つの積和演算に関する全ての部分和を、ＲＯＭ１２２〜１３１により同時に生成するので、積和演算ブロック１２１においては、レジスタを必要とせず、９個の加算器で積和演算を行うことができる。また、部分和の加算を帰還させずに順送りして行うことができるようになるため、（数３）及び（数４）に示した行列の各係数を１０ビットとすると、ＲＯＭ１２２〜１３１の出力は１２ビットとなり、加算器１４９は２１ビット、加算器１４７は１９ビット、加算器１４４、１４５は１５ビット、加算器１３７〜１４１は１３ビットというように、入力側に近い加算器ほどその出力ビット幅が小さくて済み、さらに、信号変化も少なくなる。
【００９０】
図４は本発明の第２実施形態である１次元ＤＣＴ回路（離散コサイン変換器）のブロック図であって、この回路は入力されたＸｊ（ｊ＝０〜７）に対して、（数３）及び（数４）に示した行列演算を分散算術方式を用いて行い、ＤＣＴ係数Ｙｉ（ｉ＝０〜７）を出力するように構成されている。尚、Ｘｊ（ｊ＝０〜７）、Ｙｉ（ｉ＝０〜７）はともに９ビットのデータとする。
【００９１】
以下に、この回路の動作について説明する。入力端子２０１から入力された８個のデータＸ０〜Ｘ７は、入力順にレジスタ２０２〜２０９へ順次転送され、それぞれレジスタ２０９〜２０２に保持される。レジスタ２０９〜２０２のそれぞれの出力Ｘ０〜Ｘ７は加算器／差分器２１０で加算あるいは減算されて、加算結果Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４がそれぞれレジスタ２１１〜２１４に保持され、差分結果Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４がそれぞれレジスタ２１５〜２１８に保持される。尚、入力Ｘｊ（ｊ＝０〜７）が９ビットのデータであるので、加算結果Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４、及び、差分結果Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４はそれぞれ１０ビットのデータとなる。
【００９２】
次に、レジスタ２１１〜２１４のそれぞれの出力Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４と、レジスタ２１５〜２１８のそれぞれの出力Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４とを入力するビット分配器２１９との動作について、この構成を示す図５を用いて説明する。ビット分配器２１９において、レジスタ２１１〜２１４のそれぞれの出力は、ビット操作部２５３により、それぞれ最上位ビットから最下位ビットまでの１０本の信号線（最上位［９］〜最下位［０］）に分けられ、同じビット位置の４本の信号線が組み合わされた４ビットの信号線が１０組構成されて、信号線［９］の４ビットの信号線はセレクタ２５５に、信号線［８］の４ビットの信号線はセレクタ２５６に、・・・、信号線［０］の４ビットの信号線はセレクタ２６４にというように、それぞれセレクタ２５５〜２６４に入力される。
【００９３】
同様に、レジスタ２１５〜２１８のそれぞれの出力は、ビット操作部２５４により、それぞれ最上位ビットから最下位ビットまでの１０本の信号線（最上位［９］〜最下位［０］）に分けられ、同じビット位置の４本の信号線が組み合わされた４ビットの信号線が１０組構成されて、信号線［９］の４ビットの信号線はセレクタ２５５に、信号線［８］の４ビットの信号線はセレクタ２５６に、・・・、信号線［０］の４ビットの信号線はセレクタ２６４にというように、それぞれセレクタ２５５〜２６４に入力される。
【００９４】
このように、セレクタ２５５〜２６４は、Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の同一ビット位置のビットからなる４ビット列と、Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の同一ビット位置のビットからなる４ビット列との、２つの４ビット列を入力するが、Ｙ０、Ｙ２、Ｙ４、Ｙ６を算出する場合には前者の４ビット列を、Ｙ１、Ｙ３、Ｙ５、Ｙ７を算出する場合には後者の４ビット列を、それぞれ積和演算ブロック２２１に出力するようになっている。
【００９５】
まとめると、ビット分配器２１９からは、Ｙ０、Ｙ２、Ｙ４、Ｙ６を算出する場合、レジスタ２１１〜２１４のそれぞれの出力であるＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が同時に積和演算ブロック２２１に出力され、Ｙ１、Ｙ３、Ｙ５、Ｙ７を算出する場合、レジスタ２１５〜２１８のそれぞれの出力であるＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が同時に積和演算ブロック２２１に出力されることになる。
【００９６】
次に、積和演算ブロック２２１はビット分配器２１９から１０組の４ビット列を同時に入力して、（数３）及び（数４）に示した行列演算を構成する８個の積和演算を所定の順に行い、Ｙ０、Ｙ１、Ｙ２、Ｙ３、Ｙ４、Ｙ５、Ｙ６、Ｙ７を順次計算するが、この動作について、（数３）に示した第１行目の演算を行う、つまり、Ｙ０を計算する動作を例にとって説明を行う。
【００９７】
積和演算ブロック２２１に設けられたＲＯＭ２２２は、行選択回路２２０からの３ビットの行選択信号を入力し、図６に示すように、行選択信号が、（０００）であるときは０、Ｃ４、Ｃ４、２Ｃ４、Ｃ４、２Ｃ４、２Ｃ４、３Ｃ４、Ｃ４、２Ｃ４、２Ｃ４、３Ｃ４、２Ｃ４、３Ｃ４、３Ｃ４、４Ｃ４の１６組を、（００１）であるときは０、−Ｃ２、−Ｃ６、−Ｃ２−Ｃ６、Ｃ６、−Ｃ２＋Ｃ６、０、−Ｃ２、Ｃ２、０、Ｃ２−Ｃ６、−Ｃ６、Ｃ２＋Ｃ６、Ｃ６、Ｃ２、０の１６組を、・・・、（１１１）であるときは０、−Ｃ１、Ｃ３、−Ｃ１＋Ｃ３、−Ｃ５、−Ｃ１−Ｃ５、Ｃ３−Ｃ５、−Ｃ１＋Ｃ３−Ｃ５、Ｃ７、−Ｃ１＋Ｃ７、Ｃ３＋Ｃ７、−Ｃ１＋Ｃ３＋Ｃ７、−Ｃ５＋Ｃ７、−Ｃ１−Ｃ５＋Ｃ７、Ｃ３−Ｃ５＋Ｃ７、−Ｃ１＋Ｃ３−Ｃ５＋Ｃ７の１６組を、それぞれ出力するようになっている。尚、以下に、説明の都合上、それぞれの１６組の出力を先頭に記載したものから順に第１出力、第２出力、・・・、第１６出力と表現する。例えば、行選択信号が（０００）であるときの第１出力は０、第２出力はＣ４、・・・、第１６出力は４Ｃ４である。
【００９８】
積和演算ブロック２２１に設けられたセレクタ２２３〜２３２は、ＲＯＭ２２２からの１６組の出力と、これとは別に４ビット列を入力し、４ビット列が、（００００）であるときはＲＯＭ２２２からの１６組の出力のうち第１出力を、（０００１）であるときはＲＯＭ２２２からの１６組の出力のうち第２出力を、・・・、（１１１１）であるときはＲＯＭ２２２からの１６組の出力のうち第１６出力を、それぞれ出力するようになっており、これにより、（数３）、（数４）、及び、上述したＲＯＭ２２２の動作内容からして、セレクタ２２３〜２３２は、ビット分配器２１９からＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の同一ビット位置のビットからなる４ビット列が入力される場合は、行選択回路２２０からＲＯＭ２２２に入力される行選択信号が、（０００）であればＹ０の部分和を、（００１）であればＹ２の部分和を、（０１０）であればＹ４の部分和を、（０１１）であればＹ６の部分和を、それぞれ出力することになり、また、ビット分配器２１９からＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の同一ビット位置のビットからなる４ビット列が入力される場合は、行選択回路２２０からＲＯＭ２２２に入力される行選択信号が、（１００）であればＹ１の部分和を、（１０１）であればＹ３の部分和を、（１１０）であればＹ５の部分和を、（１１１）であればＹ７の部分和を、それぞれ出力することになる。また、積和演算ブロック２２１において、図示はしていないが、セレクタ２２３の出力極性が反転するようになっており、最上位ビットからなる４ビット列を構成要素とする部分和がマイナスであることに対応している。以下の説明は、このようにセレクタ２２３〜２３２が、また、上述したようにＲＯＭ２２２が、それぞれ構成されていることを前提として行うものとする。
【００９９】
まず、ＲＯＭ２２２には、行選択回路２２０から行選択信号として（０００）が入力されるとともに、積和演算ブロック２２１には、ビット分配器２１９からＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列が同時に入力され、そのうち、最上位ビットからなる４ビット列がセレクタ２２３に、ビット位置１のビットからなる４ビット列がセレクタ２２４に、・・・、最下位ビット（ビット位置９のビット）からなる４ビット列がセレクタ２３２に、それぞれ入力され、これにより、セレクタ２２３からは最上位ビットからなる４ビット列を構成要素とするＹ０の部分和が、セレクタ２２４からはビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和が、・・・、セレクタ２３２からは最下位ビットからなる４ビット列を構成要素とするＹ０の部分和が、それぞれ出力されることになる。
【０１００】
次に、セレクタ２２３、２２５、２２７、２２９、２３１の出力は、それぞれ、シフタ２３３、２３４、２３５、２３６、２３７にて１ビット上にシフトされた後、加算器２３８、２３９、２４０、２４１、２４２において、セレクタ２２４、２２６、２２８、２３０、２３２の出力と加算される。したがって、加算器２３８、２３９、２４０、２４１、２４２の出力は、それぞれ、最上位ビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）とビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果、ビット位置２のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）とビット位置３のビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果、・・・、ビット位置８のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）と最下位ビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果となる。
【０１０１】
次に、加算器２３９、２４１の出力は、それぞれ、シフタ２４３、２４４にて２ビット上にシフトされた後、加算器２４５、２４６において、加算器２４０、２４２の出力と加算される。したがって、加算器２４５の出力は、ビット位置２のビットからなる４ビット列を構成要素とするＹ０の部分和（３ビット上にシフトされている）と、ビット位置３のビットからなる４ビット列を構成要素とするＹ０の部分和（２ビット上にシフトされている）と、ビット位置４のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）と、ビット位置５のビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果となり、加算器２４６の出力は、ビット位置６のビットからなる４ビット列を構成要素とするＹ０の部分和（３ビット上にシフトされている）と、ビット位置７のビットからなる４ビット列を構成要素とするＹ０の部分和（２ビット上にシフトされている）と、ビット位置８のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）と、最下位ビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果となる。
【０１０２】
次に、加算器２４５の出力は、シフタ２４７にて４ビット上にシフトされた後、加算器２４８において、加算器２４６の出力と加算される。したがって、加算器２４８の出力は、ビット位置２のビットからなる４ビット列を構成要素とするＹ０の部分和（７ビット上にシフトされている）と、ビット位置３のビットからなる４ビット列を構成要素とするＹ０の部分和（６ビット上にシフトされている）と、ビット位置４のビットからなる４ビット列を構成要素とするＹ０の部分和（５ビット上にシフトされている）と、ビット位置５のビットからなる４ビット列を構成要素とするＹ０の部分和（４ビット上にシフトされている）と、ビット位置６のビットからなる４ビット列を構成要素とするＹ０の部分和（３ビット上にシフトされている）と、ビット位置７のビットからなる４ビット列を構成要素とするＹ０の部分和（２ビット上にシフトされている）と、ビット位置８のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）と、最下位ビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果となる。
【０１０３】
次に、加算器２３８の出力は、シフタ２４９にて８ビット上にシフトされた後、加算器２５０において、加算器２４８の出力と加算される。したがって、加算器２５０の出力は、最上位ビットからなる４ビット列を構成要素とするＹ０の部分和（９ビット上にシフトされている）と、ビット位置１のビットからなる４ビット列を構成要素とするＹ０の部分和（８ビット上にシフトされている）と、ビット位置２のビットからなる４ビット列を構成要素とするＹ０の部分和（７ビット上にシフトされている）と、ビット位置３のビットからなる４ビット列を構成要素とするＹ０の部分和（６ビット上にシフトされている）と、ビット位置４のビットからなる４ビット列を構成要素とするＹ０の部分和（５ビット上にシフトされている）と、ビット位置５のビットからなる４ビット列を構成要素とするＹ０の部分和（４ビット上にシフトされている）と、ビット位置６のビットからなる４ビット列を構成要素とするＹ０の部分和（３ビット上にシフトされている）と、ビット位置７のビットからなる４ビット列を構成要素とするＹ０の部分和（２ビット上にシフトされている）と、ビット位置８のビットからなる４ビット列を構成要素とするＹ０の部分和（１ビット上にシフトされている）と、最下位ビットからなる４ビット列を構成要素とするＹ０の部分和との加算結果となる。
【０１０４】
そして、加算器２５０の出力は、丸め回路２５１で９ビットに丸められ、積和演算ブロック２２１から出力端子２５２へ出力される。
【０１０５】
以上の動作により、Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなる１０組の４ビット列をそれぞれ構成要素とするＹ０の１０個の部分和（全ての部分和）が同時に生成され、これらがビット位置に応じて（数式１３）に示すようにシフトされて加算されるので、Ｙ０が計算されることになる。
【０１０６】
また、積和演算ブロック２２１において、ビット分配器２１９からは、Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の最上位ビットからなる４ビット列〜最下位ビットからなる４ビット列の１０組の４ビット列がそれぞれセレクタ２２３〜２３２に入力され、行選択回路２２０からＲＯＭ２２２に入力される行選択信号が、（００１）、（０１０）、あるいは、（０１１）である場合は、それぞれＹ２、Ｙ４、Ｙ６が計算されることになる。
【０１０７】
また、積和演算ブロック２２１において、ビット分配器２１９からは、Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の最上位ビットからなる４ビット列〜最下位ビットからなる４ビット列の１０組の４ビット列がそれぞれセレクタ２２３〜２３２に入力され、行選択回路２２０からＲＯＭ２２２に入力される行選択信号が、（１００）、（１０１）、（１１０）、あるいは、（１１１）である場合は、それぞれＹ１、Ｙ３、Ｙ５、Ｙ７が計算されることになる。
【０１０８】
そして、行選択回路２２０から３ビットの行選択信号として、（０００）、（００１）、・・・、（１１１）のどれが出力されるか、及び、ビット分配器２１９から１０組の４ビット列として、レジスタ２１１〜２１４のそれぞれの出力であるＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の各同一ビット位置のビットからなるものが同時に出力されるか、あるいは、レジスタ２１５〜２１８のそれぞれの出力であるＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４の各同一ビット位置のビットからなるものが同時に出力されるかが、それぞれ適切に切り換わるようになっており、Ｙ０〜Ｙ７が所定の順で計算され、１次元ＤＣＴが完了する。
【０１０９】
ここで、当該１次元ＤＣＴ回路においては、入力端子２０１からＸｊ（ｊ＝０〜７）が順に８ステップで入力されるのに対し、積和演算ブロック２２１でのＹ０〜Ｙ７の演算には、Ｙ０〜Ｙ７の個数と同数の８ステップを要し、入力時間と演算時間が等しくなっている、つまり、当該ＤＣＴ回路はリアルタイムに演算を行うことができる。したがって、当該ＤＣＴ回路に入力端子２０１から絶え間なく入力を行っても、演算が間に合わなくなることはなく、入力端子２０１から絶え間なく入力を行うことが可能であり、画像圧縮を効率的に行うことができる。
【０１１０】
また、（数３）及び（数４）に示す行列演算を構成する８個の積和演算を、従来技術のように並列して行うのではなく、１つずつ時分割して行っており、さらに、１つの積和演算の対象である４個のデータの各同一ビット位置のビットからなる１０組の４ビット列をそれぞれ構成要素とする１０個の部分和、つまり、１つの積和演算に関する全ての部分和を、セレクタ２２３〜２３２により同時に生成するので、積和演算ブロック２２１においては、レジスタを必要とせず、９個の加算器で積和演算を行うことができる。また、部分和の加算を帰還させずに順送りして行うことができるようになるため、（数３）及び（数４）に示した行列の各係数を１０ビットとすると、セレクタ２２３〜２３２の出力は１２ビットとなり、加算器２５０は２１ビット、加算器２４８は１９ビット、加算器２４５、２４６は１５ビット、加算器２３８〜２４２は１３ビットというように、入力側に近い加算器ほどその出力ビット幅が小さくて済み、さらに、信号変化も少なくなる。
【０１１１】
尚、前述の第１実施形態に比べて、ＲＯＭ２２２の出力ビット幅が、（数３）及び（数４）に示した行列の各係数を１０ビットとした場合、１組の出力のビット数が１２であるから、１２×１６＝１９２と大きくなるので、その分、信号変化が増加するが、ＲＯＭの個数は１つであり、１０分の１に減少する。
【０１１２】
さて、ここまでは、分散算術方式に基づき、複数の入力データの同一ビット位置のビットからなるビット列を構成要素とする部分和をビット位置毎に生成し、これらを加算することによって積和演算を行ってきたが、この他の方式として、入力データの連続したビット位置のビットからなるビット列を構成要素とする部分和を入力データ毎に生成し、これらを加算することによっても積和演算を行うことができる。
【０１１３】
以下に、この方式についての説明を行う。まず、次に示す（数１４）の変数Ｘｊ（ｊ＝０〜Ｍ−１）と固定係数Ｃｊ（ｊ＝０〜Ｍ−１）との積和演算式について考える。
【０１１４】
【数１４】
0003547567.tif 000017
【０１１５】
ここで、ＸｊをＮビットの２の補数で表現すると、Ｘｊは次に示す（数１５）のようになる。
【０１１６】
【数１５】
0003547567.tif 000018
ただし、Ｘｊ（ｋ）はＸｊのビット位置ｋ（最上位のｋ個下の位）のビットを表し、０または１である。
【０１１７】
具体的にＮ＝１０とすると、Ｘｊは次に示す（数１６）のようになる。
【０１１８】
【数１６】
0003547567.tif 000019
【０１１９】
ここで、Ｐｊｉを次に示す（数１７）のように定義すると、（数１６）は次に示す（数１８）となる。
【０１２０】
【数１７】
0003547567.tif 000020
【０１２１】
【数１８】
0003547567.tif 000021
【０１２２】
（数１８）より、（数１４）は次に示す（数１９）のようになる。
【０１２３】
【数１９】
0003547567.tif 000022
【０１２４】
ここで、部分和Ｑｊｉを次に示す（数２０）のように定義すると、（数１９）は次に示す（数２１）となる。
【０１２５】
【数２０】
0003547567.tif 000023
【０１２６】
【数２１】
0003547567.tif 000024
【０１２７】
以上のように、変数Ｘｊ（ｊ＝０〜Ｍ−１）と固定係数Ｃｊ（ｊ＝０〜Ｍ−１）との積和演算結果Ｙは（数２１）で得られるわけであるが、（数２０）で定義した部分和Ｑｊｉ（ｊ＝０〜Ｍ−１、ｉ＝０〜３）について着目してみると、その構成要素はＣｊ（ｊ＝０〜Ｍ−１）とＰｊｉ（ｊ＝０〜Ｍ−１、ｉ＝０〜３）であって、Ｃｊは固定係数であり、Ｐｊｉの構成要素は２ｎ（ｎ＝０〜２）と、ｉ＝０のときは１ビット列Ｘｊ（０）、ｉ＝１のときは３ビット列（Ｘｊ（１）Ｘｊ（２）Ｘｊ（３））、ｉ＝２のときは３ビット列（Ｘｊ（４）Ｘｊ（５）Ｘｊ（６））、ｉ＝３のときは３ビット列（Ｘｊ（７）Ｘｊ（８）Ｘｊ（９））であるので、部分和Ｑｊｉはこれらのビット列の関数である。そこで、１ビット列Ｘｊ（０）、または、３ビット列（Ｘｊ（１）Ｘｊ（２）Ｘｊ（３））、または、３ビット列（Ｘｊ（４）Ｘｊ（５）Ｘｊ（６））、または、３ビット列（Ｘｊ（７）Ｘｊ（８）Ｘｊ（９））をアドレスとしてアクセスすれば（入力すれば）、そのビット列を構成要素とする部分和Ｑｊｉを読み出す（出力する）ことができるように、部分和Ｑｊｉの取り得る値をメモリに予め記憶させておき、そして、メモリから読み出される部分和Ｑｊｉを、その構成要素であるビット列をなすビットのビット位置に応じて（数２１）に示すようにシフトして加算するようにしておけば、積和演算を行うことができる。
【０１２８】
このような算術方式を用いた本発明の第３実施形態である１次元ＤＣＴ回路（離散コサイン変換器）のブロック図を図７に示す。この回路は入力されたＸｊ（ｊ＝０〜７）に対して、（数３）及び（数４）に示した行列演算を構成する８個の積和演算を、それぞれ上記算術方式を用いて行い、ＤＣＴ係数Ｙｉ（ｉ＝０〜７）を出力するように構成されている。尚、Ｘｊ（ｊ＝０〜７）、Ｙｉ（ｉ＝０〜７）はともに９ビットのデータとする。
【０１２９】
以下に、この回路の動作について説明する。入力端子３０１から入力された８個のデータＸ０〜Ｘ７は、入力順にレジスタ３０２〜３０９へ順次転送され、それぞれレジスタ３０９〜３０２に保持される。レジスタ３０９〜３０２のそれぞれの出力Ｘ０〜Ｘ７は加算器／差分器３１０で加算あるいは減算されて、加算結果Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４がそれぞれレジスタ３１１、３１３、３１５、３１７に保持され、差分結果Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４がそれぞれレジスタ３１２、３１４、３１６、３１８に保持される。尚、入力Ｘｊ（ｊ＝０〜７）が９ビットのデータであるので、加算結果Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４、及び、差分結果Ｘ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４はそれぞれ１０ビットのデータとなる。
【０１３０】
次に、レジスタ３１１、３１２のそれぞれの出力Ｘ０＋Ｘ７、Ｘ０−Ｘ７を入力するビット分配器３１９と、レジスタ３１３、３１４のそれぞれの出力Ｘ１＋Ｘ６、Ｘ１−Ｘ６を入力するビット分配器３２０と、レジスタ３１５、３１６のそれぞれの出力Ｘ２＋Ｘ５、Ｘ２−Ｘ５を入力するビット分配器３２１と、レジスタ３１７、３１８のそれぞれの出力Ｘ３＋Ｘ４、Ｘ３−Ｘ４を入力するビット分配器３２２との動作について、これらの構成を示す図８を用いて説明する。
【０１３１】
ビット分配器３１９において、レジスタ３１１、３１２の出力は、それぞれ最上位ビットの信号線［９］と、ビット位置１、２、３のビットの３本の信号線［８：６］と、ビット位置４、５、６のビットの３本の信号線［５：３］と、ビット位置７、８のビット、及び、最下位ビット（ビット位置９のビット）の３本の信号線［２：０］との、４組の信号線に分けられ、信号線［９］はセレクタ３６１に、信号線［８：６］はセレクタ３６２に、信号線［５：３］はセレクタ３６３に、信号線［２：０］はセレクタ３６４に、それぞれ入力される。
【０１３２】
このように、セレクタ３６１〜３６４は、レジスタ３１１からの信号線とレジスタ３１２からの信号線との２組の信号線を入力するが、Ｙ０、Ｙ２、Ｙ４、Ｙ６を計算する場合はレジスタ３１１からの信号線を積和演算ブロック３２４に出力し、Ｙ１、Ｙ３、Ｙ５、Ｙ７を計算する場合はレジスタ３１２からの信号線を積和演算ブロック３２４に出力するようになっている。
【０１３３】
また、ビット分配器３２０、３２１、３２２においても、それぞれレジスタ３１３、３１４の出力、レジスタ３１５、３１６の出力、レジスタ３１７、３１８の出力に基づいて同様の動作が行われ、各ビット分配器は、Ｙ０、Ｙ２、Ｙ４、Ｙ６を算出する場合はレジスタ３１３からの信号線、レジスタ３１５からの信号線、レジスタ３１７からの信号線をそれぞれ積和演算ブロック３２４に出力し、Ｙ１、Ｙ３、Ｙ５、Ｙ７を計算する場合はレジスタ３１４からの信号線、レジスタ３１６からの信号線、レジスタ３１８からの信号線をそれぞれ積和演算ブロック３２４に出力するようになっている。
【０１３４】
まとめると、ビット分配器３１９、３２０、３２１、３２２からはそれぞれ、Ｙ０、Ｙ２、Ｙ４、Ｙ６を算出する場合は、レジスタ３１１の出力であるＸ０＋Ｘ７の、レジスタ３１３の出力であるＸ１＋Ｘ６の、レジスタ３１５の出力であるＸ２＋Ｘ５の、レジスタ３１７の出力であるＸ３＋Ｘ４の、最上位ビットからなる１ビット列と、ビット位置１、２、３のビットからなる３ビット列と、ビット位置４、５、６のビットからなる３ビット列と、ビット位置７、８、９のビットからなる３ビット列が同時に積和演算ブロック３２４に出力され、Ｙ１、Ｙ３、Ｙ５、Ｙ７を計算する場合は、レジスタ３１２の出力であるＸ０−Ｘ７の、レジスタ３１４の出力であるＸ１−Ｘ６の、レジスタ３１６の出力であるＸ２−Ｘ５の、レジスタ３１８の出力であるＸ３−Ｘ４の、最上位ビットからなる１ビット列と、ビット位置１、２、３のビットからなる３ビット列と、ビット位置４、５、６のビットからなる３ビット列と、ビット位置７、８、９のビットからなる３ビット列が同時に積和演算ブロック３２４に出力されることになる。
【０１３５】
次に、積和演算ブロック３２４はビット分配器３１９、３２０、３２１、３２２のそれぞれの出力である１組の１ビット列と３組の３ビット列を同時に入力し、つまり、１６組のビット列（４組の１ビット列と１２組の３ビット列）を入力し、（数３）及び（数４）に示した行列演算を構成する８個の積和演算を所定の順に行い、Ｙ０、Ｙ１、Ｙ２、Ｙ３、Ｙ４、Ｙ５、Ｙ６、Ｙ７を順次計算するが、この動作について、（数３）に示した第１行目の演算を行う、つまり、Ｙ０を計算する動作を例にとって説明を行う。
【０１３６】
積和演算ブロック３２４に設けられたＲＯＭ３２５、３２９、３３３、３３７は、行選択回路１２０からの３ビットの行選択信号と、この行選択信号とは別に１ビット列を入力し、図９及び図１０に示すように、行選択信号が（０００）であれば、１ビット列が、（０）であるときはそれぞれ０を、（１）であるときはそれぞれ−Ｃ４を出力し、また、行選択信号が（００１）であれば、１ビット列が、（０）であるときはそれぞれ０を、（１）であるときはそれぞれ−Ｃ２、−Ｃ６、Ｃ６、Ｃ２を出力し、・・・、また、行選択信号が（１１１）であれば、１ビット列が、（０）であるときはそれぞれ０を、（１）であるときはそれぞれ−Ｃ７、Ｃ５、−Ｃ３、Ｃ１をそれぞれ出力するようになっている。
【０１３７】
これにより、（数３）及び（数４）からして、ＲＯＭ３２５、３２９、３３３、３３７は、入力される１ビット列がそれぞれＸ０＋Ｘ７の最上位ビットからなるもの、Ｘ１＋Ｘ６の最上位ビットからなるもの、Ｘ２＋Ｘ５の最上位ビットからなるもの、Ｘ３＋Ｘ４の最上位ビットからなるものであれば、行選択信号が、（０００）のときはそれぞれＹ０の部分和を、（００１）のときはそれぞれＹ２の部分和を、（０１０）のときはそれぞれＹ４の部分和を、（０１１）のときはそれぞれＹ６の部分和を出力することになり、入力される１ビット列がそれぞれＸ０−Ｘ７の最上位ビットからなるもの、Ｘ１−Ｘ６の最上位ビットからなるもの、Ｘ２−Ｘ５の最上位ビットからなるもの、Ｘ３−Ｘ４の最上位ビットからなるものであれば、行選択信号が、（１００）のときはそれぞれＹ１の部分和を、（１０１）のときはそれぞれＹ３の部分和を、（１１０）のときはそれぞれＹ５の部分和を、（１１１）のときはそれぞれＹ７の部分和を出力することになる。
【０１３８】
積和演算ブロック３２４に設けられたＲＯＭ３２６〜３２８、３３０〜３３２、３３４〜３３６、３３８〜３４０は、行選択回路１２０からの３ビットの行選択信号と、この行選択信号とは別に３ビット列を入力し、図９及び図１０に示すように、行選択信号が（０００）であれば、３ビット列が、（０００）であるときはそれぞれ０を、（００１）であるときはそれぞれＣ４を、・・・、（１１１）であるときはそれぞれ７Ｃ４を出力し、また、行選択信号が（００１）であれば、３ビット列が、（０００）であるときはそれぞれ０を、（００１）であるときはそれぞれＣ２、Ｃ６、−Ｃ６、−Ｃ２を、・・・、（１１１）であるときはそれぞれ７Ｃ２、７Ｃ６、−７Ｃ６、−７Ｃ２を出力し、・・・・・・、また、行選択信号が（１１１）であれば、３ビット列が、（０００）であるときはそれぞれ０を、（００１）であるときはそれぞれＣ７、−Ｃ５、Ｃ３、−Ｃ１を、・・・、（１１１）であるときはそれぞれ７Ｃ７、−７Ｃ５、７Ｃ３、−７Ｃ１を出力するようになっている。
【０１３９】
これにより、（数３）及び（数４）からして、ＲＯＭ３２６〜３２８、３３０〜３３２、３３４〜３３６、３３８〜３４０は、入力される３ビット列がそれぞれＸ０＋Ｘ７のビット位置１、２、３のビットからなる３ビット列とビット位置４、５、６のビットからなる３ビット列とビット位置７、８、９のビットからなる３ビット列、Ｘ１＋Ｘ６のビット位置１、２、３のビットからなる３ビット列とビット位置４、５、６のビットからなる３ビット列とビット位置７、８、９のビットからなる３ビット列、Ｘ２＋Ｘ５のビット位置１、２、３のビットからなる３ビット列とビット位置４、５、６のビットからなる３ビット列とビット位置７、８、９のビットからなる３ビット列、Ｘ３＋Ｘ４のビット位置１、２、３のビットからなる３ビット列とビット位置４、５、６のビットからなる３ビット列とビット位置７、８、９のビットからなる３ビット列であれば、行選択信号が、（０００）のときはそれぞれＹ０の部分和を、（００１）のときはそれぞれＹ２の部分和を、（０１０）のときはそれぞれＹ４の部分和を、（０１１）のときはそれぞれＹ６の部分和を出力することになり、入力される３ビット列がそれぞれＸ０−Ｘ７のビット位置１、２、３のビットからなる３ビット列とビット位置４、５、６のビットからなる３ビット列とビット位置７、８、９のビットからなる３ビット列、Ｘ１−Ｘ６のビット位置１、２、３のビットからなる３ビット列とビット位置４、５、６のビットからなる３ビット列とビット位置７、８、９のビットからなる３ビット列、Ｘ２−Ｘ５のビット位置１、２、３のビットからなる３ビット列とビット位置４、５、６のビットからなる３ビット列とビット位置７、８、９のビットからなる３ビット列、Ｘ３−Ｘ４のビット位置１、２、３のビットからなる３ビット列とビット位置４、５、６のビットからなる３ビット列とビット位置７、８、９のビットからなる３ビット列であれば、行選択信号が、（１００）のときはそれぞれＹ１の部分和を、（１０１）のときはそれぞれＹ３の部分和を、（１１０）のときはそれぞれＹ５の部分和を、（１１１）のときはそれぞれＹ７の部分和を出力することになる。以下の説明は、このようにＲＯＭ３２６〜３２８、３３０〜３３２、３３４〜３３６、３３８〜３４０が、また、上述したようにＲＯＭ３２５、３２９、３３３、３３７が、それぞれ構成されていることを前提として行うものとする。
【０１４０】
まず、行選択回路３２３から行選択信号として（０００）がＲＯＭ３２５〜３４０に入力されるとともに、ＲＯＭ３２５、３２６、３２７、３２８にはビット分配器３１９からＸ０＋Ｘ７の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列がそれぞれ入力され、ＲＯＭ３２９、３３０、３３１、３３２にはビット分配器３２０からＸ１＋Ｘ６の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列がそれぞれ入力され、ＲＯＭ３３３、３３４、３３５、３３６にはビット分配器３２１からＸ２＋Ｘ５の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列がそれぞれ入力され、ＲＯＭ３３７、３３８、３３９、３４０にはビット分配器３２２からＸ３＋Ｘ４の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列がそれぞれ入力され、これにより、ＲＯＭ３２５、３２９、３３３、３３７からはそれぞれＸ１＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の最上位ビットからなる１ビット列を構成要素とするＹ０の部分和が、ＲＯＭ３２６、３３０、３３４、３３８からはそれぞれＸ１＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４のビット位置１、２、３のビットからなる３ビット列を構成要素とするＹ０の部分和が、ＲＯＭ３２７、３３１、３３５、３３９からはそれぞれＸ１＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４のビット位置４、５、６のビットからなる３ビット列を構成要素とするＹ０の部分和が、ＲＯＭ３２８、３３２、３３６、３４０からはそれぞれＸ１＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４のビット位置７、８、９のビットからなる３ビット列を構成要素とするＹ０の部分和が出力されることになる。
【０１４１】
次に、ＲＯＭ３２５、３２９、３３３、３３７の出力は加算器３４１、３４５、３４９にて合計され、ＲＯＭ３２６、３３０、３３４、３３８の出力は加算器３４２、３４６、３５０にて合計され、ＲＯＭ３２７、３３１、３３５、３３９の出力は加算器３４３、３４７、３５１にて合計され、ＲＯＭ３２８、３３２、３３６、３４０の出力は加算器３４４、３４８、３５２にて合計される。したがって、加算器３４９の出力はそれぞれＸ１＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４の最上位ビットからなる１ビット列を構成要素とするＹ０の４つの部分和の合計結果（以下、最上位ビットに関する部分和と表現する）となり、加算器３５０の出力はそれぞれＸ１＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４のビット位置１、２、３のビットからなる３ビット列を構成要素とするＹ０の４つの部分和の合計結果（以下、ビット位置１、２、３のビットに関する部分和と表現する）となり、加算器３５１の出力はそれぞれＸ１＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４のビット位置４、５、６のビットからなる３ビット列を構成要素とするＹ０の４つの部分和の合計結果（以下、ビット位置４、５、６のビットに関する部分和と表現する）となり、加算器３５２の出力はそれぞれＸ１＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４のビット位置７、８、９のビットからなる３ビット列を構成要素とするＹ０の４つの部分和の合計結果（以下、ビット位置７、８、９のビットに関する部分和と表現する）となる。
【０１４２】
次に、加算器３４９、３５１の出力は、それぞれ、シフタ３５３、３５４により３ビット上にシフトされた後、加算器３５５、３５６において、加算器３５０、３５２の出力と加算される。したがって、加算器３５５の出力は最上位ビットに関する部分和（３ビット上にシフトされている）とビット位置１、２、３のビットに関する部分和との加算結果となり、加算器３５６の出力はビット位置４、５、６にビットに関する部分和（３ビット上にシフトされている）とビット位置７、８、９のビットに関する部分和との加算結果となる。
【０１４３】
次に、加算器３５５の出力はシフタ３５７により６ビット上にシフトされた後、加算器３５８において、加算器３５６の出力と加算される。したがって、加算器３５８の出力は、最上位ビットに関する部分和（９ビット上にシフトされている）と、ビット位置１、２、３のビットに関する部分和（６ビット上にシフトされている）と、ビット位置４、５、６にビットに関する部分和（３ビット上にシフトされている）と、ビット位置７、８、９のビットに関する部分和との加算結果となる。
【０１４４】
そして、加算器３５８の出力は、丸め回路３５９で９ビットに丸められ、積和演算ブロック３２４から出力端子３６０へ出力される。
【０１４５】
以上の動作により、Ｘ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４それぞれの、最上位ビットからなる１ビット列を構成要素とするのＹ０の４つの部分和、ビット位置１、２、３のビットからなる３ビット列を構成要素とするのＹ０の４つの部分和、ビット位置４、５、６のビットからなる３ビット列を構成要素とするＹ０の４つの部分和、ビット位置７、８、９のビットからなる３ビット列を構成要素とするＹ０の４つの部分和、つまり、Ｙ０の全ての部分和である計１６個の部分和が同時に生成され、これらがビット位置に応じて（数２１）に示すようにシフトされて加算されるので、Ｙ０が計算されることになる。
【０１４６】
また、積和演算ブロック３２４において、ＲＯＭ３２５、３２６、３２７、３２８にはビット分配器３１９からＸ０＋Ｘ７の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６にビットからなる３ビット列、ビット位置７、８、９にビットからなる３ビット列がそれぞれ入力され、ＲＯＭ３２９、３３０、３３１、３３２にはビット分配器３２０からＸ１＋Ｘ６の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列がそれぞれ入力され、ＲＯＭ３３３、３３４、３３５、３３６にはビット分配器３２１からＸ２＋Ｘ５の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列がそれぞれ入力され、ＲＯＭ３３７、３３８、３３９、３４０にはビット分配器３２２からＸ３＋Ｘ４の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列がそれぞれ入力され、行選択回路３２３からＲＯＭ３２５〜３４０に入力される行選択信号が（００１）、（０１０）、あるいは、（０１１）である場合は、それぞれＹ２、Ｙ４、Ｙ６が計算されることになる。
【０１４７】
また、積和演算ブロック３２４において、ＲＯＭ３２５、３２６、３２７、３２８にはビット分配器３１９からＸ０−Ｘ７の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６にビットからなる３ビット列、ビット位置７、８、９にビットからなる３ビット列がそれぞれ入力され、ＲＯＭ３２９、３３０、３３１、３３２にはビット分配器３２０からＸ１−Ｘ６の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列がそれぞれ入力され、ＲＯＭ３３３、３３４、３３５、３３６にはビット分配器３２１からＸ２−Ｘ５の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列がそれぞれ入力され、ＲＯＭ３３７、３３８、３３９、３４０にはビット分配器３２２からＸ３−Ｘ４の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列がそれぞれ入力され、行選択回路３２３からＲＯＭ３２５〜３４０に入力される行選択信号が（１００）、（１０１）、（１１０）、あるいは、（１１１）である場合は、それぞれＹ１、Ｙ３、Ｙ５、Ｙ７が計算されることになる。
【０１４８】
そして、行選択回路３２３から３ビットの行選択信号として、（０００）、（００１）、・・・、（１１１）のどれが出力されるか、及び、ビット分配器３１９、３２０、３２１、３２２から最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列として、レジスタ３１１、３１３、３１５、３１７のそれぞれの出力であるＸ０＋Ｘ７、Ｘ１＋Ｘ６、Ｘ２＋Ｘ５、Ｘ３＋Ｘ４にそれぞれ基づいたものが出力されるか、あるいは、レジスタ３１２、３１４、３１６、３１８のそれぞれの出力であるＸ０−Ｘ７、Ｘ１−Ｘ６、Ｘ２−Ｘ５、Ｘ３−Ｘ４にそれぞれ基づいたものが出力されるかが、それぞれ適切に切り換わるようになっており、Ｙ０〜Ｙ７が所定の順で計算され、１次元ＤＣＴが完了する。
【０１４９】
ここで、当該１次元ＤＣＴ回路においては、入力端子３０１からＸｊ（ｊ＝０〜７）が順に８ステップで入力されるのに対し、積和演算ブロック３２４でのＹ０〜Ｙ７の演算には、Ｙ０〜Ｙ７の個数と同数の８ステップを要し、入力時間と演算時間が等しくなっている、つまり、当該ＤＣＴ回路はリアルタイムに演算を行うことができる。したがって、当該ＤＣＴ回路に入力端子３０１から絶え間なく入力を行っても、演算が間に合わなくなることはなく、入力端子３０１から絶え間なく入力を行うことが可能であり、画像圧縮を効率的に行うことができる。
【０１５０】
また、（数３）及び（数４）に示す行列演算を構成する８個の積和演算を、従来技術のように並列して行うのではなく、１つずつ時分割して行っており、さらに、１つの積和演算の対象である４個のデータ毎の最上位ビットからなる１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列をそれぞれ構成要素とする１６個の部分和、つまり、１つの積和演算に関する全ての部分和を、ＲＯＭ３２５〜３４０により同時に生成するので、積和演算ブロック３２４においては、レジスタを必要とせず、１５個の加算器で積和演算を行うことができる。また、部分和の加算を帰還させずに順送りして行うことができるようになるため、（数３）及び（数４）に示した行列の各係数を１０ビットとすると、ＲＯＭ３２５〜３４０の出力は１２ビットとなり、加算器３５６は１７ビット、加算器３５５は１５ビット、加算器３５０〜３５２は１４ビット、加算器３４２〜３４４、３４６〜３４８は１３ビット、加算器３４９は１２ビット、加算器３４１、３４５は１１ビットというように、入力側に近い加算器ほどその出力ビット幅が小さくて済み、さらに、信号変化も少なくなる。
【０１５１】
さらに、（数２１）に示すように、各部分和は１つの固定係数のみを有しているため、その取り得る値は固定係数の整数倍になり（図９、１０参照）、ＲＯＭに格納するに際して圧縮し易くなるので、ＲＯＭの容量を小さくすることができる。
【０１５２】
尚、上記各実施形態として１次元ＤＣＴについて示したが、上記各実施形態において（数７）及び（数８）に示した行列の各係数に基づいたデータをＲＯＭに格納しておき、加算器／差分器を積和演算ブロックの後段に設けることにより、１次元ＩＤＣＴをも実現することができる。
【０１５３】
また、Ｘｊ、Ｙｊのビット数、（数３）及び（数４）に示した行列の各係数のビット数などは上記各実施形態に示したものに限定されるものではなく、他のビット数であってもよい。
【０１５４】
また、上記第３実施形態においては、ビット分配器において、その入力データを最上位ビットの１ビット列、ビット位置１、２、３のビットからなる３ビット列、ビット位置４、５、６のビットからなる３ビット列、ビット位置７、８、９のビットからなる３ビット列の４組のビット列に分配したが、これに限定されるものではなく、その他のビット比に分配するようにしてもよいし、４組以外の組に分配するようにしてもよい。
【０１５５】
また、上記各実施形態においては、上位のビットからなるビット列を構成要素とする部分和をシフトさせるのにシフタを用いたが、このように特別な回路を設けずに、加算器への配線によりシフト処理を行うようにしてもよい。
【０１５６】
【発明の効果】
以上、説明したように、請求項１、２、３、４、５に記載のそれぞれの離散コサイン変換器によれば、メモリを使わずに、しかも、リアルタイムに演算を行うことができる上において、必要となるレジスタ、加算器、及び、シフタの数が減少し、また、入力側に近い加算器ほどその出力ビット幅が小さくて済み、さらに、信号変化も少なくなるので、回路規模を小さくすることができるとともに、消費電力が小さくなる。
【０１５７】
また、請求項３に記載の離散コサイン変換器によれば、必要となるＲＯＭの数が少なくなるという特有の効果が得られ、請求項４に記載の離散コサイン変換器によれば、必要となるＲＯＭの容量が小さくなるという特有の効果が得られる。
【図面の簡単な説明】
【図１】本発明の第１実施形態である１次元ＤＣＴ回路のブロック図。
【図２】図１の１次元ＤＣＴ回路におけるビット分配器１１９の構成図。
【図３】図１の１次元ＤＣＴ回路におけるＲＯＭ１２２〜１３１の入出力関係を示す図。
【図４】本発明の第２実施形態である１次元ＤＣＴ回路のブロック図。
【図５】図４の１次元ＤＣＴ回路におけるビット分配器２１９の構成図。
【図６】図４の１次元ＤＣＴ回路におけるＲＯＭ２２２の入出力関係を示す図。
【図７】本発明の第３実施形態である１次元ＤＣＴ回路のブロック図。
【図８】図７の１次元ＤＣＴ回路におけるビット分配器３１９〜３２２の構成図。
【図９】図７の１次元ＤＣＴ回路におけるＲＯＭ３２５〜３３２の入出力関係を示す図。
【図１０】図７の１次元ＤＣＴ回路におけるＲＯＭ３３３〜３４０の入出力関係を示す図。
【図１１】従来のリアルタイムでない１次元ＤＣＴ回路のブロック図。
【図１２】図１１の１次元ＤＣＴ回路におけるビット分配器４１９、４２０の構成を示す図。
【図１３】図１１の１次元ＤＣＴ回路におけるＲＯＭ４２９〜４３６、及び、図１４の１次元ＤＣＴ回路におけるＲＯＭ５２９〜５４４の入出力関係を示す図。
【図１４】従来のリアルタイムである１次元ＤＣＴ回路のブロック図。
【図１５】図１４の１次元ＤＣＴ回路におけるビット分配器５１９、５２０の構成を示す図。
【符号の説明】
１０１  入力端子
１０２〜１０９、１１１〜１１８  レジスタ
１１０  加算器／差分器
１１９  ビット分配器
１２０  行選択回路
１２１  積和演算ブロック
１２２〜１３１  ＲＯＭ
１３２〜１３６、１４２、１４３、１４６、１４８  シフタ
１３７〜１４１、１４４、１４５、１４７、１４９  加算器
１５０  丸め回路
１５１  出力端子
１５２、１５３  ビット操作部
１５４〜１６３  セレクタ
２０１  入力端子
２０２〜２０９、２１１〜２１８  レジスタ
２１０  加算器／差分器
２１９  ビット分配器
２２０  行選択回路
２２１  積和演算ブロック
２２２  ＲＯＭ
２２３〜２３２、２５５〜２６４  セレクタ
２３３〜２３７、２４３、２４４、２４７、２４９  シフタ
２３８〜２４２、２４５、２４６、２４８、２５０  加算器
２５１  丸め回路
２５２  出力端子
２５３、２５４  ビット操作部
３０１  入力端子
３０２〜３０９、３１１〜３１８  レジスタ
３１０  加算器／差分器
３１９〜３２２  ビット分配器
３２３  行選択回路
３２４  積和演算ブロック
３２５〜３４０  ＲＯＭ
３４１〜３５２、３５５、３５６、３５８  加算器
３５３、３５４、３５７  シフタ
３５９  丸め回路
３６０  出力端子
３６１〜３６４  セレクタ
４０１  入力端子
４０２〜４０９、４１１〜４１８  レジスタ
４４５〜４５２、４６９〜４７６  レジスタ
４１０  加算器／差分器
４１９、４２０  ビット分配器
４２１〜４２８  積和演算ブロック
４２９〜４３６  ＲＯＭ
４３７〜４４４  加算器
４５３〜４６０  シフタ
４６１〜４６８  丸め回路
４７７  出力セレクタ
４７８  出力端子
４７９  セレクタ
５０１  入力端子
５０２〜５０９、５１１〜５１８  レジスタ
５６９〜５７６、５９３〜６００  レジスタ
５１０  加算器／差分器
５１９、５２０  ビット分配器
５２１〜５２８  積和演算ブロック
５２９〜５４４  ＲＯＭ
５４５〜５５２、５７７〜５８４  シフタ
５５３〜５６８  加算器
５８５〜５９２  丸め回路
６０１  出力セレクタ
６０２  出力端子
６０３、６０４  セレクタ
【図１】
0003547567.tif 000025
【図２】
0003547567.tif 000026
【図３】
0003547567.tif 000027
【図４】
0003547567.tif 000028
【図５】
0003547567.tif 000029
【図６】
0003547567.tif 000030
【図７】
0003547567.tif 000031
【図８】
0003547567.tif 000032
【図９】
0003547567.tif 000033
【図１０】
0003547567.tif 000034
【図１１】
0003547567.tif 000035
【図１２】
0003547567.tif 000036
【図１３】
0003547567.tif 000037
【図１４】
0003547567.tif 000038
【図１５】
0003547567.tif 000039