(57)【特許請求の範囲】
【請求項１】
演算周期毎に、処理対象サンプル列を更新しつつ、処理対象サンプル列の各サンプルと係数とを乗算し、各乗算結果を加算した信号処理結果を生成する信号処理を繰り返すデジタル信号処理装置において、
係数とサンプルとを乗算し、乗算結果と他のデータとの加算を行う乗加算処理を各々実行する複数の乗加算器と、
各演算周期において、当該演算周期での信号処理結果を得るのに必要な乗加算処理の一部を前記複数の乗加算器のうちの１つの乗加算器に実行させ、残りの乗加算処理を当該演算周期の直前の１または複数の演算周期において前記複数の乗加算器のうちの他の乗加算器に実行させ、各演算周期において、前記複数の乗加算器に実行させる乗加算処理のうち共通のサンプルを対象とした複数の乗加算処理を実行するために当該共通のサンプルをメモリから読み出し、当該複数の乗加算処理を前記複数の乗加算器に実行させる制御手段と
を具備することを特徴とするデジタル信号処理装置。
【請求項２】
コンピュータを、
係数とサンプルとを乗算し、乗算結果と他のデータとの加算を行う乗加算処理を各々実行する複数の乗加算器と、
各演算周期において、当該演算周期での信号処理結果を得るのに必要な乗加算処理の一部を前記複数の乗加算器のうちの１つの乗加算器に実行させ、残りの乗加算処理を当該演算周期の直前の１または複数の演算周期において前記複数の乗加算器のうちの他の乗加算器に実行させ、各演算周期において、前記複数の乗加算器に実行させる乗加算処理のうち共通のサンプルを対象とした複数の乗加算処理を実行するために当該共通のサンプルをメモリから読み出し、当該複数の乗加算処理を前記複数の乗加算器に実行させる制御手段と
して機能させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、音声、画像等のフィルタ処理に好適なデジタル信号処理装置およびプログラムに関する。
【背景技術】
【０００２】
周知の通り、ＤＳＰ（Digital Signal Processor；デジタル信号処理装置）は、高速動作可能な乗加算器を備えており、一定時間長の演算周期毎にこの乗加算器を利用した各種の信号処理を繰り返すプロセッサである。例えば音声信号の信号処理を実行するＤＳＰの場合、音声信号のサンプリング周期を演算周期とし、演算周期毎に処理対象サンプル列を更新しつつ処理対象サンプル列の各サンプルに対する係数の乗算処理と乗算結果の加算処理を繰り返す。音声信号に対するＦＩＲ（Finite Impulse Response；有限インパルス応答）フィルタ処理を例に挙げると、あるサンプリング周期（演算周期）Ｔ（ｎ）において、ＤＳＰは次式に示す各乗加算処理を乗加算器に順次実行させる。
ＡＣＣ＝Ｃ（０）＊Ｘ（ｎ）
ＡＣＣ＋＝Ｃ（１）＊Ｘ（ｎ−１）
ＡＣＣ＋＝Ｃ（２）＊Ｘ（ｎ−２）
：
ＡＣＣ＋＝Ｃ（ｋ−２）＊Ｘ（ｎ−ｋ＋２）
ＡＣＣ＋＝Ｃ（ｋ−１）＊Ｘ（ｎ−ｋ＋１）
……（１）
【０００３】
ここで、Ｘ（ｎ）は、当該サンプリング周期Ｔ（ｎ）において、処理対象サンプル列に加わったサンプル、Ｘ（ｎ−ｊ）は、当該サンプリング周期Ｔ（ｎ）のｊサンプリング周期だけ前のサンプリング周期Ｔ（ｎ−ｊ）において処理対象サンプル列に加わったサンプルである。また、“＊”は乗算処理を示す。また、“ＡＣＣ＝”は、右辺の乗算結果をアキュムレータＡＣＣに格納する処理を示し、“ＡＣＣ＋＝”は、右辺の乗算結果を現状のアキュムレータＡＣＣの格納内容に加えたものをアキュムレータＡＣＣに格納する処理を示す。
【０００４】
そして、新たなサンプリング周期Ｔ（ｎ＋１）になると、ＤＳＰは次式に示す各乗加算処理を乗加算器に順次実行させる。
ＡＣＣ＝Ｃ（０）＊Ｘ（ｎ＋１）
ＡＣＣ＋＝Ｃ（１）＊Ｘ（ｎ）
ＡＣＣ＋＝Ｃ（２）＊Ｘ（ｎ−１）
：
ＡＣＣ＋＝Ｃ（ｋ−２）＊Ｘ（ｎ−ｋ＋３）
ＡＣＣ＋＝Ｃ（ｋ−１）＊Ｘ（ｎ−ｋ＋２）
……（２）
【０００５】
このように、サンプリング周期Ｔ（ｎ＋１）では、新たなサンプルＸ（ｎ＋１）を処理対象サンプル列に加えるとともに、最も古いサンプルＸ（ｎ−ｋ＋１）を処理対象サンプル列から追い出すサンプル列更新処理が行われ、このサンプル列更新処理を経た処理対象サンプル列Ｘ（ｎ＋１）〜Ｘ（ｎ−ｋ＋２）に対して、サンプリング周期Ｔ（ｎ）において使用したものを同じ係数列Ｃ（０）〜Ｃ（ｋ−１）を用いた乗加算処理（この例では畳み込み演算処理）が実行される。
【０００６】
以上、音声信号に対するＦＩＲフィルタ処理を例に挙げたが、ＩＩＲフィルタ（Infinite
Impulse Response；無限インパルス応答）処理等の他の信号処理を実行する動作も基本的に上記と同様である。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−３１９９４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、ＤＳＰを利用した電子機器として高機能なものを実現しようとすると、ＤＳＰの実行対象である信号処理が大規模化し、１演算周期の間に実行すべき乗加算処理の回数が増加することとなる。しかしながら、乗加算器が１演算周期の間に実行可能な乗加算処理の回数には限界がある。従来技術の下では、この乗加算処理の実行回数の限界がＤＳＰを利用した電子機器の高機能化の障害となっていた。
【０００９】
この問題を解決するために、例えば２個の乗加算器をＤＳＰに設けることが考えられる。この２個の乗加算器を利用して、２種類の乗加算処理を並列実行させることができれば、計算上は、１演算周期内に実行可能な乗加算処理の回数を２倍にすることができる。
【００１０】
しかしながら、２個の乗加算器を利用した２種類の乗加算処理を並列実行するためには、それらの乗加算処理に使用する２個のサンプルをメモリから読み出さなくてはならない。現状の技術では、メモリのアクセス時間の制約があるため、乗加算器が乗加算処理を１回実行する１サイクルの間に２個のサンプルをメモリから読み出すことは困難である。このため、１演算周期内に実行可能な乗加算処理の回数を増加させることは困難である。
【００１１】
この問題を解決するために、例えばメモリの１アドレスに対応した記憶領域内にサンプル２個を格納し、必要なサンプルを読み出すためのメモリアクセス回数を減らす方法を採ることも考えられる。すなわち、例えば前掲式（１）の演算に使用するサンプルＸ（ｎ）およびＸ（ｎ−１）の組、サンプルＸ（ｎ−２）およびＸ（ｎ−３）の組、…を各々１アドレスに対応した各記憶領域に格納しておくのである。
【００１２】
この場合、上述したサンプリング周期Ｔ（ｎ）では、サンプルＸ（ｎ）およびＸ（ｎ−１）の組を１回のメモリアクセスにより読み出して係数Ｃ（０）およびＣ（１）と各サンプルとの乗算および乗算結果の加算を実行し、後続のサンプルの組についても同様の演算を繰り返すことが可能である。
【００１３】
しかしながら、次のサンプリング周期Ｔ（ｎ＋１）になると、前掲式（２）に示すように、係数Ｃ（０）およびＣ（１）との乗算に使用するサンプルは、サンプルＸ（ｎ＋１）およびＸ（ｎ）の組となる。これらのサンプルの組は、１アドレスに対応した記憶領域に格納されていないため、１回のメモリアクセスにより読み出すことはできない。
【００１４】
このように１アドレスに対応した記憶領域に２個のサンプルを格納する方法を採ったとしても、複数の演算周期を通じてみると、メモリアクセス回数を減らすことができない。結局、この方法を採ったとしても、１演算周期内に実行可能な乗加算処理の回数を増加させることは困難である。
【００１５】
本発明は以上説明した事情に鑑みてなされたものであり、１演算周期内に実行可能な乗加算処理の回数を増加させることが可能なＤＳＰおよびそのプログラムを提供することを目的としている。
【課題を解決するための手段】
【００１６】
この発明は、演算周期毎に、処理対象サンプル列を更新しつつ、処理対象サンプル列の各サンプルと係数とを乗算し、各乗算結果を加算した信号処理結果を生成する信号処理を繰り返すデジタル信号処理装置において、係数とサンプルとを乗算し、乗算結果と他のデータとの加算を行う乗加算処理を各々実行する複数の乗加算器と、各演算周期において、当該演算周期での信号処理結果を得るのに必要な乗加算処理の一部を前記複数の乗加算器のうちの１つの乗加算器に実行させ、残りの乗加算処理を当該演算周期の直前の１または複数の演算周期において前記複数の乗加算器のうちの他の乗加算器に実行させ、各演算周期において、前記複数の乗加算器に実行させる乗加算処理のうち共通のサンプルを対象とした複数の乗加算処理を実行するために当該共通のサンプルをメモリから読み出し、当該複数の乗加算処理を前記複数の乗加算器に実行させる制御手段とを具備することを特徴とするデジタル信号処理装置を提供する。また、この発明は、コンピュータを上記複数の乗加算器および制御手段として機能させるプログラムを提供する。
【００１７】
かかる発明によれば、複数の連続した演算周期内において、共通のサンプルを対象とする複数の乗加算処理が１回のメモリからのサンプル読み出し後に同時に実行される。従って、１演算周期内に実行可能な乗加算処理の回数を増加させることができる。
【００１８】
なお、ＤＳＰの高速化技術に関する文献として特許文献１がある。しかしながら、この特許文献１は、ＦＩＲフィルタ処理において、同一係数との乗算を行うサンプルを予め加算して加算結果を当該係数と乗算することにより乗算回数を減らす技術を開示するものであり、本願発明のようにサンプルのメモリからの読み出し回数を減らす手段を開示するものではない。
【図面の簡単な説明】
【００１９】
【図１】この発明の第１実施形態であるＤＳＰの構成を示すブロック図である。
【図２】同ＤＳＰの実行対象の例である各種のフィルタ処理を示す図である。
【図３】同ＤＳＰの第１のフィルタ処理実行例を示す図である。
【図４】同ＤＳＰの第２のフィルタ処理実行例を示す図である。
【図５】同ＤＳＰの第３のフィルタ処理実行例を示す図である。
【図６】この発明の第２実施形態であるＤＳＰのフィルタ処理実行例を示す図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照し、この発明の実施形態について説明する。
＜第１実施形態＞
図１は、この発明の第１実施形態であるＤＳＰの構成を示すブロック図である。
図１に示すように、本実施形態によるＤＳＰは、制御部１と、２個の乗加算器ＭＡＣ０およびＭＡＣ１と、レジスタ部２と、データメモリ３とを有する。制御部１は、フィルタ処理を実行するためのプログラムを記憶したプログラムメモリと、このプログラムに記憶されたプログラムの各命令を順次読み出して解釈し、乗加算器ＭＡＣ０およびＭＡＣ１の制御、レジスタ部２の制御等を行う命令デコーダと、フィルタ処理に使用される係数を記憶する係数メモリを含む。レジスタ部２は、各種のレジスタの集合体である。このレジスタ部２を構成する各レジスタには、乗加算器ＭＡＣ０およびＭＡＣ１の各乗加算結果を記憶するためのアキュムレータＡＣＣ０およびＡＣＣ１や、フィルタ処理に使用する係数を記憶するためのレジスタ（図示略）が含まれる。データメモリ３は、信号処理に使用する処理対象サンプル列を記憶するためのメモリである。このデータメモリ３は、図示の例では、ＤＳＰに内蔵された要素であるが、ＤＳＰの外付けのメモリであってもよい。
【００２１】
データメモリ３には、演算周期毎に新たに処理対象サンプル列に加わるサンプルが書き込まれる。制御部１は、プログラムメモリに記憶されたプログラムに従って乗加算器ＭＡＣ０およびＭＡＣ１とレジスタ部２を制御し、現時点までにデータメモリ３に記憶された処理対象サンプル列を使用したフィルタ処理を実行する。
【００２２】
本実施形態の特徴は、制御部１がフィルタ処理のために実行するプログラムの内容、特にフィルタ処理を構成する各種の乗加算処理を乗加算器ＭＡＣ０およびＭＡＣ１に実行させる手順にある。さらに詳述すると、本実施形態において制御部１は、各演算周期において、当該演算周期での信号処理結果を得るのに必要な乗加算処理の一部を乗加算器ＭＡＣ０に実行させ、残りの乗加算処理を当該演算周期の直前の演算周期において乗加算器ＭＡＣ１に実行させ、各演算周期において、乗加算器ＭＡＣ０およびＭＡＣ１に実行させる乗加算処理のうち共通のサンプルを対象とした複数の乗加算処理を実行するために当該サンプルをデータメモリ３から読み出し、当該複数の乗加算処理を乗加算器ＭＡＣ０およびＭＡＣ１に実行させる。
【００２３】
図２は、本実施形態によるＤＳＰの実行対象の例である各種のフィルタ処理を示す図である。図２（ａ）は周知のＦＩＲフィルタ処理、図２（ｂ）は周知のＩＩＲフィルタ処理、図２（ｃ）は画像に対して実行される周知のフィルタ処理を各々示している。以下、これらの各例について、本実施形態において実行されるフィルタ処理の手順を説明する。
【００２４】
図３は、本実施形態によるＤＳＰの図２（ａ）のフィルタ処理の実行例を示す図である。仮に１個の乗加算器のみを使用するとした場合、図２（ａ）のフィルタ処理結果を得るために、演算周期Ｔ（ｎ）では、次式の演算を１個の乗加算器に実行させる必要がある。
ＡＣＣ＝Ｃ（０）＊Ｘ（ｎ）
ＡＣＣ＋＝Ｃ（１）＊Ｘ（ｎ−１）
ＡＣＣ＋＝Ｃ（２）＊Ｘ（ｎ−２）
ＡＣＣ＋＝Ｃ（３）＊Ｘ（ｎ−３）
……（３）
この場合、サンプルＸ（ｎ）〜Ｘ（ｎ−３）を得るために、１演算周期内に４回のメモリアクセスを行う必要がある。
【００２５】
また、１つ前の演算周期Ｔ（ｎ−１）では、次式の演算を１個の乗加算器に実行させる必要がある。
ＡＣＣ＝Ｃ（０）＊Ｘ（ｎ−１）
ＡＣＣ＋＝Ｃ（１）＊Ｘ（ｎ−２）
ＡＣＣ＋＝Ｃ（２）＊Ｘ（ｎ−３）
ＡＣＣ＋＝Ｃ（３）＊Ｘ（ｎ−４）
……（４）
この場合も、サンプルＸ（ｎ−１）〜Ｘ（ｎ−４）を得るために、１演算周期内に４回のメモリアクセスを行う必要がある。
【００２６】
しかしながら、２つの演算周期Ｔ（ｎ−１）およびＴ（ｎ）を通じて見ると、両演算周期において実行すべき乗加算処理群は、共通するサンプルＸ（ｎ−１）、Ｘ（ｎ−２）、Ｘ（ｎ−３）を対象とした乗加算処理の組を含んでいる。
【００２７】
そこで、制御部１は、演算周期Ｔ（ｎ）では前掲式（３）の各乗加算処理の一部のみを乗加算器ＭＡＣ０に実行させ、残りの乗加算処理を直前の演算周期Ｔ（ｎ−１）に乗加算器ＭＡＣ１に実行させ、この演算周期Ｔ（ｎ−１）における乗加算器ＭＡＣ１の乗加算処理の結果を演算周期Ｔ（ｎ）に乗加算器ＭＡＣ０に引き継がせる。具体的には次の通りである。
【００２８】
まず、制御部１は、演算周期Ｔ（ｎ−１）において次式の乗加算処理を乗加算器ＭＡＣ１に実行させる。
ＡＣＣ１＝Ｃ（１）＊Ｘ（ｎ−１）
ＡＣＣ１＋＝Ｃ（３）＊Ｘ（ｎ−３）
……（５）
【００２９】
次に制御部１は、演算周期Ｔ（ｎ）において次式の乗加算処理を乗加算器ＭＡＣ０に実行させる。
ＡＣＣ０＝ＡＣＣ１
ＡＣＣ０＋＝Ｃ（０）＊Ｘ（ｎ）
ＡＣＣ０＋＝Ｃ（２）＊Ｘ（ｎ−２）
……（６）
この結果、演算周期Ｔ（ｎ）では最終的に前掲式（３）の演算処理結果と同じものがアキュムレータＡＣＣ０に格納されることとなる。
【００３０】
以上の関係は演算周期Ｔ（ｎ）と演算周期Ｔ（ｎ＋１）との間でも成立する。１個の乗加算器ＭＡＣのみが使用可能であるとすると、演算周期Ｔ（ｎ＋１）では、次式の演算を乗加算器ＭＡＣに実行させる必要がある。
ＡＣＣ＝Ｃ（０）＊Ｘ（ｎ＋１）
ＡＣＣ＋＝Ｃ（１）＊Ｘ（ｎ）
ＡＣＣ＋＝Ｃ（２）＊Ｘ（ｎ−１）
ＡＣＣ＋＝Ｃ（３）＊Ｘ（ｎ−２）
……（７）
そして、１つ前の演算周期Ｔ（ｎ）では、前掲式（３）の演算を１個の乗加算器ＭＡＣに実行させる必要がある。
【００３１】
そこで、制御部１は、演算周期Ｔ（ｎ）において次式の乗加算処理を乗加算器ＭＡＣ１に実行させる。
ＡＣＣ１＝Ｃ（１）＊Ｘ（ｎ）
ＡＣＣ１＋＝Ｃ（３）＊Ｘ（ｎ−２）
……（８）
【００３２】
次に制御部１は、演算周期Ｔ（ｎ＋１）において次式の乗加算処理を乗加算器ＭＡＣ０に実行させる。
ＡＣＣ０＝ＡＣＣ１
ＡＣＣ０＋＝Ｃ（０）＊Ｘ（ｎ＋１）
ＡＣＣ０＋＝Ｃ（２）＊Ｘ（ｎ−１）
……（９）
この結果、演算周期Ｔ（ｎ＋１）では最終的に前掲式（７）の演算処理結果と同じものがアキュムレータＡＣＣ０に格納されることとなる。
【００３３】
ここで、演算周期Ｔ（ｎ）に着目すると、共通のサンプルＸ（ｎ）を使用した２つの乗加算処理の組と、共通のサンプルＸ（ｎ−２）を使用した２つの乗加算処理の組が実行対象となっている。
【００３４】
そこで、演算周期Ｔ（ｎ）において、制御部１は、サンプルＸ（ｎ）をデータメモリ３から読み出して、次式の乗加算処理を乗加算器ＭＡＣ０およびＭＡＣ１に同時に実行させる。
ＡＣＣ０＋＝Ｃ（０）＊Ｘ（ｎ）
ＡＣＣ１＝Ｃ（１）＊Ｘ（ｎ）
……（１０）
【００３５】
次に、制御部１は、サンプルＸ（ｎ−２）をデータメモリ３から読み出して、次式の乗加算処理を乗加算器ＭＡＣ０およびＭＡＣ１に同時に実行させるのである。
ＡＣＣ０＋＝Ｃ（２）＊Ｘ（ｎ−２）
ＡＣＣ１＋＝Ｃ（３）＊Ｘ（ｎ−２）
……（１１）
他の演算周期Ｔ（ｎ−１）およびＴ（ｎ＋１）についても同様である。
【００３６】
このように１個の乗加算器ＭＡＣを使用したフィルタ処理では１演算周期内に４回のメモリアクセスが必要であったが、本実施形態における２個の乗加算器ＭＡＣ０およびＭＡＣ１を使用したフィルタ処理では、１演算周期内に２回のメモリアクセスを行えば済む。
【００３７】
図４は、本実施形態によるＤＳＰの図２（ｂ）のフィルタ処理の実行例を示す図である。仮に１個の乗加算器のみを使用するとした場合、図２（ｂ）のフィルタ処理結果を得るために、演算周期Ｔ（ｎ）では、次式の演算を１個の乗加算器ＭＡＣに実行させる必要がある。
ＡＣＣ＋＝Ｃ（０）＊Ｘ（ｎ）
ＡＣＣ＋＝Ｃ（１）＊Ｘ（ｎ−１）
ＡＣＣ＋＝Ｃ（２）＊Ｘ（ｎ−２）
ＡＣＣ＋＝Ｃ（３）＊Ｙ（ｎ−１）
ＡＣＣ＋＝Ｃ（４）＊Ｙ（ｎ−２）
……（１２）
上記式（１３）の各演算を実行することにより、最終的に演算周期Ｔ（ｎ）におけるＩＩＲフィルタの出力信号Ｙ（ｎ）がアキュムレータＡＣＣに格納される。
この場合、１演算周期内に５回のメモリアクセスを行う必要がある。
【００３８】
また、１つ前の演算周期Ｔ（ｎ−１）では、次式の演算を１個の乗加算器ＭＡＣに実行させる必要がある。
ＡＣＣ＋＝Ｃ（０）＊Ｘ（ｎ−１）
ＡＣＣ＋＝Ｃ（１）＊Ｘ（ｎ−２）
ＡＣＣ＋＝Ｃ（２）＊Ｘ（ｎ−３）
ＡＣＣ＋＝Ｃ（３）＊Ｙ（ｎ−２）
ＡＣＣ＋＝Ｃ（４）＊Ｙ（ｎ−３）
……（１３）
この場合も、１演算周期内に５回のメモリアクセスを行う必要がある。
【００３９】
そこで、制御部１は、演算周期Ｔ（ｎ）では前掲式（１２）の各乗加算処理の一部のみを乗加算器ＭＡＣ０に実行させ、残りの乗加算処理を直前の演算周期Ｔ（ｎ−１）に乗加算器ＭＡＣ１に実行させ、この演算周期Ｔ（ｎ−１）における乗加算器ＭＡＣ１の乗加算処理の結果を演算周期Ｔ（ｎ）に乗加算器ＭＡＣ０に引き継がせる。具体的には次の通りである。
【００４０】
まず、制御部１は、演算周期Ｔ（ｎ−１）において次式の乗加算処理を乗加算器ＭＡＣ１に実行させる。
ＡＣＣ１＝Ｃ（１）＊Ｘ（ｎ−１）
ＡＣＣ１＋＝Ｃ（４）＊Ｙ（ｎ−２）
……（１４）
【００４１】
次に制御部１は、演算周期Ｔ（ｎ）において次式の乗加算処理を乗加算器ＭＡＣ０に実行させる。
ＡＣＣ０＝ＡＣＣ１
ＡＣＣ０＋＝Ｃ（０）＊Ｘ（ｎ）
ＡＣＣ０＋＝Ｃ（２）＊Ｘ（ｎ−２）
ＡＣＣ０＋＝Ｃ（３）＊Ｙ（ｎ−１）
……（１５）
この結果、演算周期Ｔ（ｎ）では最終的に前掲式（１２）の演算処理結果と同じものがアキュムレータＡＣＣ０に格納されることとなる。
【００４２】
以上の関係は演算周期Ｔ（ｎ）と演算周期Ｔ（ｎ＋１）との間でも成立する。このため、演算周期Ｔ（ｎ）において乗加算器ＭＡＣ０およびＭＡＣ１が実行する乗加算処理の内容は図４に示す通りとなる。そこで、演算周期Ｔ（ｎ）において制御部１は、サンプルＸ（ｎ）をデータメモリ３から読み出して、ＡＣＣ０＋＝Ｃ（０）＊Ｘ（ｎ）なる乗加算処理とＡＣＣ１＝Ｃ（１）＊Ｘ（ｎ）なる乗加算処理とを乗加算器ＭＡＣ０およびＭＡＣ１に各々実行させる。次いでサンプルＸ（ｎ−２）をデータメモリ３から読み出して、ＡＣＣ０＋＝Ｃ（２）＊Ｘ（ｎ−２）なる乗加算処理を乗加算器ＭＡＣ０に実行させる。次いでサンプルＹ（ｎ−１）をデータメモリ３から読み出して、ＡＣＣ０＋＝Ｃ（３）＊Ｙ（ｎ−１）なる乗加算処理とＡＣＣ１＋＝Ｃ（４）＊Ｙ（ｎ−１）なる乗加算処理とを乗加算器ＭＡＣ０およびＭＡＣ１に各々実行させる。
【００４３】
以上のように図２（ｂ）のＩＩＲフィルタ処理を１個の乗加算器を使用して実行する場合には１演算周期内に５回のメモリアクセスが必要であったが、本実施形態における２個の乗加算器ＭＡＣ０およびＭＡＣ１を使用したＩＩＲフィルタ処理では、１演算周期内に３回のメモリアクセスを行えば済む。
【００４４】
図５は、本実施形態によるＤＳＰの図２（ｃ）のフィルタ処理の実行例を示す図である。図２（ｃ）のフィルタ処理では、演算周期毎に３行３列の９個の画素Ｐ（ｉｘ＋Δｘ、ｉｙ＋Δｙ）（Δｘ＝−１〜＋１、Δｙ＝−１〜＋１）に係数Ｃ（０）〜Ｃ（８）を乗算して加算し、３行３列の画素行列の中心の画素Ｐ（ｉｘ、ｉｙ）についてのフィルタ処理結果を生成する。そして、演算周期毎に係数の乗算対象となる３行３列の画素を横方向に１画素シフトする（ｉｘ＝ｉｘ＋１）。
【００４５】
図５に示すように、仮に１個の乗加算器を使用して図２（ｃ）のフィルタ処理を行うとすると、データメモリ３からのサンプルの読み出しを１演算周期当たり９回行う必要がある。しかし、本実施形態によるＤＳＰの図２（ｃ）のフィルタ処理の実行例では、上述した図２（ａ）のフィルタ処理、図２（ｂ）のフィルタ処理と同様、各演算周期においてフィルタ処理結果を得るために必要な乗加算処理の一部のみを乗加算器ＭＡＣ０に実行させ、残りをその直前の演算周期において乗加算器ＭＡＣ１に実行させる。これにより、図５に示すように、１演算周期当たりのデータメモリ３からのサンプル読み出し回数を６回に減らしている。
【００４６】
＜第２実施形態＞
この発明の第２実施形態であるＤＳＰは、３個の乗加算器ＭＡＣ０、ＭＡＣ１およびＭＡＣ２を有している。図６は本実施形態によるＤＳＰのＦＩＲフィルタ処理の実行例を示す図である。仮に１個の乗加算器のみを使用するとした場合、演算周期Ｔ（ｎ＋１）では、５次のＦＩＲフィルタ処理を実行するために、次式の演算を１個の乗加算器ＭＡＣに実行させる必要がある。
ＡＣＣ＋＝Ｃ（０）＊Ｘ（ｎ＋１）
ＡＣＣ＋＝Ｃ（１）＊Ｘ（ｎ）
ＡＣＣ＋＝Ｃ（２）＊Ｘ（ｎ−１）
ＡＣＣ＋＝Ｃ（３）＊Ｘ（ｎ−２）
ＡＣＣ＋＝Ｃ（４）＊Ｘ（ｎ−３）
ＡＣＣ＋＝Ｃ（５）＊Ｘ（ｎ−４）
……（１６）
この場合、１演算周期内に６回のメモリアクセスを行う必要がある。１つ前の演算周期Ｔ（ｎ）、さらに１つ前の演算周期Ｔ（ｎ−１）も同様である。
【００４７】
しかし、３個の連続した演算周期Ｔ（ｎ−１）〜Ｔ（ｎ＋１）に着目すると、それらの演算周期のフィルタ処理結果を得るための乗加算処理群は、共通のサンプルを対象にした３個の乗加算処理の組を複数組含んでいる。
【００４８】
そこで、本実施形態では、上記第１実施形態の制御部１（図１参照）に相当する制御手段が、演算周期Ｔ（ｎ＋１）では前掲式（１６）の各乗加算処理の一部のみを乗加算器ＭＡＣ０に実行させ、残りの乗加算処理の一部を直前の演算周期Ｔ（ｎ）に乗加算器ＭＡＣ１に実行させ、残った乗加算処理をさらに１つ前の演算周期Ｔ（ｎ−１）に乗加算器ＭＡＣ２に実行させ、演算周期Ｔ（ｎ−１）における乗加算器ＭＡＣ２の乗加算処理の結果を演算周期Ｔ（ｎ）において乗加算器ＭＡＣ１に引き継がせ、演算周期Ｔ（ｎ）における乗加算器ＭＡＣ１の乗加算処理の結果を演算周期Ｔ（ｎ＋１）において乗加算器ＭＡＣ０に引き継がせる。具体的には次の通りである。
【００４９】
まず、演算周期Ｔ（ｎ−１）では、次式の乗加算処理を乗加算器ＭＡＣ２に実行させる。
ＡＣＣ２＝Ｃ（２）＊Ｘ（ｎ−１）
ＡＣＣ２＋＝Ｃ（５）＊Ｘ（ｎ−４）
……（１７）
【００５０】
次に演算周期Ｔ（ｎ）では、次式の乗加算処理を乗加算器ＭＡＣ１に実行させる。
ＡＣＣ１＝ＡＣＣ２
ＡＣＣ１＋＝Ｃ（１）＊Ｘ（ｎ）
ＡＣＣ１＋＝Ｃ（４）＊Ｘ（ｎ−３）
……（１８）
【００５１】
次に演算周期Ｔ（ｎ＋１）では、次式の乗加算処理を乗加算器ＭＡＣ０に実行させる。
ＡＣＣ０＝ＡＣＣ１
ＡＣＣ０＋＝Ｃ（０）＊Ｘ（ｎ＋１）
ＡＣＣ０＋＝Ｃ（３）＊Ｘ（ｎ−２）
……（１９）
この結果、演算周期Ｔ（ｎ＋１）では最終的に前掲式（１６）の演算処理結果と同じものがアキュムレータＡＣＣ０に格納されることとなる。
【００５２】
本実施形態では、他の演算周期においても、各演算周期でのフィルタ処理結果を得るために、以上と同様に、一部の乗加算処理の先行する演算周期への振り分けを行う。この結果、図６から明らかなように、各演算周期においてサンプルをデータメモリから読み出す回数は３回で済む。
従って、本実施形態によれば、上記第１実施形態と比べ、１演算周期内に実行可能な乗加算処理の回数をさらに増加させることができる。
【００５３】
＜他の実施形態＞
以上、この発明の一実施形態について説明したが、これ以外にも、この発明には他の実施形態が考えられる。例えば次の通りである。
【００５４】
（１）例えば上記第１実施形態では、各演算周期において、サンプルをメモリから読み出す回数が最小となるように、当該演算周期におけるフィルタ処理結果を得るための乗加算処理群の中の一部を先行する演算周期に振り分け、乗加算器ＭＡＣ１に実行させた。しかし、サンプルのメモリからの読み出し回数を減らすために、先行する演算周期において乗加算器ＭＡＣ１に実行させる乗加算処理を増やすと、乗加算器ＭＡＣ１の空き時間が減り、却って好ましくない事態が発生する場合もあり得る。例えば乗加算器ＭＡＣ０およびＭＡＣ１に実行させているフィルタ処理以外のフィルタ処理を乗加算器ＭＡＣ１に実行させたいが、乗加算器ＭＡＣ１の空き時間が少なくなると後者のフィルタ処理の実行が困難になるといった事態である。従って、必ずしも各演算周期においてサンプルをメモリから読み出す回数を最小とする必要はなく、他のフィルタ処理の実行等に支障が生じない範囲で、サンプルのメモリからの読み出し回数を減らせばよい。
【００５５】
（２）上記各実施形態によれば、１演算周期内に実行可能な乗加算処理の回数を増やすことができるが、処理対象となるサンプルがＤＳＰに与えられてからフィルタ処理結果が出力されるまでのレイテンシが長くなる。そこで、例えば次のようにフィルタ処理の内容に合わせて乗加算処理の実行方法を切り換えてもよい。
ａ．各演算周期のフィルタ処理結果を得るための乗加算処理の回数が多く、かつ、レイテンシが大きくても構わないフィルタ処理については上記各実施形態を適用する。
ｂ．各演算周期のフィルタ処理結果を得るための乗加算処理の回数が少なく、かつ、レイテンシの小さいことが要求されるフィルタ処理については、１個の乗加算器を使用して実行する。
【符号の説明】
【００５６】
１……制御部、２……レジスタ部、３……データメモリ、ＭＡＣ０，ＭＡＣ１……乗加算器。
【図１】
0005742366.tif 000002
【図２】
0005742366.tif 000003
【図３】
0005742366.tif 000004
【図４】
0005742366.tif 000005
【図５】
0005742366.tif 000006
【図６】
0005742366.tif 000007