(57)【要約】【課題】従来に比べて小さい回路規模でＭＤＣＴ演算に必要な複数種類の演算処理を実現するＭＤＣＴ演算回路を提供する。【解決手段】フラグレジスタ２２〜２９や制御信号によって、セレクタ３０〜４１を利用して、データレジスタ１１〜１８に格納するデータや利用する演算器５０〜５４を制御することで、従来に比べて小さい回路規模で、バタフライ演算を含むＭＤＣＴ演算処理を実現することができる。また、同じ回路の一部を利用して、加法定理を実行する演算を実現することで、バタフライ演算に必要な回転因子等の値を、演算により求めることができるため、これらの値を予め記憶装置に記憶しておく必要がない。【選択図】図１
2005275523.tif 000002
【特許請求の範囲】
【請求項１】
バタフライ演算によりＭＤＣＴ演算を行うＭＤＣＴ演算回路であって、
演算に利用するデータを入力する入力手段と、
前記入力手段から入力されるデータを用いて、前記バタフライ演算を実行するバタフライ演算処理手段と、
前記入力手段から入力されるデータを用いて、前記バタフライ演算を実行する回路の一部を利用して、加法定理を実現する演算を実行する加法定理処理手段と、
演算結果をデータとして出力する出力手段と、
を備えることを特徴とするＭＤＣＴ演算回路。
【請求項２】
請求項１に記載のＭＤＣＴ演算回路であって、
前記加法定理処理手段は、
前記入力手段から入力される４つのデータから、選択した２つのデータを乗算した演算結果と、残りの２つのデータを乗算した演算結果と、を加減算する手段、
を含むことを特徴とするＭＤＣＴ演算回路。
【請求項３】
請求項１または請求項２に記載のＭＤＣＴ演算回路であって、
前記バタフライ演算処理手段は、
前記加法定理処理手段により求めた演算結果と、別途前記入力手段から入力されるデータと、を加減算する手段、
を含むことを特徴とするＭＤＣＴ演算回路。
【請求項４】
請求項１ないし請求項３のいずれかに記載のＭＤＣＴ演算回路であって、
前記入力手段は、
前記加法定理処理手段の処理過程で得られた演算結果を入力データとして利用する手段、
を含むことを特徴とするＭＤＣＴ演算回路
【請求項５】
請求項１ないし請求項４のいずれかに記載のＭＤＣＴ演算回路であって、
前記加法定理処理手段は、さらに
前記入力手段から入力される所定のデータから前記バタフライ演算に利用する回転因子の値を求める手段、
を含むことを特徴とするＭＤＣＴ演算回路。
【請求項６】
請求項２に記載のＭＤＣＴ演算回路であって、
前記加法定理処理手段は、
前記入力手段から入力される前記４つのデータを格納する第１レジスタと、
前記第１レジスタから選択して読み出した２つのデータを乗算した演算結果を格納する第２レジスタと、
前記第２レジスタから読み出した２つのデータを加減算した演算結果を格納する第３レジスタと、
を備えることを特徴とするＭＤＣＴ演算回路。
【請求項７】
請求項３または請求項６に記載のＭＤＣＴ演算回路であって、
前記バタフライ演算処理手段は、
前記加法定理処理手段の備える第１ないし第３レジスタと、
前記別途入力されるデータを格納する第４レジスタと、
前記第３レジスタから読み出したデータと、前記第４レジスタから読み出したデータと、を加減算した演算結果を格納する第５レジスタと、
を備えることを特徴とするＭＤＣＴ演算回路。
【請求項８】
請求項４または請求項７に記載のＭＤＣＴ演算回路であって、
前記入力手段は、
前記第３レジスタから読み出したデータを前記第１レジスタに格納する手段、
を含むことを特徴とするＭＤＣＴ演算回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＭＤＣＴ演算回路に関する。
【背景技術】
【０００２】
ＭＰＥＧ４−ＡＡＣ（Advanced Audio Coding）等の圧縮符号化方法において、音声信号の圧縮符号化のためにＤＣＴ（Discrete Cosine Transform；離散コサイン変換）技術を改良したＭＤＣＴ（Modified Discrete Cosine Transform；変形離散コサイン変換）が利用されることがある。
【０００３】
図１１は、音声信号の圧縮符号化装置の一部を示したものであるが、このように、ＭＤＣＴは離散化、量子化、符号化の一連の圧縮符号化処理の一部として行われる処理である。一のモジュールとして利用されるＭＤＣＴ処理部１は、圧縮符号化装置の小型化やコスト削減等の目的から、その回路規模を縮小することが求められている。そのための技術として、例えば、ＭＤＣＴで利用するバタフライ演算回路の規模縮小を目的とする特許文献１がある。
【０００４】
【特許文献１】特開平１０−３０７８１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
特許文献１が目的とする回路規模の縮小化は、ＭＤＣＴ演算の一部であるＦＦＴ変換に係る部分のみを対象としている。しかし、ＭＤＣＴ演算を実現するためには、その他にも加算処理、乗算処理等の演算処理が必要となる。そのため、これらの演算を複数の回路で実現する従来の回路は、回路規模が大きく複雑なものとなったり、さらに、その回路規模を原因として処理が低速になるという問題があった。
【０００６】
そこで、この発明の課題は、従来に比べて小さい回路規模でありながら、ＭＤＣＴ演算に必要な加算処理、乗算処理、バタフライ演算等の複数種類の演算処理を実現可能なＭＤＣＴ演算回路を提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決すべく、請求項１の発明は、バタフライ演算によりＭＤＣＴ演算を行うＭＤＣＴ演算回路であって、演算に利用するデータを入力する入力手段と、前記入力手段から入力されるデータを用いて、前記バタフライ演算を実行するバタフライ演算処理手段と、前記入力手段から入力されるデータを用いて、前記バタフライ演算を実行する回路の一部を利用して加法定理を実現する演算を実行する加法定理処理手段と、演算結果をデータとして出力する出力手段とを備えることを特徴とする。
【０００８】
また、請求項２の発明は、請求項１の発明に係るＭＤＣＴ演算回路であって、前記加法定理処理手段は、前記入力手段から入力される４つのデータから、選択した２つのデータを乗算した演算結果と、残りの２つのデータを乗算した演算結果とを加減算する手段、を含むことを特徴とする。
【０００９】
また、請求項３の発明は、請求項１または請求項２の発明に係るＭＤＣＴ演算回路であって、前記バタフライ演算処理手段は、前記加法定理処理手段により求めた演算結果と、別途前記入力手段から入力されるデータとを加減算する手段、を含むことを特徴とする。
【００１０】
また、請求項４の発明は、請求項１ないし請求項３のいずれか発明に係るＭＤＣＴ演算回路であって、前記入力手段は、前記加法定理処理手段の処理過程で得られた演算結果を入力データとして利用する手段、を含むことを特徴とする。
【００１１】
また、請求項５の発明は、請求項１ないし請求項４のいずれかの発明に係るＭＤＣＴ演算回路であって、前記加法定理処理手段は、さらに入力される所定のデータから前記バタフライ演算に利用する回転因子の値を求める手段、を含むことを特徴とする。
【００１２】
また、請求項６の発明は、請求項２の発明に係るＭＤＣＴ演算回路であって、前記加法定理処理手段は、入力される前記４つのデータを格納する第１レジスタと、前記第１レジスタから選択して読み出した２つのデータを乗算した演算結果を格納する第２レジスタと、前記第２レジスタから読み出した２つのデータを加減算した演算結果を格納する第３レジスタとを備えることを特徴とする。
【００１３】
また、請求項７の発明は、請求項３または請求項６の発明に係るＭＤＣＴ演算回路であって、前記バタフライ演算処理手段は、前記加法定理処理手段の備える第１ないし第３レジスタと、前記別途入力されるデータを格納する第４レジスタと、前記第３レジスタから読み出したデータと、前記第４レジスタから読み出したデータとを加減算した演算結果を格納する第５レジスタとを備えることを特徴とする。
【００１４】
また、請求項８の発明は、請求項４または請求項７の発明に係るＭＤＣＴ演算回路であって、前記入力手段は、前記第３レジスタから読み出したデータを前記第１レジスタに格納する手段、を含むことを特徴とする。
【発明の効果】
【００１５】
請求項１に記載の発明によれば、バタフライ演算処理手段の一部を利用して加法定理を実現する演算を実行するため、それぞれを独立した回路とする場合に比べて、回路規模を縮小することができる。
【００１６】
請求項２または請求項６に記載の発明によれば、４つの入力データを元に加法定理を実現する演算を実行することができる。
【００１７】
請求項３または請求項７に記載の発明によれば、加法定理を実現する回路を利用して、同様の演算処理を実行することでバタフライ演算を実現することができる。
【００１８】
請求項４または請求項８に記載の発明によれば、処理過程で得られた演算結果を入力データとして利用できることで、記憶装置等の外部装置を利用せずに、ループ処理等の繰り返し演算を行うことができる。
【００１９】
請求項５に記載の発明によれば、バタフライ演算に必要となる回転因子の値を、所定の値から求めることで、全ての回転因子を予め、記憶装置等に記憶しておく必要がない。
【発明を実施するための最良の形態】
【００２０】
｛ＭＤＣＴ演算回路の構成｝
図１は、この発明の一の実施の形態に係るＭＤＣＴ演算回路１０を示す図である。図１の如く、ＭＤＣＴ演算回路１０は、演算するデータを格納するためのデータレジスタ１１〜２１と、ＭＤＣＴ演算回路１０の処理動作を規定するためのフラグレジスタ２２〜２９と、演算の対象となるデータや利用する演算結果を選択するためのセレクタ３０〜４１と、２つの加算器５０および５１と、２つの減算器５２および５３と、１つの乗算器５４と、から構成されている。そして、当該ＭＤＣＴ演算回路１０は、これらのほかに、入力データおよび出力データを記憶するためのメモリ（図示せず）と、ＭＤＣＴ演算回路１０に入力するデータを求める入力データ演算回路（図示せず）と、これらの構成要素を制御する制御部（図示せず）と、を備えている。
【００２１】
尚、メモリは、演算処理に必要となる余弦値や正弦値を記憶するために利用するほか、演算処理の結果を記憶するためにも利用する。また、フラグレジスタ２２〜２９は、制御部が、所定の場合にのみ値を通常の０（ゼロ）から１として、ＭＤＣＴ演算回路１０の動作の規定内容を示すほか、ＤＡＴＡＯＵＴ信号としてデータレジスタ２３から出力されるデータが、どのような演算の結果を示しているのかを識別したり、処理内容を他の装置へ通知するためにも利用する。
【００２２】
ここで、図１中、データレジスタ１１〜１４が第１レジスタ、データレジスタ１５および１６が第２レジスタ、データレジスタ１７および１８が第３レジスタ、データレジスタ１９および２０が第４レジスタ、データレジスタ２１が第５レジスタを構成している。また、図１に示すように、ＭＤＣＴ演算回路１０には、ＤＡＴＡ  Ｉ０，ＤＡＴＡ  Ｉ１，ＤＡＴＡ  Ｊ０およびＤＡＴＡ  Ｊ１等のデータが入力されるが、これらのデータを入力するための入力端子と、当該入力端子から入力されるデータを格納するデータレジスタ１１〜１４を選択制御するセレクタ３０〜３３と、が入力手段を構成する。さらに、ＭＤＣＴ演算回路１０で演算により求めた演算結果を外部へデータとして出力するための、セレクタ４１と、データレジスタ２１と、ＤＡＴＡＯＵＴ信号を出力する出力端子と、が出力手段を構成する。
【００２３】
ＭＤＣＴ演算回路１０は、図１１に示すような圧縮符号化回路を構成する一のモジュールとして利用される回路であって、制御部により制御されて、入力データ演算回路から入力されるデータ（図１のＲＥＤＡＴＡおよびＩＭＤＡＴＡ）に、ＭＤＣＴ演算に係る演算処理を施して、その演算結果をデータ（図１のＤＡＴＡＯＵＴ）としてメモリ上に出力する機能を有する。その処理内容は、ＭＤＣＴ演算に必要となる加算処理、減算処理、乗算処理、バタフライ演算等の複数種類の演算処理であり、これらの演算処理を上述したレジスタやセレクタ等の構成要素により、利用するデータや演算の内容を制御することで実現している。
【００２４】
則ち、ＭＤＣＴ演算回路１０は、バタフライ演算を実現する回路を図１０に示す構成で実現し、この回路の一部を利用して、後述する乗算・加減算処理や加法定理処理をも実現可能とするため、図１に示すような要素で構成されているのである。
【００２５】
そのため、加算処理、減算処理、乗算処理、バタフライ演算等をそれぞれ独立の回路で実現する従来のＭＤＣＴ演算回路に比べ、回路規模が小さく、従って製造コストも低く抑えることができる。
【００２６】
以下に、図１に示すＭＤＣＴ演算回路１０を利用した実際の演算処理の詳細について説明する。
【００２７】
｛ＭＤＣＴの演算内容｝
ＭＤＣＴ演算の内容は、式（１）のように表される。
【００２８】
【数１】
2005275523.tif 000003
【００２９】
ここで、ｎが入力データ数、ｆ(ｍ)が入力データの値である。その演算内容をレジスタやセレクタ等のハードウェアによって実現するため、式（１）はＭＤＣＴのＦＦＴによる解法により式（２）〜（７）のように分けて処理される。
【００３０】
【数２】
2005275523.tif 000004
【００３１】
【数３】
2005275523.tif 000005
【００３２】
【数４】
2005275523.tif 000006
【００３３】
【数５】
2005275523.tif 000007
【００３４】
【数６】
2005275523.tif 000008
【００３５】
【数７】
2005275523.tif 000009
【００３６】
ｎ個の入力データｆ(ｍ)について、式（２）から順に演算処理を行い、得られた結果を次式に代入する動作を繰り返すことで、最終的に式（７）でＦ(ｋ)を求め、式（１）を実現する。
【００３７】
尚、式（２）および式（３）については、図１に示すＭＤＣＴ演算回路１０の外部に備える入力データ演算回路（図示せず）により演算が行われる。入力データ演算回路は、従来のＭＤＣＴ演算回路が備えるものと同様の回路である。ＭＤＣＴ演算回路１０は、入力データ演算回路から、式（３）の演算結果の実数部および虚数部を入力データとして受け取って、式（４）〜（７）の演算を行い、その結果を出力する。式（４）および（６）の自然対数の底ｅに係る実際の演算は式（８）に示すオイラーの式を利用して実現し、式（５）のＦＦＴ演算は、バタフライ演算を利用して実現する。
【００３８】
【数８】
2005275523.tif 000010
【００３９】
｛式（４）の演算処理｝
式（４）を実現するための処理の流れを、図２のフローチャートに示す。以下に、当該フローチャートの各ステップの動作について説明する。
【００４０】
＜データの入力処理（ステップＳ１０）＞
まず、ステップＳ１０で、ｍ＝０のときの式（４）右辺の自然対数の底ｅに係る項の値を求める。このとき、ＭＤＣＴ演算回路１０で行う実際の演算は、式（８）に示したオイラーの式を利用して、式（９）のように変形した形でその右辺の余弦値および正弦値を求める処理として実現する。
【００４１】
【数９】
2005275523.tif 000011
【００４２】
ｍ＝０のときの式（９）の値を求めるため、図１に示したＭＤＣＴ演算回路１０は、回路の一部のみを動作させる。このとき、ＭＤＣＴ演算回路１０は、図３に示すような回路として、次のように動作する。
【００４３】
まず、ＡＤＤＳＴＡＲＴ信号を１とすると共に、予めメモリ上に格納してあったｍ＝０としたときの式（９）右辺の余弦値および正弦値を読み出す。読み出した余弦値および正弦値は、それぞれＤＡＴＡ  Ｊ０およびＤＡＴＡ  Ｊ１として入力され、ＡＤＤＳＴＡＲＴ信号により制御されたセレクタ３２および３３によって、データレジスタ１３および１４に格納される。データの格納が終了すると、フラグレジスタ２８のＡＤＤＶＡＬＩＤＥＮＤ信号１を出力して処理を終了する。
【００４４】
このように、ｍ＝０のときの式（９）の値は、ＭＤＣＴ演算回路１０により演算を行うのではなく、予めメモリ上に格納してあった値を読み出して利用する。
【００４５】
＜データの乗算・加減算処理（ステップＳ１１）＞
ＡＤＤＶＡＬＩＤＥＮＤ＝１となると、ＭＤＣＴ演算回路１０はステップＳ１１の動作を開始し、ｍ＝０のときの式（４）の値を求める。このとき、式（３）の演算結果を簡単に式（１０）のように表すものとする。
【００４６】
【数１０】
2005275523.tif 000012
【００４７】
式（４）は、式（９）と式（１０）との積であるから、式（４）の値を得るためには、式（４）の実数部および虚数部である式（１１）および（１２）の２つの値を求めればよい。
【００４８】
【数１１】
2005275523.tif 000013
【００４９】
【数１２】
2005275523.tif 000014
【００５０】
式（１１）および（１２）の値を求めるため、図１に示したＭＤＣＴ演算回路１０は、回路の一部のみを動作させる。このとき、ＭＤＣＴ演算回路１０は、図４に示すような回路として、次のように動作する。
【００５１】
まず、ＤＡＴＡＶＡＬＩＤ信号を１、ＢＵＴＴＥＲＦＬＹ信号を０とすると共に、別途求められた式（３）の実数部Ｒｅ(ｆｍ)および虚数部Ｉｍ(ｆｍ)の値を、それぞれ図４に示すＲＥＤＡＴＡおよびＩＭＤＡＴＡとして入力する。入力されたデータは、ＤＡＴＡＶＡＬＩＤ信号により制御されたセレクタ３０および３１によって、データレジスタ１１および１２に格納される。このとき、データレジスタ１３および１４には、先のステップＳ１０の動作によって、式（１１）および（１２）右辺に含まれる余弦値および正弦値が格納された状態にある。データレジスタ１１〜１４に格納された、これらの４つの値を利用して式（１１）および（１２）の値を求める。
【００５２】
まず、式（１１）の演算から開始する。
【００５３】
データレジスタ１１および１３から、セレクタ３４および３５を制御して読み出したＲｅ(ｆｍ)と余弦値とを、乗算器５４によって乗算して式（１１）右辺第１項の値を求め、データレジスタ１５に格納する。同様にデータレジスタ１２および１４から、セレクタ３４および３５を制御して読み出したＩｍ(ｆｍ)と正弦値とを、乗算器５４によって乗算して式（１１）右辺第２項の値を求め、データレジスタ１６に格納する。
【００５４】
次に、データレジスタ１５および１６から読み出した値を、加算器５０によって加算して式（１１）の値を求め、セレクタ３６を制御してデータレジスタ１７に格納する。
【００５５】
このとき、これらの処理と並行して式（１２）の演算を開始する。
【００５６】
データレジスタ１２および１３から、セレクタ３４および３５を制御して読み出したＩｍ(ｆｍ)と余弦値とを、乗算器５４によって乗算して式（１２）右辺第１項の値を求め、データレジスタ１５に格納する。同様にデータレジスタ１１および１４から、セレクタ３４および３５を制御して読み出したＲｅ(ｆｍ)と正弦値とを、乗算器５４によって乗算して式（１２）右辺第２項の値を求め、データレジスタ１６に格納する。
【００５７】
次に、フラグレジスタ２４のＪ０ＶＡＬＩＤＯＵＴの値を１とすることでセレクタ３８および４１を制御し、データレジスタ１７に格納した式（１１）の演算結果を読み出して、データレジスタ２１に格納する。格納された演算結果は、ＤＡＴＡＯＵＴ信号として出力し、メモリ上に記憶する。
【００５８】
このとき、これらの処理と並行して、データレジスタ１５および１６から読み出した値を、減算器５２によって減算して式（１２）の値を求め、セレクタ３７を制御してデータレジスタ１８に格納する。
【００５９】
次に、シフトレジスタ２５のＪ１ＶＡＬＩＤＯＵＴ信号の値を１とすることで、式（１２）の演算結果も、式（１１）の演算結果と同様に、セレクタ３８および４１を制御して、データレジスタ２１を介してＤＡＴＡＯＵＴ信号として出力し、メモリ上に記憶する。
【００６０】
このように、図４に示すような回路として動作することで、乗算・加減算処理を実現し、式（１１）および（１２）の演算結果を得ることができる。
【００６１】
尚、データレジスタ１５および１６から読み出したデータは、加算器５０および減算器５２の両方で演算されるが、どちらの演算結果を利用するかは、ＳＩＧＮＳＴＡＴＥ信号により制御する。ＳＩＧＮＳＴＡＴＥ信号は、値が０なら加算器５０による加算結果を、１なら減算器５２による減算結果を利用するように、セレクタ３６および３７を制御する制御信号である。当該制御信号により、加算結果または減算結果を、データレジスタ１７および１８のいずれに格納するかについて制御する。例えば、式（１１）および（１２）の値を求める処理を行うときは、ＳＩＧＮＳＴＡＴＥ信号を２ビット形成で１０（２進数）として入力する。その結果、先に行う式（１１）の演算のときは、１ビット目の値が０であることから、セレクタ３６および３７を制御して、加算器５０による加算結果をデータレジスタ１７に格納する。そして、後に行う式（１２）の演算のときには、２ビット目の値が１であることから、同様にセレクタ３６および３７を制御して、減算器５２による減算結果をデータレジスタ１８に格納する。このように、ＭＤＣＴ演算回路１０では、フラグレジスタの値やＳＩＧＮＳＴＡＴＥ信号のような制御信号を利用してセレクタ３０〜４１を制御し、ＭＤＣＴ演算回路１０で利用するデータの選択や格納するデータレジスタの選択を行っている。
【００６２】
ステップＳ１１に係る演算処理のタイミングチャートを図５に示す。このような順序で、ＭＤＣＴ演算回路１０を図４に示すような形で動作させて、式（１１）および（１２）の値、則ち式（４）の演算結果を求める。式（１１）および（１２）の値を求める処理が終了すると、処理の終了を示すためフラグレジスタ２９のＤＡＴＡＶＡＶＡＬＩＤＥＮＤ信号を１とする。
【００６３】
＜データの加法定理処理（ステップＳ１２（加法定理処理手段））＞
ＤＡＴＡＶＡＬＩＤＥＮＤ＝１となると、ＭＤＣＴ演算回路１０は、ステップＳ１２の動作を開始する。
【００６４】
ここで、ｍ＝１のときの式（９）の値を求めるが、この演算処理に加法定理を利用する。具体的には、式（１３）および（１４）に示す加法定理を利用して、式（９）右辺の余弦値および正弦値を求める。
【００６５】
【数１３】
2005275523.tif 000015
【００６６】
【数１４】
2005275523.tif 000016
【００６７】
このような処理を実現するため、図１に示したＭＤＣＴ演算回路１０は、回路の一部のみを動作させる。このとき、ＭＤＣＴ演算回路１０は、図６に示すような回路として、次のように動作する。
【００６８】
まず、フラグレジスタ２３のＡＤＤＶＡＬＩＤ信号を１とすると共に、ｍ＝１のときの式（１３）および（１４）の演算で必要となる余弦値ｃｏｓ（２π／ｎ）および正弦値ｓｉｎ（２π／ｎ）の値を読み出す。これらの余弦値および正弦値は、予めメモリ上に記憶されている。これらの余弦値および正弦値は、データの入力処理としてステップＳ１０で上述した処理と同様に、メモリから読み出してそれぞれＤＡＴＡ  Ｊ０およびＤＡＴＡ  Ｊ１として入力され、ＡＤＤＶＡＬＩＤ信号により制御されたセレクタ３０および３１によって、データレジスタ１１および１２に格納される。このとき、データレジスタ１３および１４には、先のステップＳ１０の動作によって、ｍ＝０とした時の、式（９）実数部の余弦値ｃｏｓ（π／４ｎ）および式（９）虚数部の正弦値ｓｉｎ（π／４ｎ）の値が格納された状態にある。よって、データレジスタ１１〜１４に格納された、これらの４つの値を利用して式（１３）および（１４）の値を求めることができる。
【００６９】
データレジスタ１１および１３から、セレクタ３４および３５を制御して読み出した余弦値同士を乗算器５４で乗算して式（１３）右辺第１項の値を求め、これをデータレジスタ１５に格納する。同様に、データレジスタ１２および１４から、セレクタ３４および３５を制御して読み出した正弦値同士を乗算器５４で乗算して式（１３）右辺第２項の値を求め、これをデータレジスタ１６に格納する。こうして求めた式（１３）右辺第１項および第２項の値をデータレジスタ１５および１６から読み出して、減算器５０により減算して式（１３）の値を求め、これをセレクタ３６を制御してデータレジスタ１７に格納する。
【００７０】
同様に、データレジスタ１１および１４から、セレクタ３４および３５を制御して読み出した余弦値と正弦値とを乗算器５４で乗算して式（１４）右辺第１項の値を求め、これをデータレジスタ１５に格納する。データレジスタ１２および１３から、セレクタ３４および３５を制御して読み出した正弦値と余弦値とを乗算器５４で乗算して式（１４）右辺第２項の値を求め、これをデータレジスタ１６に格納する。こうして求めた式（１４）右辺第１項および第２項の値をデータレジスタ１５および１６から読み出して、加算器５０により加算して式（１４）の値を求め、これをセレクタ３７を制御してデータレジスタ１８に格納する。
【００７１】
こうして、求められた式（１３）および（１４）の値は、後述するステップＳ１３の処理に利用するため、セレクタ３２および３３を制御して、データレジスタ１３および１４に格納しておく。
【００７２】
以上のステップＳ１２の処理を終えると、処理の終了を通知するためフラグレジスタ２８のＡＤＤＶＡＬＩＤＥＮＤ信号を１とする。
【００７３】
＜ステップＳ１３＞
ＡＤＤＶＡＬＩＤＥＮＤ＝１となると、次に、ステップＳ１３の動作を開始する。
【００７４】
ステップＳ１３の動作は、ｍ＝１以上のときの式（４）の値を求める処理である。式（４）の値を求める処理は、ｍ＝１として演算を行うこと以外は、データの乗算・加減算処理として上述したステップＳ１１の処理と全く同じ処理内容である。そして、この処理に必要となるｍ＝１のときの式（９）右辺の余弦値および正弦値は、ステップＳ１２の動作によって求め、データレジスタ１３および１４に格納済みである。よって、あとは別途求めたｍ＝１のときの式（３）の実数部Ｒｅ(ｆｍ)および虚数部Ｉｍ(ｆｍ)の値を、それぞれＲＥＤＡＴＡおよびＩＭＤＡＴＡとして入力し、セレクタ３０および３１を制御してデータレジスタ１１および１２に格納し、データレジスタ１１〜１４に格納されたこれら４つの値を利用して、上述したデータの乗算・加減算処理を行えば、式（１１）および（１２）の値、則ち式（４）の値を求めることができる。
【００７５】
＜Ｓ１２およびＳ１３のループ処理＞
その後、図２のフローチャートに示すように、ｍの値を１ずつ加算して、その値がデータ数ｎに対して４／ｎ−１の値と等しくなるまで、ステップＳ１２およびＳ１３のループ処理を行う。
【００７６】
ステップＳ１２では、式（９）の値を求めるために、式（１３）および（１４）の加法定理を利用している。ここで、ｍ＝ｒ＋１(ｒ＝１，２，３…)のときの式（１３）の値は、加法定理により、式（１５）に示すように、余弦値ｃｏｓ（２π／ｎ）および正弦値ｓｉｎ（２π／ｎ）の値と、ｍ＝ｒのときの式（１３）および（１４）の演算結果と、を利用して求めることができる。
【００７７】
【数１５】
2005275523.tif 000017
【００７８】
これは、式（１４）についても同様である。則ち、ｍ＝２以降に行う式（１３）および（１４）の値を求めるステップＳ１２の演算処理は、その前段階で行ったステップＳ１２の演算結果を格納したデータレジスタ１３および１４の値と、メモリから読み出してデータレジスタ１１および１２に格納した余弦値ｃｏｓ（２π／ｎ）および正弦値ｓｉｎ（２π／ｎ）の値と、を利用して加法定理処理を実行することによって実現することができる。
【００７９】
具体的な動作は次のようになる。例えば、ｍ＝２のときの式（１３）の演算を行うときには、ｍ＝１のときに行ったステップＳ１２の演算結果である余弦値および正弦値、則ち式（１３）および（１４）の演算結果が、データレジスタ１３および１４に格納された状態にある。よって、ステップＳ１０と同様の処理で、余弦値ｃｏｓ（２π／ｎ）および正弦値ｓｉｎ（２π／ｎ）の値をメモリから読み出してデータレジスタ１１および１２に格納すれば、ｍ＝２（ｒ＝１）のときの式（１５）の演算に必要な４つの値がデータレジスタ１１〜１４に格納された状態となる。これらのデータレジスタ１１〜１４の値を利用すれば、ｒ＝１のときの式（１５）の値、則ちｍ＝２のときの式（１３）の値を求めることができる。これは、式（１４）についても同様である。ここで、得られた演算結果を、データレジスタ１３および１４に格納しておけば、これらの値を利用して、次回ｍ＝３のときの式（１３）および（１４）を求める処理を、同様に行うことができる。
【００８０】
また、ｍ＝２以降のステップＳ１３の処理を行うときは、ステップＳ１２の動作によって、演算に必要な式（１３）および（１４）の値、則ち式（９）の余弦値および正弦値が、既にデータレジスタ１３および１４に格納された状態にあるので、ｍの値に対応した式（３）の演算結果をデータレジスタ１１および１２に入力すれば、式（１１）および（１２）の演算処理に必要な全ての値が揃うことになる。よって、上述したｍ＝１のときのステップＳ１３の処理と同じ処理を行えば、ｍの値に対応した式（１１）および（１２）の値、則ち式（４）の値を求めることができる。
【００８１】
こうして、式（１３）〜（１５）に示したような加法定理を利用してステップＳ１２で式（９）の余弦値および正弦値を求め、続いてステップＳ１３で、これらの値と別途入力される式（３）の演算結果とを利用して、式（４）の値を求める、という処理を繰り返すことで、ステップＳ１２およびＳ１３のループ処理を実現することができる。
【００８２】
求めた式（４）の演算結果は、後述する式（５）の演算に利用するため、ｍの値に対応させてメモリ上に記憶しておく。
【００８３】
このように、フラグレジスタや制御信号等を利用した制御によって、図１に示したＭＤＣＴ演算回路１０を図３、４および６に示すような回路として動作させることで、加算処理、減算処理、乗算処理を必要とする式（４）の演算処理を実現することができる。また、図２のフローチャート中のｍ＝２以降の演算で必要となる余弦値および正弦値は、加法定理を利用して求められるため、予めメモリに記憶しておくべき演算に必要なデータは、ｍ＝０および１のときの式（９）右辺の余弦値および正弦値、の４つの値だけでよい。よって、全ての処理を独立した回路で行う場合に比べ、回路規模を小さくできるだけでなく、演算に用いる値を記憶するために必要なメモリ容量も小さくて済む。
【００８４】
｛式（５）の演算処理｝
上述したように、式（４）の値を求める演算処理を行い、全ての演算結果をメモリ上に記憶すると、次に、これらの演算結果を利用して式（５）に示すＦＦＴ演算を行う。
【００８５】
式（５）のＦＦＴ演算は、バタフライ演算により実現する。このときのＭＤＣＴ演算回路１０の動作を、簡単のため、８個のデータを利用してＦＦＴ演算を行うものとして説明する。
【００８６】
８個のデータで式（５）のＦＦＴ演算を行うには、図７に示すようなバタフライ演算を行う必要がある。ここで、図中ｆｍ(ｎ)（ｎ＝０，１，２…７）は、ｍ＝ｎのときの式（４）の演算結果である。メモリから読み出したｆｍ(ｎ)の値をＭＤＣＴ演算回路１０に入力するのであるが、ｆｍ(ｎ)は、図７に示すような複雑な並びとなる。そこで、以下の説明を簡単にするためｆｍ(ｎ)をｆｍ’(ｎ)とする。則ち、図７に示すように、以下の説明でｆｍ’（１）としているのは、実際はメモリから読み出したｍ＝４のときの式（４）の演算結果ｆｍ(４)ということである。ここで、Ｗ0〜Ｗ3は回転因子であって、式（１６）のように表される。式中のＮはデータ数であり今の場合Ｎ＝８である。
【００８７】
【数１６】
2005275523.tif 000018
【００８８】
図７中に示すように、バタフライ演算によって、ｆｍ’(ｎ)の値からＣ0(ｎ)、Ｃ1(ｎ)の値を経て式（５）の演算結果であるＦk(ｎ)を求める。このときの動作を図８にフローチャートで示す。図７に示すバタフライ演算の内容を、順を追って示したものが図８のフローチャートである。以下に、当該フローチャートの各ステップの動作について説明する。
【００８９】
まず、ステップＳ２０で、Ｗ0を求める。式（１６）に示すＷnは、式（８）のオイラーの式を利用して、式（１７）のように変形し、式（１７）右辺の余弦値および正弦値を求める処理として実行する。
【００９０】
【数１７】
2005275523.tif 000019
【００９１】
ｎ＝０のときの式（１７）については、予めメモリに記憶しておいた余弦値および正弦値を読み出して利用する。これは、データの入力処理としてステップＳ１０で上述した方法と同様に処理することができる。具体的には、ＭＤＣＴ演算回路１０を、図４に示すような回路として動作させ、式（１７）右辺の余弦値および正弦値をメモリから読み出し、それぞれＤＡＴＡ  Ｊ０およびＤＡＴＡ  Ｊ１として入力し、これらをセレクタ３２および３３を介してデータレジスタ１３および１４に格納する。
【００９２】
＜バタフライ演算（ステップＳ２１（バタフライ演算処理手段））＞
次に、ステップ２１で、ｉ＝０〜３のときの、Ｃ0(２ｉ)およびＣ0(２ｉ＋１)の値を求める。この演算処理は、図９に示すようなバタフライ演算であって、式（１８）および（１９）に示す演算を行うことで実現する。
【００９３】
【数１８】
2005275523.tif 000020
【００９４】
【数１９】
2005275523.tif 000021
【００９５】
ｆｍ’(２ｉ)およびｆｍ’(２ｉ＋１)の値を式（１０）と同様に表し、Ｗ0を式（１７）と同様に表すと、式（１８）を求める演算は、その実数部および虚数部を求める式（２０）および（２１）に示す演算を行うことで実現できる。式（１９）についても同様に、式（２２）および（２３）に示す演算を行えばよい。
【００９６】
【数２０】
2005275523.tif 000022
【００９７】
【数２１】
2005275523.tif 000023
【００９８】
【数２２】
2005275523.tif 000024
【００９９】
【数２３】
2005275523.tif 000025
【０１００】
これらの式（２０）〜（２３）の値を求めるバタフライ演算処理を実現するため、図１に示したＭＤＣＴ演算回路１０は、回路の一部のみを動作させる。このとき、ＭＤＣＴ演算回路１０は、図１０に示す回路として、次のように動作する。以下に動作の詳細を説明する。
【０１０１】
ＤＡＴＡＶＡＬＩＤ信号およびＢＵＴＴＥＲＦＬＹ信号の出力を１にして、バタフライ演算処理を開始する。このとき、先のステップ２０の動作によって、データレジスタ１３および１４には、余弦値ｃｏｓ(−２πｎ／Ｎ)および正弦値ｓｉｎ(−２πｎ／Ｎ)が格納された状態にある。
【０１０２】
メモリから読み出したｆｍ’(２ｉ)の実数部および虚数部をＤＡＴＡ  Ｉ０およびＤＡＴＡ  Ｉ１として入力し、データレジスタ１９および２０に格納する。同様に、メモリから読み出したｆｍ’(２ｉ＋１)の実数部および虚数部をＤＡＴＡ  Ｊ０およびＤＡＴＡ  Ｊ１として入力し、セレクタ３０および３１を制御してデータレジスタ１１および１２に格納する。これにより、データレジスタ１１〜１４，１９および２０に、式（２０）および（２１）の演算に必要な全ての値が格納された状態となる。
【０１０３】
セレクタ３４および３５を制御して、データレジスタ１１および１３に格納されたｆｍ’(２ｉ＋１)の実数部および余弦値を、乗算器５４によって乗算して式（２０）右辺第２項の値を求め、これをデータレジスタ１５に格納する。同様に、セレクタ３４および３５を制御して、データレジスタ１２および１４に格納されたｆｍ’(２ｉ＋１)の虚数部および正弦値を、乗算器５４によって乗算して式（２０）右辺第３項の値を求め、これをデータレジスタ１６に格納する。
【０１０４】
次に、データレジスタ１５に格納された演算結果から、データレジスタ１６に格納された演算結果を減算器５２によって減算し、その結果を、セレクタ３６を制御してデータレジスタ１７に格納する。
【０１０５】
このとき、並行して、セレクタ３４および３５を制御して、データレジスタ１３および１２に格納された余弦値およびｆｍ’(２ｉ＋１)の虚数部を、乗算器５４によって乗算して式（２１）右辺第２項の値を求め、これをデータレジスタ１５に格納し、同様に、データレジスタ１４および１１に格納された正弦値およびｆｍ’(２ｉ＋１)の実数部を、乗算器５４によって乗算して式（２１）右辺第３項の値を求め、これをデータレジスタ１６に格納する。
【０１０６】
次に、セレクタ３９〜４１を制御して、式（２０）右辺第１項の値であるデータレジスタ１９に格納されたｆｍ’(２ｉ)の実数部と、データレジスタ１７に格納された演算結果を、加算器５１によって加算した結果を、データレジスタ２１に格納する。ここで格納されるデータが、式（２０）の演算結果である。このデータは、ＤＡＴＡＯＵＴ信号として出力され、メモリ上に記憶される。
【０１０７】
このとき、並行して、データレジスタ１５および１６に格納された演算結果同士を、加算器５０によって加算した結果を、セレクタ３７を制御してデータレジスタ１８に格納する。
【０１０８】
次に、セレクタ３９〜４１を制御して、式（２１）右辺第１項の値であるデータレジスタ２０に格納されたｆｍ’(２ｉ)の虚数部と、データレジスタ１８に格納された演算結果を、加算器５１によって加算した結果を、データレジスタ２１に格納する。ここで格納されるデータが、式（２１）の演算結果である。このデータも、ＤＡＴＡＯＵＴ信号として出力され、メモリ上に記憶される。
【０１０９】
こうして、式（２０）および（２１）の演算処理が終了すると、次に式（２２）および（２３）の演算処理を行う。式（２０）と（２２）、式（２１）と（２３）の右辺を比較すれば分かるように、これらの間で異なっているのは、第２項と第３項から求めた演算結果を、式（２０）および（２１）では第１項に加算し、式（２２）および（２３）では第１項から減算している点のみである。よって、式（２０）および（２１）の演算を終えたときには、既にデータレジスタ１７および１８に右辺第２項と第３項とから求めた演算結果が格納され、データレジスタ１９および２０には右辺第１項の値が格納された状態にあるので、これらの値を使って、加算器５１ではなく減算器５３によって処理すれば、式（２２）および（２３）の演算結果を得ることができる。
【０１１０】
尚、データの乗算・加減算処理として上述したように、加算器５０または減算器５２のいずれの演算器による結果を利用するかは、フラグレジスタＳＩＧＮＳＴＡＴＥにより制御すればよい。また、データレジスタ２１からＤＡＴＡＯＵＴ信号として出力するデータが、式（２０）〜（２３）のうち、どの式の演算結果であるかは、例えば、Ｊ０ＶＡＬＩＤＥＮＤ＝１のときにＤＡＴＡＯＵＴ信号として出力されるデータは式（２０）の演算結果であるというように、４つのフラグレジスタＪ０ＶＡＬＩＤＥＮＤ、Ｊ１ＶＡＬＩＤＥＮＤ、Ｉ０ＶＡＬＩＤＥＮＤ、およびＩ１ＶＡＬＩＤＥＮＤの値により制御すればよい。
【０１１１】
こうして、同様の処理を繰り返してバタフライ演算を実現することにより、Ｃ0（０）〜Ｃ0（７）の値を求めて、メモリ上に記憶することができる。
【０１１２】
このように、図１に示したＭＤＣＴ演算回路１０を、フラグレジスタ等により制御して、図１０に示すような回路として動作させることで、バタフライ演算を実現することができる。よって、バタフライ演算を行う回路を独立した回路として備える場合に比べ、回路規模を小さくすることができる。
【０１１３】
式（５）は、図８にフローチャートで示した処理によって実現するが、ステップＳ２３およびＳ２６は、いずれもステップＳ２１と同様のバタフライ演算である。よって、ステップＳ２１でｆｍ’を入力データとしていたものを、ステップＳ２１の演算結果であるＣ0とすればステップＳ２３の演算処理を、ステップＳ２３の演算結果であるＣ1とすればステップＳ２６の演算を、ステップＳ２１で説明したのと同じ処理で実現することができる。
【０１１４】
このほかに、ステップＳ２４の回転因子Ｗ2を求める処理と、ステップＳ２７で回転因子Ｗ0〜Ｗ3を求める処理が必要となる。以下に、これらの回転因子Ｗnを求める処理について説明する。
【０１１５】
＜回転因子Ｗnの演算処理＞
Ｗnを得る方法は２つある。
【０１１６】
第１の方法は、ステップＳ２０で上述したように、予め必要となる値をメモリに記憶しておき、これを読み出して利用する方法である。
【０１１７】
第２の方法は、データの加法定理処理としてステップＳ１２で上述した処理を利用して、演算により求める方法である。ステップＳ２４およびＳ２５では、この方法によってＷnを得る。以下に、ステップＳ２５の動作を例に、この方法について説明する。
【０１１８】
ステップＳ２５では、ステップＳ２６の処理で必要となるＷ0〜Ｗ3の値を求める。Ｗ0については、ステップＳ２０等の処理で必要となるため、対応する余弦値および正弦値を予めメモリに記憶してある。よって、ステップＳ２０で上述したように、この値をメモリから読み出して利用すればよい。次に、Ｗ1についても同様に、予めメモリに記憶しておいた余弦値ｃｏｓ（−２π／Ｎ）および正弦値ｓｉｎ（−２π／Ｎ）の値を読み出して利用する。そして、Ｗ2以降の値については、メモリから読み出すのではなく、演算処理によって求める。
【０１１９】
Ｗnを示す式（１７）は、余弦値および正弦値から成っており、ここでもデータの加法定理処理を利用できる。ｎ＝ｒのときの式（１７）右辺第１項の余弦値は、加法定理を利用すれば、式（２４）に示すように、ｎ＝ｒのときの式（１７）の余弦値および正弦値と、ｎ＝１のときの式（１７）の余弦値ｃｏｓ(−２π／Ｎ)および正弦値ｓｉｎ(−２π／Ｎ)と、を利用して求めることができる。これは式（１７）の正弦値についても同じである。
【０１２０】
【数２４】
2005275523.tif 000026
【０１２１】
ｎ＝１のときの式（１７）の余弦値及び正弦値は、上述したように、予めメモリに記憶してある。よって、これらの値をメモリから読み出して利用すれば、以下のように、ｎ＝２のときの式（１７）の値であるＷ2の値を求めることができる。
【０１２２】
ステップＳ２６で、ｊ＝１のときのバタフライ演算を終えたとき、データレジスタ１３および１４には、メモリから読み出したＷ1のときの式（１７）の余弦値および正弦値が格納された状態にある。よって、これらに加えて、ｎ＝１のときの式（１７）の値である余弦値ｃｏｓ（−２π／Ｎ）および正弦値ｓｉｎ（−２π／Ｎ）を、メモリから読み出してデータレジスタ１１および１２に格納すれば、式（２４）の演算に必要な全ての値がデータレジスタ１１〜１４に格納された状態になる。これらの値を用いて、図１０に示す回路の一部を図６のように動作させて、上述した加法定理処理を実行すれば、式（２４）の演算によって式（１７）右辺の余弦値を求め、これをデータレジスタ１３に格納することができる。そして、同様の処理を実行すれば、式（１７）右辺の正弦値をについても、これを求めてデータレジスタ１４に格納することができる。
【０１２３】
このように、Ｗrの式（１７）の余弦値および正弦値と、Ｗ1の式（１７）の余弦値および正弦値と、を加法定理によって、式（２４）に示すように加法定理を利用して処理すれば、Ｗr+1の式（１７）の値を求めることができる。そして、このときデータレジスタ１３および１４に格納しておけば、同様の処理によってＷr+2の式（１７）の値を同様に求めることができる。
【０１２４】
図７には、データ数Ｎ＝８のときのバタフライ演算の様子を示したが、実際のＭＤＣＴ演算のデータ数はこれよりも多く、必要となる回転因子Ｗnの数も多くなる。よって、必要なＷnの全ての値を予め記憶しておくには多くのメモリ容量を必要とする。これに対し、上述したように加法定理処理によりＷnを求めれば、Ｗ0およびＷ1の値のみをメモリに記憶するだけでよく、必要とするメモリ容量を大幅に低減することができる。
【０１２５】
｛式（６）および（７）の演算処理｝
上述したように、式（５）の値を求める演算処理を行い、全ての演算結果をメモリ上に記憶すると、次に、これらの演算結果を利用して式（６）に示す演算を行う。
【０１２６】
ここで、式（６）と式（４）を比較すれば分かるように、式（６）の演算は、式（４）で上述した処理と同様に処理できる。異なるのは入力データをｆｍではなく式（５）の処理で求めたＦkとすることのみである。
【０１２７】
次に、式（７）であるが、これは式（６）の演算過程で実現することになる。式（４）の演算結果を求める処理は、上述したように、実際は式（１１）および（１２）の演算結果を求める処理により実現する。同様に、式（６）も、式（１１）および（１２）のように実数部および虚数部を別々に求めることで実現する。そして、このとき求める実数部および虚数部が、まさに式（７）の演算結果となる。従って、式（７）については別途処理を行う必要はなく、式（６）を求めるときに同時に求めることができる。
【０１２８】
このように、図１に示したＭＤＣＴ演算回路１０を、フラグレジスタ等により制御して、図３、４、６および１０に示すような回路として動作させることで、式（４）〜（７）までの演算に必要な全ての処理を実現することができる。また、このとき、必要最低限の値のみをメモリに記憶しておけば、演算途中で必要となる余弦値や正弦値、および回転因子等の値を、加法定理を利用した演算処理によって求めることが可能である。よって、全ての処理を独立した回路で行う場合に比べ、回路規模を小さくでき、さらに演算に用いる値を記憶するために必要なメモリ容量も小さくて済む。
【０１２９】
尚、本実施例では、ＭＤＣＴ演算について説明したが、ＭＤＣＴ演算と逆ＭＤＣＴ演算とは、上述した式（２）〜（７）の一部符号等が異なるだけであるから、上述した各種の処理で利用する演算器を変更すれば、同じＭＤＣＴ演算回路１０で逆ＭＤＣＴ演算を実現することもできる。
【図面の簡単な説明】
【０１３０】
【図１】この発明の一の実施の形態に係るＭＤＣＴ演算回路を示す図である。
【図２】この発明のＭＤＣＴ演算の一部である式（４）の処理内容を示すフローチャートである。
【図３】この発明のステップＳ１０の処理を行うときのＭＤＣＴ演算回路を説明する図である。
【図４】この発明のステップＳ１１およびＳ１３の処理を行うときのＭＤＣＴ演算回路を説明する図である。
【図５】この発明のステップＳ１３の処理を行うときのＭＤＣＴ演算回路のタイミングチャートを示す図である。
【図６】この発明のステップＳ１２の処理を行うときのＭＤＣＴ演算回路を説明する図である。
【図７】この発明のＭＤＣＴ演算の一部である式（５）の処理内容を説明する図である。
【図８】この発明のＭＤＣＴ演算の一部である式（５）の処理内容を示すフローチャートである。
【図９】この発明の図７に示した処理内容の一部を説明する図である。
【図１０】この発明のＭＤＣＴ演算の一部であるバタフライ演算を行うときのＭＤＣＴ演算回路を説明する図である。
【図１１】ＭＤＣＴ演算を行う圧縮符号化装置の基本構成を説明する図である。
【符号の説明】
【０１３１】
１０        ＭＤＣＴ演算回路
１１〜２９  データレジスタ
３０〜４１  セレクタ
５０、５１  加算器
５２、５３  減算器
５４        乗算器
【図１】
2005275523.tif 000027
【図２】
2005275523.tif 000028
【図３】
2005275523.tif 000029
【図４】
2005275523.tif 000030
【図５】
2005275523.tif 000031
【図６】
2005275523.tif 000032
【図７】
2005275523.tif 000033
【図８】
2005275523.tif 000034
【図９】
2005275523.tif 000035
【図１０】
2005275523.tif 000036
【図１１】
2005275523.tif 000037