(57)【特許請求の範囲】
【請求項１】
第１及び第２のバッファを含む複数のバッファを有し、互いに遅延数が異なるデータが遅延数の小さい順に前記第１のバッファから前記第２のバッファに向かってそれぞれのバッファに書き込まれ記憶されると共に、前記第２のバッファに一のデータが書き込まれた場合には、再度、互いに遅延数が異なるデータが遅延数の小さい順に前記第１のバッファから前記第２のバッファに向かってそれぞれのバッファに書き込まれる第１のメモリと、
前記第１のメモリに書き込まれたデータのそれぞれに乗算されるフィルタ係数のそれぞれを乗算の対象となるデータが有する遅延数の小さい順に２回繰り返して並べたときの先頭のフィルタ係数、または最後尾のフィルタ係数を除いた配列を記憶する第２のメモリと、
前記第２のメモリが前記先頭のフィルタ係数を除いた前記配列を記憶する場合には、前記第２のバッファを始点として前記第２のバッファから前記第１のバッファまで順番にそれぞれのバッファから読み出されたデータのそれぞれと、前記第１のメモリに書き込まれたデータの内で遅延数が最も小さい一のデータが書き込まれたバッファから前記第１のバッファまでに存在するバッファの数だけ前記配列の先頭から数えて後方に位置するフィルタ係数から前記配列の最後尾までに含まれており、乗算対象のデータに対応して読み出されるフィルタ係数のそれぞれと、を積和演算する一方で、
前記第２のメモリが前記最後のフィルタ係数を除いた前記配列を記憶する場合には、前記第２のバッファを始点として前記第２のバッファから前記第１のバッファまで順番にそれぞれのバッファから読み出されたデータのそれぞれと、前記配列の先頭から数えて前記バッファの数に一を加算した数だけ後方に位置するフィルタ係数から前記配列の最後尾までに含まれており、乗算対象のデータに対応して読み出されるフィルタ係数のそれぞれと、を積和演算すると共に、前記第２のメモリが前記最後のフィルタ係数を除いた前記配列を記憶する場合であって前記第１のメモリに書き込まれたデータの内で遅延数が最も小さい一のデータが書き込まれたバッファが前記第２のバッファである場合には、前記第２のバッファを始点として前記第２のバッファから前記第１のバッファまで順番にそれぞれのバッファから読み出されたデータのそれぞれと、前記配列の先頭から最後尾までに含まれており、乗算対象のデータに対応して読み出されるフィルタ係数のそれぞれと、を積和演算する演算器と、
を有することを特徴とするデジタルフィルタ。
【請求項２】
互いに遅延数が異なるデータが書き込まれる前記バッファのそれぞれは、データが書き込まれる前の初期状態においては０クリアされていることを特徴とする請求項１に記載のデジタルフィルタ。
【請求項３】
前記第１のバッファから前記第２のバッファまでに存在するそれぞれのバッファに書き込まれたデータのそれぞれは、前記第２のバッファに一のデータが書き込まれた後、再度、互いに遅延数が異なるデータが小さい順に前記第１のバッファから前記第２のバッファに向かってそれぞれのバッファに書き込まれる場合には上書きされることを特徴とする請求項１に記載のデジタルフィルタ。
【請求項４】
請求項１に記載の前記デジタルフィルタを含むことを特徴とするマイコン。
【請求項５】
請求項１に記載の前記デジタルフィルタを含むことを特徴とするデジタルシグナルプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタルフィルタおよびその処理方法に関し、特に、汎用マイコンまたはＤＳＰとそのソフトウエアにて実行されるデジタルフィルタおよびその処理方法に関する。
【背景技術】
【０００２】
近年、汎用マイコンやＤＳＰ（デジタル・シグナル・プロセッサ）の動作周波数が高速化し、また、積和演算命令等のマルチメディア命令を内蔵した汎用マイコンが出始めている。これに伴い、従来は専用ハードウェアで行なってきたフィルタ処理が、汎用マイコンやＤＳＰとソフトウェアで実現される様になってきた。なお、汎用マイコンやＤＳＰにおいては、一般的にデジタルフィルタ処理はリングバッファ形式のＦＩＲ（有限インパルス応答型デジタルフィルタ）によって実現されている。
【０００３】
最近では上述のように音声や画像、音楽コーデックなどのマルチメディア処理を汎用マイコンやＤＳＰを用いてソフトウェアにより行うようになってきているが、マルチメディア処理ではリアルタイム性が要求されるとともに、複数のアプリケーションを実行するために、ソフトウェア処理を更に高速化することが必要となってきた。また、マイコンやＤＳＰの動作周波数が高速化するとともに低消費電力化しており、携帯機器にもマルチメディア処理が搭載されるようになってきており、使用メモリのサイズとともに消費電力の更なる低減も要求されるようになってきている。
【０００４】
ここで、汎用マイコンによる一般的なデジタルフィルタの処理方式について説明する。
【０００５】
図７は、遅延数ｐのＦＩＲ形デジタルフィルタの構成図である。ａ0 〜ａpはフィルタ係数（タップ係数）、Ｚ−１ は単位遅延素子を示す。このデジタルフィルタの入力Ｄnに対する出力ｙnは、次の演算式で表わすことができる。
ｙn ＝ ａ0*Ｄn＋ａ1*Ｄn-1＋ａ2*Ｄn-2＋・・・ ＋ａp-1*Ｄn-(p-1)＋ａp*Ｄn-p
図８は、従来のデジタルフィルタのブロック図である。図８に示す従来例のデジタルフィルタは、図７に示すフィルタ係数ａ0〜ａpを格納する係数メモリ１２と、入力データを格納するとともに単位遅延素子による遅延データを保持するデータＲＡＭ（遅延器）１１と、データＲＡＭ１１への入力データの書き込みアドレスを指定する書き込みポインタＰ１と、タップごとの積和演算を行う際に読み出す入力データまたは遅延データのアドレスを指定する読み出しポインタＰ２と、読み出した入力データまたは遅延データを保持する乗数レジスタ１５と、タップごとの積和演算を行う際に係数メモリ１２から読み出すフィルタ係数のアドレスを指定する係数ポインタＰ３と、読み出したフィルタ係数を保持する被乗数レジスタ１６と、積和演算器（乗算器１３、加算器１４、結果レジスタ１７）により構成されている。
【０００６】
なお、ほぼ同様な構成で、フィルタ係数に対称性があり、積和演算機能が無い場合に、乗算処理の回数を削減して処理時間を短縮するデジタルフィルタの例が、特開平３−２７７００９号公報に示されている。
【０００７】
図９は、従来の汎用マイコンにおけるデジタルフィルタにて一般的に用いられる、データＲＡＭ１１をリングバッファ形式で構成した場合の、リングバッファとポインタおよび対応する係数メモリ１２の構成を示すものである。
【０００８】
ここで、リングバッファは、遅延数ｐの遅延バッファと入力データバッファを合わせた（ｐ＋１）のバッファで構成され、また係数メモリ１２はリングバッファと同数（タップ数（ｐ＋１））で構成される。
【０００９】
Ｐ１は、リングバッファに入力データを書き込む際のアドレスを示す書き込みポインタである。Ｐ２は、各タップ毎の積和演算を行う際に読み出す遅延データのアドレスを示す読み出しポインタである。また、Ｐ３は各タップ毎の積和演算の際に読み出すフィルタ係数を示す係数ポインタである。
【００１０】
読み出しポインタＰ２は積和演算の初期時には、書き込みポインタＰ１と同一のバッファ位置を指定し、その初期位置から出発して、積和演算のためにタップ係数と乗算されるデータが格納されているバッファ位置を指示する。
【００１１】
時系列入力データ Ｄ１，  Ｄ２，  Ｄ３，  Ｄ４，  ．．．．Ｄｐ，  Ｄｐ
＋１，  Ｄｐ＋２，Ｄｐ＋３，  Ｄｐ＋４  ．．．．は、このデジタルフィルタ
に次のように格納される。まず、データＤ１は、データＲＡＭの一端Ｘ２側の最端にあるバッファに格納される。データＤ２，  Ｄ３，  Ｄ４，  ．．．．．．
．  Ｄｐ，  Ｄｐ＋１は、データＤ１が格納されているＸ２側の端のバッファから順次にＹ２方向に書き込まれる。したがって、データＤｐ＋１は、バッファのＸ１側の最端バッファに格納される。これで、データの書き込み位置が一巡する。次のデータＤｐ＋２はデータＤ１上に上書きされる。以降、データＤｐ＋３，  Ｄｐ＋４．．．．  はデータ  Ｄ２，  Ｄ３に上書きされる。図９の（Ｄ１），（Ｄ２），（Ｄ３）  ．．．（Ｄｐ＋１）は上書き前にその位置に書き込まれ
ていたデータである。
【００１２】
上記のデータ格納の際に、データの格納位置は書き込みポインタＰ１によって指定される。すなわち、書き込みポインタＰ１は、まず、データＲＡＭ１１のＸ２側の最端のバッファを指定する。次に、書き込みポインタＰ１はデータＲＡＭ１１のＸ２側最端のバッファのＸ１方向隣のバッファを指定する。以降、書き込みポインタＰ１は順次にＸ１方向に向かってシフトして順次にバッファを指定する。そうして、Ｘ１方向最端のバッファを指定した後には、次に、Ｘ２方向最端のバッファを指定し、以後、Ｘ１方向にシフトする。図９において、書き込みポインタＰ１は、現在、Ｘ２側の端から３番目のバッファを指定している。それによって、データ Dnが、前に格納されたデータD3上に上書きされている。
【００１３】
積和演算において、データとタップ係数との乗算は、通常書き込みポインタＰ１が指定しているデータから開始して、データの格納順序に対して逆方向に行われる。すなわち、読み出しポインタＰ２は、積和演算の初期時には、書き込みポインタＰ１と同一の値を持ち、以降、Ｘ２方向にシフトする。読み出しポインタＰ２がＸ２側最端のバッファを指示すると、次に、読み出しポインタＰ２はＸ１側最端のバッファを指示する。図４において、次のデータDn+1がデータDn-p上に上書きされるまでに、読み出しポインタＰ２は順次に、データ Dn, Dn-1,Dn-2, Dn-3, Dn-4, Dn-5,.．．．．, Dn-p を指定する。その結果、積和 ａ0Ｄn+ａ1Dn-1+ａ2Dn-2 +ａ3Dn-3+ ．．．+ａpDn-pが演算される。
【００１４】
前記のデータＲＡＭをリングバッファ形式で構成した場合のデジタルフィルタにおいては、p+1個の遅延素子（バッファ）にデータがリング状に配列されている。例えば、図９に示されている現在のデータ配置においては、最先に入力したデータDn-pと最後に入力したデータDnとが隣り合わせに配列し、両端Ｘ１、Ｘ２を繋ぐとDn-pからDnまでのデータがDn-p, ．．．,Dn-3,Dn-2,Dn-1,Dnの順序にリング状に配列している。このリング状の配列によって少数のバッファで大量のデータを順次にフィルタ処理することができるけれども、ポインタ管理が複雑で、ポインタをシフトするときには、その度に、ポインタがバッファの終端にきているか、否かをチェックする必要がある。
【００１５】
データＲＡＭをリングバッファ形式で構成した場合の、従来例のフィルタ処理フローを図１０に示す。なお、図１０に示す処理は、入力データが入力される度に開始から終了までの処理が実行されるものである。
【００１６】
図１０のフローに示すように、入力データが１つ入力される毎にタップ数（遅
延数ｐ＋１）回分の積和演算ループが実行されるが、ループ内で読み出しポインタＰ２を更新する度に、読み出しポインタＰ２がリングバッファの終端に達したかどうかをチェックする必要がある。（ステップＳ３０９）  前記従来のリングバッファ形式でデータＲＡＭ（データバッファおよび遅延バッファ）を構成するデジタルフィルタの場合、データが入力される毎に書き込みポインタＰ１を更新して最新の入力データの書き込み位置を移動し、書き込みポインタＰ１の更新に合せて、積和演算時に遅延データを読み出すための読み出しポインタＰ２のスタート位置も移動させるため、読み出しポインタＰ２がリングバッファの途中からスタートする場合がある。読み出しポインタＰ２は１回の積和演算毎に更新されるため、読み出しポインタＰ２がリングバッファの途中から
スタートした場合、タップ数（ｐ＋１）回の積和演算を繰り返す間に、読み出しポインタＰ２がリングバッファの最端を越えるため、読み出しポインタＰ２の更新ごとにポインタがバッファ終端に達したかどうかチェックする必要がある。
【００１７】
積和演算命令等のマルチメディア命令を内蔵したマイコンやＤＳＰでは、積和演算処理ループにおける積和演算処理およびポインタ更新処理の実行時間に対し、ポインタがバッファ終端に達したかチェックするための条件判断の処理時間は大きな割合を占める。これがフィルタ処理の高速化の妨げとなっていた。
【００１８】
上記の問題を解決するために、特許第３０７１７６５号ではポインタ更新時のポインタ終端チェックを不要とすることで処理速度を高速化する方法が提案されている。
【００１９】
具体的には、入力データ数が有限値ｎである場合に、データＲＡＭとして、リングバッファの代わりに入力データ数ｎと遅延数ｐとを合計した数（ｐ＋ｎ）の配列を用意することにより、ポインタを更新してもポインタが終端を越えないように考慮し、前記データＲＡＭをリングバッファ形式で構成した場合のポインタ終端チェックを回避したものである。
【００２０】
上述した前記第２の従来のデジタルフィルタをより詳細に説明すべく、図面を参照して説明する。
【００２１】
図１１は前記従来例２のデジタルフィルタにおけるデータＲＡＭとポインタおよび対応する係数メモリの構成を示した図である。
【００２２】
データＲＡＭは入力されるデータ数ｎと遅延数ｐを合わせた（ｎ＋ｐ）個のバッファで構成される。バッファの先頭（X2）からｐ個のバッファにはあらかじめ０を格納しておく。また書き込みポインタＰ１は、バッファ先頭（X2）から（ｐ＋１）番目（図４のＤ１）の位置からスタートする。
【００２３】
次に前記従来のデジタルフィルタの動作についてフローを用いて説明する。
【００２４】
従来例２のフィルタ処理フローを図１２に示す。図１２のフローに示すように、積和演算ループ内にポインタ更新時の終端チェック処理は必要ない。
【００２５】
上記の通り、前記従来例２のデジタルフィルタでは、ポインタを更新してもポインタがバッファ配列の終端を越えないように考慮し、前記データＲＡＭをリングバッファ形式で構成した場合のポインタ終端チェックを回避することによりフィルタ処理の実行速度を向上させている。
【特許文献１】特開平３−２７７００９号公報
【特許文献２】特許第３０７１７６５号
【発明の開示】
【発明が解決しようとする課題】
【００２６】
しかしながら、上記の従来のデジタルフィルタにおけるフィルタ処理には、次のような問題点があった。
【００２７】
第１の問題点は、従来のリングバッファ形式でデータバッファおよび遅延バッファを構成したデジタルフィルタの場合は、ポインタの管理が複雑であるため、処理ステップが多くかかり、フィルタ処理の高速化の妨げとなる点である。
【００２８】
その理由は、リングバッファ形式でデータバッファおよび遅延バッファを構成する場合、データが入力される毎に書き込みポインタ（Ｐ１）を更新して最新の入力データ書き込むため、積和演算時に遅延データを読み出すための読み出しポインタ（Ｐ２）のスタート位置も移動し、リングバッファの途中からスタートすることになる。
【００２９】
１回の積和演算毎に読み出しポインタ（Ｐ２）を更新するため、タップ数（ｐ
＋１）回の積和演算を繰り返す間に、読み出しポインタ（Ｐ２）はリングバッファの境界を越えるため、読み出しポインタ（Ｐ２）の更新ごとにポインタがバッファ終端に達したかどうかチェックする必要があるためである。
【００３０】
積和演算命令等のマルチメディア命令を内蔵したマイコンやＤＳＰでは、積和演算処理ループにおける積和演算処理およびポインタ更新処理の実行時間に対し、ポインタがバッファ終端に達したかチェックするための条件判断の処理時間は大きな割合を占める。
【００３１】
第２の問題点は、上記第１の問題点を回避する従来例２のデジタルフィルタでは、ポインタの終端チェックを回避するために、データＲＡＭとして入力データ数ｎと遅延数ｐとを合計した数（ｐ＋ｎ）のバッファ（遅延素子）配列を用意する必要があるため、入力データ数が多い場合にバッファ（遅延素子）を多く用意する必要がある。このため回路規模が大きくなりシステムのコストが高くなる点である。
【００３２】
その理由は、積和演算ループにおけるポインタのチェックを不要とするために、入力データ数が有限値ｎの場合にデータ数ｎと遅延数ｐを合計した（ｎ＋ｐ）個の遅延素子配列（データバッファ）を使用して、ポインタを更新してもポインタがバッファの終端を越えることがないようにする必要があり、このため入力データ数の有限値ｎが大きい場合でも（ｎ＋ｐ）個の遅延素子配列を用意する必要があるためである。
【００３３】
第３の問題点は、前記従来例２のデジタルフィルタは、携帯機器など搭載メモリが少ないシステムでは実現できない場合がある点である。
【００３４】
その理由は、前記従来例２のデジタルフィルタでは、データＲＡＭとして入力データ数ｎ＋遅延数ｐを合計した（ｎ＋ｐ）個の遅延素子（データバッファ）を用意する必要があるが、携帯機器などでは限られたメモリしか搭載していないため必要なデータバッファのサイズを確保できないためである。
【００３５】
また、入力されるデータ数が不定（または無限）であるデジタルフィルタ処理の場合には、従来例２によるデジタルフィルタでは実現できないという問題がある。
【００３６】
本発明の目的は、上述の問題点を解決するため、データＲＡＭは従来と同様にリングバッファ形式を採用することによりバッファサイズは最小限に抑え、フィルタ係数メモリを拡張するとともにデータ読み出しポインタを常にリングバッファの最端からスタートすることにより、ポインタ更新時のポインタの終端チェックを不要とし、処理ステップを削減することにある。
【課題を解決するための手段】
【００３７】
本発明のデジタルフィルタは、積和演算器を有し、入力データおよび既に入力データとして受け取ったｎ（ｎ＞０）個の遅延データと、前記入力データおよび前記ｎ個の遅延データにそれぞれ対応するｎ＋１個のフィルタ係数との乗算を行い前記乗算した結果の和をとる積和演算を実行することによってフィルタ動作をするデジタルフィルタであって、前記ｎ＋１個のフィルタ係数を２回繰り返したものから所定のフィルタ係数を削除した２ｎ＋１個のフィルタ係数が格納される２ｎ＋１個のバッファからなる第１の配列を有する係数メモリと、前記繰り返し格納されたｎ＋１個のフィルタ係数の順序にて、前記繰り返したｎ＋１個のフィルタ係数にそれぞれ対応する前記入力データおよび前記ｎ個の遅延データが格納されるｎ＋１個のバッファからなる第２の配列を有するデータＲＡＭと、前記データＲＡＭへの前記入力データの書き込みアドレスを、前記第２の配列を構成する所定のバッファに指定し、前記入力データの書き込みに応じて更新する書き込みポインタと、前記積和演算を実行する際の前記データＲＡＭから読み出す前記入力データまたは前記遅延データのアドレスを、前記フィルタ動作を開始するときの初期値として前記第２の配列の一端を構成するバッファに指定し、前記積和演算の実行毎に行う前記入力データまたは前記遅延データの読み出しに応じて更新する読み出しポインタと、前記積和演算を実行する際の前記係数メモリから読み出す前記フィルタ係数のアドレスを、前記フィルタ動作を開始するときの初期値として前記書き込みポインタが指定する前記第２の配列の一端を構成するバッファからの位置に基づいて設定し、前記積和演算の実行毎に行う前記フィルタ係数の読み出しに応じて更新する係数ポインタと、を備える構成である。
【００３８】
また、本発明のデジタルフィルタの前記積和演算器は、乗算器および加算器を備える構成であり、前記積和演算器は、前記加算器の結果を保持する結果レジスタを備える構成である。
【００３９】
さらに、本発明のデジタルフィルタの処理方法は、入力データおよび既に入力データとして受け取ったｎ（ｎ＞０）個の遅延データと、前記入力データおよび前記ｎ個の遅延データにそれぞれ対応するｎ＋１個のフィルタ係数との乗算を行い前記乗算した結果の和をとる積和演算を実行することによってフィルタ動作をするデジタルフィルタの処理方法であって、ｎ＋１個のバッファへの前記入力データの書き込み位置を指定する書き込みポインタを所定の位置に設定する工程と、前記書き込みポインタが指定するバッファに対して、前記入力データの書き込みを行う工程と、前記フィルタ動作を開始する際に、前記ｎ＋１個のバッファから前記入力データおよび前記遅延データを読み出す際の読み出し位置を指定する読み出しポインタの初期値を前記ｎ＋１個のバッファの一端に設定する工程と、前記フィルタ動作を開始するときに、前記ｎ＋１個のバッファに格納された前記入力データおよび前記ｎ個の遅延データの格納順序にて前記入力データおよび前記ｎ個の遅延データに対応する前記ｎ＋１個のフィルタ係数を２回繰り返したものから所定のフィルタ係数を削除した２ｎ＋１個のフィルタ係数が格納された２ｎ＋１個のバッファから前記フィルタ係数を読み出す際の読み出し位置を指定する係数ポインタの初期値を前記書き込みポインタが指定する前記ｎ＋１個のバッファの一端からの位置に基づいて設定する工程と、前記読み出しポインタの指定に基づいて前記入力データまたは前記遅延データを読み出す工程と、前記係数ポインタの指定に基づいて前記フィルタ係数を読み出す工程と、前記入力データまたは前記遅延データを読み出す工程によって読み出した前記入力データまたは前記遅延データと、前記フィルタ係数を読み出す工程によって読み出した前記フィルタ係数とに基づいて前記積和演算を実行する工程と、を有することを特徴とする。
【発明の効果】
【００４０】
以上説明したように、本発明の第１の効果は、従来のリングバッファ形式のデジタルフィルタ処理に対して、本発明のデジタルフィルタ処理は積和演算ループ処理におけるポインタ管理（チェック）が不要であるため、フィルタ処理時間を短縮してシステムを高速にすることができることにある。これにより、動作クロック数を低下させて消費電力を削減することが可能である。
【発明を実施するための最良の形態】
【００４１】
本発明によるデジタルフィルタおよびその処理方法は、汎用マイコンまたはＤＳＰとそのソフトウエアにて実行されるデジタルフィルタに関し、特にフィルタ係数（タップ係数）を拡張することにより、積和演算ループ処理におけるポインタ管理を不要として、従来のデジタルフィルタに対してメモリの増加を最小限に抑えた上で、処理ステップ数を削減してフィルタ処理時間（実行時間）を短縮し、システムの処理速度を高速化または消費電力を削減できる構成を提供する。
【００４２】
図２において、本発明におけるデジタルフィルタでは、入力されるデータを格納するとともに遅延数分保持するデータＲＡＭ１は、従来と同様に遅延数ｐ＋１のバッファからなるリングバッファ形式のメモリ領域であるのに対し、フィルタ係数を保持する係数メモリ２は、タップ数（遅延数＋１）分のタップ係数の配列を、１つのタップ係数を除いて２回繰り返した配列として構成されている。さらに、データが入力される毎に実行されるデジタルフィルタ処理の積和演算ループの開始時に、データＲＡＭの読み出しポインタＰ２を常にリングバッファの最端からスタートして他端側に更新するとともに、対応するタップ係数を示す係数ポインタＰ３を、現在の書き込みポインタＰ１の位置に対応する位置からスタートして終端側に更新することにより、タップ数回繰り返される積和演算ループ内に読み出しポインタＰ２および係数ポインタＰ３の終端チェックが不要となり、積和演算ループの実行ステップ数が削減される。
【００４３】
このようにして、本発明のデジタルフィルタはフィルタ係数（タップ係数）を拡張することにより、データの読み出しポインタ更新時のポインタの終端チェックを不要とすることによりフィルタ処理ステップ数の削減を可能にする。
【００４４】
本発明は、汎用マイコンやＤＳＰによるデジタルフィルタ処理に関するものであり、ソフトウエアにてフィルタ処理を行うマルチメディア・システムなどに適用される。
【００４５】
以下に図面を参照して、本発明に係る実施の形態のデジタルフィルタを説明する。
【００４６】
図１は、本発明の第１の実施の形態のデジタルフィルタおよびその処理方法の構成を示すブロック図である。図１に示すデジタルフィルタは、タップ数分のフィルタ係数の配列を拡張して格納する係数メモリ２と、単位時間毎の入力データを格納するとともに遅延数分の単位遅延素子による遅延データを保持するデータＲＡＭ（遅延器）１と、データＲＡＭ１への入力データの書き込みアドレスを指定する書き込みポインタＰ１と、タップごとの積和演算を行う際に読み出す入力データまたは遅延データのアドレスを指定する読み出しポインタＰ２と、読み出した入力データまたは遅延データを保持する乗数レジスタ５と、タップごとの積和演算を行う際に係数メモリ２から読み出すフィルタ係数のアドレスを指定する係数ポインタＰ３と、読み出したフィルタ係数を保持する被乗数レジスタ６と、積和演算器（乗算器３、加算器４、結果レジスタ７）により構成されている。なお、係数ポインタＰ３の初期値は入力データの書き込みポインタＰ１の値をもとに設定する構成となっている。
【００４７】
次に、本発明の第１の実施の形態のデジタルフィルタにおける、データＲＡＭ１の構成と係数メモリ２の構成とを、各ポインタの対応について、図２を参照して説明する。
【００４８】
図２は、本発明の第１の実施の形態のデジタルフィルタにおけるリングバッファ形式のデータＲＡＭ１と係数メモリ２の構成を示す図である。ここで、データＲＡＭ１は、従来と同様に遅延数ｐ分の遅延バッファと入力データバッファを合わせた（ｐ＋１）のバッファで構成され、また係数メモリ２はデータＲＡＭと同数（タップ数（ｐ＋１））のタップ係数配列ａ0,ａ1,ａ2, ．．．ａp-1,ａp を２回繰り返し、先頭のａ0のみ除いた配列で構成される。
【００４９】
ここでＰ１は、リングバッファに入力データを書き込む際のアドレスを示す書き込みポインタＰ１の示す位置である。同様にＰ２は、各タップ毎の積和演算を行う際に読み出す遅延データのアドレスを示す読み出しポインタＰ２の示す位置である。また、Ｐ３は各タップ毎の積和演算の際に読み出すフィルタ係数を示す係数ポインタＰ３の示す位置である。書き込みポインタＰ１は入力データを書き込む毎にＸ１側へ更新される。読み出しポインタＰ２は積和演算の開始時には常にＸ１側最端のバッファ位置からスタートし積和演算毎にＸ２側へ更新され乗算されるデータが格納されているバッファ位置を示し、全タップの積和演算終了時にＸ２側最端位置を示している。
【００５０】
係数ポインタＰ３は、現在の書き込みポインタＰ１のデータＲＡＭ先頭Ｘ２からのインデックス値に対応する係数メモリ先頭Ｙ１からのインデックス位置からスタート（図２では、Ｐ１がＸ２から３番目であるためＰ３はＹ１から３番目の位置からスタート）し、積和演算毎にＹ２側へ更新されタップ毎の積和演算に使用されるタップ係数の位置を示すものである。
【００５１】
次に、図２および図３のフローチャートを参照して本発明の第１の実施の形態のデジタルフィルタの動作について詳細に説明する。
【００５２】
本発明の第１の実施の形態のデジタルフィルタのデジタルフィルタにデータが入力されると、まず、累算レジスタ（結果レジスタ７）を０クリアする（図３のステップＳ１０１）。
【００５３】
次に、書き込みポインタＰ１が示す位置に入力データＤ1を書き込む（ステッ
プＳ１０２）。
【００５４】
さらに、読み出しポインタＰ２をデータＲＡＭの終端位置（Ｘ１側最端バッファ）を示す値に初期化する（ステップＳ１０３）。次に、係数ポインタＰ３をＹ１側最端位置から、現在の書き込みポインタＰ１のＸ２側からのインデックス値分ずらした位置に設定する（ステップＳ１０４）。
【００５５】
次に、読み出しポインタＰ２の位置からデータを読み出し乗数レジスタ５に設定する（ステップＳ１０５）。さらに係数ポインタＰ３の位置からフィルタ係数を読み出し被乗数レジスタに設定する（ステップＳ１０６）。
【００５６】
次に、乗数レジスタ５のデータと被乗数レジスタ６の係数を乗算し結果レジスタの内容を加算した結果を累算レジスタ（結果レジスタ７）に格納する（ステップＳ１０７）。
【００５７】
読み出しポインタＰ２はＸ２側隣りのバッファ位置を示すよう更新（ステップＳ１０８）し、同様に係数ポインタＰ３もＹ２側隣りの係数位置を示すように更新する（ステップＳ１０９）。
【００５８】
上記ステップＳ１０５からステップＳ１０９の処理をタップ数回繰り返し（ステップＳ１１０）、全タップ分の積和演算が終了したのち、フィルタ処理結果である結果レジスタ７の内容を出力する（ステップＳ１１１）。
【００５９】
次に、書き込みポインタＰ１をＸ１側に更新（ステップＳ１１２）したのち、
更新した書き込みポインタＰ１を確認（ステップＳ１１３）して、更新した書き込みポインタＰ１がリングバッファの終端Ｘ１を越えた場合は、書き込みポインタＰ１をリングバッファ先頭位置に再設定する（ステップＳ１１４）。次のデータが入力された時点で再びステップＳ１０１からフィルタ処理を行う。
【００６０】
次に、具体例を参照して説明する。
【００６１】
タップ数が６（遅延数５）のフィルタを例として説明する。図４は、本発明の第１の実施の形態のデジタルフィルタへの時系列入力データのうち、先頭データ、３番目のデータ、６番目のデータ、および９番目のデータの入力に伴なうフィルタ処理の積和演算ループ開始時点でのデータＲＡＭの内容、書き込みポインタＰ１の位置、読み出しポインタＰ２のスタート位置、および係数ポインタＰ３のスタート位置を示す説明図である。
【００６２】
なお、初期状態としてデータＲＡＭ１のすべてのバッファは０クリアされており、書き込みポインタＰ１はデータＲＡＭの先頭であるＸ２側最端のバッファを示している。
【００６３】
まず、時系列入力データの最初のデータＤ1が入力されると、累算レジスタ（
結果レジスタ７）を０クリアし（ステップＳ１０１）、次に書き込みポインタＰ
１が示す位置（図４（１）のＰ１の位置）に入力データＤ1を書き込む（ステッ
プＳ１０２）。
【００６４】
次に、読み出しポインタＰ２をデータＲＡＭの終端位置（Ｘ１側最端バッファ）を示す値に初期化する（ステップＳ１０３）。次に係数ポインタＰ３をＹ１側最端位置から、現在の書き込みポインタＰ１のＸ２側からのインデックス値分ずらした位置に設定する（ステップＳ１０４）。ここでは、書き込みポインタＰ１がＸ２側から１番目であるため、係数ポインタＰ３の初期値はＹ１側から１番目の位置となる。この時点でのデータＲＡＭの内容、書き込みポインタＰ１の位置、読み出しポインタＰ２のスタート位置、および係数ポインタＰ３のスタート位置を図４の（１）に示す。
【００６５】
次に、読み出しポインタＰ２の位置からデータを読み出し乗数レジスタ５に設定する（ステップＳ１０５）。さらに係数ポインタＰ３の位置からフィルタ係数を読み出し被乗数レジスタに設定する（ステップＳ１０６）。
【００６６】
次に、乗数レジスタ５のデータと被乗数レジスタ６の係数を乗算し結果レジスタの内容を加算した結果を累算レジスタ（結果レジスタ７）に格納する（ステップＳ１０７）。読み出しポインタＰ２はＸ２側隣りのバッファ位置を示すよう更新（ステップＳ１０８）し、同様に係数ポインタＰ３もＹ２側隣りの係数位置を示すように更新する（ステップＳ１０９）。
【００６７】
上記ステップＳ１０５からステップＳ１０９の処理をタップ数６回繰り返し（ステップＳ１１０）、全タップ分の積和演算が終了したのち、フィルタ処理結果である結果レジスタ７の内容を出力する（ステップＳ１１１）。次に書き込みポインタＰ１をＸ１側に更新（ステップＳ１１２）し書き込みポインタはＸ２側から２番目のバッファを示す。次に更新した書き込みポインタＰ１を確認（ステップＳ１１３）し、リングバッファの終端Ｘ１を越えていないため、これで先頭データＤ1の入力にともなうフィルタ処理を終了する。次のデータが入力された時点で再びステップＳ１０１からフィルタ処理を行う。
【００６８】
同様に、３番目の入力データＤ3の入力に伴なうフィルタ処理でステップＳ１
０４の終了時点でのデータＲＡＭの内容、書き込みポインタＰ１の位置、読み出しポインタＰ２のスタート位置、および係数ポインタＰ３のスタート位置を図４の（２）に示す。係数ポインタＰ３のスタート位置は、書き込みポインタＰ１がＸ２側から３番目のバッファを示しているため、Ｙ１側から３番目の係数を示す位置となる。
【００６９】
同様に、６番目の入力データＤ6の入力に伴なうフィルタ処理でステップＳ１
０４の終了時点でのデータＲＡＭの内容、書き込みポインタＰ１の位置、読み出しポインタＰ２のスタート位置、および係数ポインタＰ３のスタート位置を図４の（３）に、９番目の入力データＤ9の入力に伴なうフィルタ処理でステップＳ１０４の終了時点でのデータＲＡＭの内容、書き込みポインタＰ１の位置、読み出しポインタＰ２のスタート位置、および係数ポインタＰ３のスタート位置を図４の（４）に示す。
【００７０】
前記に示すように、データ格納の際に、データの格納位置は書き込みポインタＰ１によって指定される。すなわち、書き込みポインタＰ１は、まず、データＲＡＭ１のＸ２側の最端のバッファを指定する。次に、書き込みポインタＰ１はデータＲＡＭ１１のＸ２側最端のバッファのＸ１方向隣のバッファを指定する。以降、書き込みポインタＰ１は順次にＸ１方向に向かってシフトして順次にバッファを指定する。そうして、Ｘ１方向最端のバッファを指定した後には、次に、Ｘ２方向最端のバッファを指定し、以後、Ｘ１方向にシフトする。図２において、書き込みポインタＰ１は、現在、Ｘ２側の端から３番目のバッファを指定している。それによって、データ DnがＸ２側から３番目のバッファに格納されている。
【００７１】
これに対し、積和演算ループにおけるデータの読み出しは、リングバッファの終端位置から開始し、タップ数分の積和演算を終了した時点で読み出しポインタＰ２は常にリングバッファの先頭位置を示しリングバッファの境界を越えることはない。
【００７２】
また、フィルタ係数の読み出しポインタＰ３も、Ｐ１に対応する位置からスタートしタップ数分の積和演算が終了した時点で係数メモリの終端を越えることはない。
【００７３】
上記に示すように、本発明のデジタルフィルタによれば、データの読み出しポインタＰ２および係数ポインタＰ３がバッファ境界を越えることが無いため、積和演算ループ内にポインタの終端チェック処理が不要であり、従来のリングバッファ形式のデジタルフィルタ処理に対して実行ステップ数を削減し、処理速度を向上することが可能である。この結果、動作クロック周波数を小さくして消費電力を低減することができるようになる。
【００７４】
次に、本発明の他の実施の形態について図面を参照して詳細に説明する。
【００７５】
タップ数が６（遅延数５）のフィルタを例に、本発明の第２の実施の形態のデジタルフィルタによるデータＲＡＭおよび係数メモリの構成を図５に示す。
【００７６】
本発明の第２の実施の形態のデジタルフィルタは、係数メモリの構成およびこれに伴なう係数ポインタＰ３のスタート位置以外は、図１から図４に示した本発明の第１の実施の形態のデジタルフィルタと同一である。同一構成要素には、同一の参照符号を付してある。
【００７７】
本発明の第２の実施の形態のデジタルフィルタへの時系列入力データのうち、
先頭データ、５番目のデータ、６番目のデータ、および９番目のデータの入力に伴なうフィルタ処理の積和演算ループ開始時点でのデータＲＡＭの内容、書き込みポインタＰ１の位置、読み出しポインタＰ２のスタート位置、および係数ポインタＰ３のスタート位置を図５に示す。
【００７８】
本発明の第１の実施の形態のデジタルフィルタの係数メモリは、タップ係数配列ａ0,ａ1,ａ2, ．．．ａp-1,ａp を２回繰り返して先頭のａ0を除いた配列で構
成されるのに対し、本発明の第２の実施の形態のデジタルフィルタの係数メモリは、タップ係数配列ａ0,ａ1,ａ2, ．．．ａp-1,ａp を２回繰り返して最終のａp
のみを除いた配列で構成されるものである。
【００７９】
また、本発明の第２の実施の形態のデジタルフィルタにおける積和演算ループ開始時の係数ポインタＰ３のスタート位置は、本発明の第１の実施の形態のデジタルフィルタでは、Ｙ１の先頭位置から現在の書き込みポインタＰ１のＸ２側からのインデックス値分ずらした位置に設定したのに対し、本発明の第２の実施の形態のデジタルフィルタでは、Ｙ１の先頭位置から現在の書き込みポインタＰ１のＸ２側からのインデックス値をプラス１だけずらした位置に設定する。
【００８０】
なお、図５（ｃ）に示すように、書き込みポインタＰ１がリングバッファの終端位置である場合には、積和演算ループ開始時の係数ポインタＰ３のスタート位置は、Ｙ１の先頭位置から現在の書き込みポインタＰ１のＸ２側からのインデックス値をプラス１だけずらした位置ではなく、係数メモリの先頭位置に設定する。
【００８１】
本発明の第２の実施の形態のデジタルフィルタに示すように、係数メモリをタップ係数配列ａ0,ａ1,ａ2, ．．．ａp-1,ａp を２回繰り返して最終のａpのみを
除いた配列で構成しても、本発明の第１の実施の形態のデジタルフィルタの効果と同様である。
【００８２】
次に、本発明の第３の実施の形態のデジタルフィルタについて図面を参照して詳細に説明する。
【００８３】
図６は、本発明の第３の実施の形態のデジタルフィルタ係るデジタルフィルタの係数メモリ拡張処理のフローチャートである。本発明の第３の実施の形態のデジタルフィルタでは、システムの初期状態での係数メモリは、従来と同様にタップ数分のタップ係数配列ａ0,ａ1,ａ2, ．．．ａp-1,ａpのみで構成し、実際のフィルタ処理を開始する際に、事前に図６に示す手順にて係数メモリを拡張することにより、本発明の第１の実施の形態のデジタルフィルタと同様にフィルタ処理を行うことができ、フィルタ処理を行わない場合は、係数メモリの拡張によって増加する遅延数分の係数メモリ領域を、他のアプリケーション用のメモリ領域としても使用することができる。これにより、メモリ容量の少ないシステムでも本発明のデジタルフィルタを実現することが可能となる。
【００８４】
以上説明したように、本発明の第１の効果は、従来のリングバッファ形式のデジタルフィルタ処理に対して、本発明のデジタルフィルタ処理は積和演算ループ処理におけるポインタ管理（チェック）が不要であるため、フィルタ処理時間を短縮してシステムを高速にすることができることにある。これにより、動作クロック数を低下させて消費電力を削減することが可能である。
【００８５】
その理由は、従来のリングバッファ形式のデジタルフィルタに対しフィルタ係数ＲＡＭを拡張し、積和演算処理をリングバッファの先頭（または終端）から開始してタップ数分で終了することにより、ポインタがバッファの終端を越えないようにしたためである。
【００８６】
具体的には、例えば汎用マイコンにて、従来のリングバッファ形式のデジタルフィルタで１つのデータ入力に対する処理には、およそ（10×ｐ＋９）ステップを必要とするのに対して、本発明によると（７×ｐ＋１０）ステップで済む。これを割合に直すと、処理時間を従来の約７０％まで短縮することができる。
【００８７】
フィルタ処理では、入力データは等しい時間間隔で処理される。従ってフィルタ処理時間が短縮できたことによって、フィルタ処理以外のアプリケーションの実行時間を増やすことができる。また、フィルタ処理時間を短縮することによって、動作クロックを遅くしても単位時間間隔でのフィルタ処理が間に合うため、動作クロック数を低下させて消費電力を削減することが可能である。
【００８８】
第２の効果は、従来のデータＲＡＭのとして有限入力データ数ｎと遅延数ｐを合計した数（ｎ＋ｐ）のバッファ（遅延素子）配列を使用することによりポインタ管理（チェック）を不要としたデジタルフィルタ処理に対し、本発明では、デジタルフィルタ処理の高速化のために増加するメモリの数を遅延数ｐに抑えることにより必要となるメモリサイズを削減し、回路規模を削減することができることにある。
【００８９】
その理由は、一般的にＦＩＲ型のデジタルフィルタのタップ数は入力データ数に対し十分に小さい数であるためである。
【００９０】
例えば、オーディオコーデック技術であるＭＰ３デコーダで使用するフィルタのタップ数は、２２〜５１２程度である。これに対しデータ数は、２２ＫＨｚのサンプリング周波数で１０秒分のステレオ・データの場合、約４５万個である。これを従来の入力データ数ｎと遅延数ｐを合計した数（ｎ＋ｐ）のバッファ（遅延素子）配列を使用するデジタルフィルタで処理するためには、約４４０Ｋワードのメモリが必要であるのに対し、本発明のデジタルフィルタでは、約１.５Ｋワードのメモリに削減できる。
【図面の簡単な説明】
【００９１】
【図１】本発明の第１の実施の形態のデジタルフィルタのブロック図である。
【図２】図１に記載されたデータＲＡＭおよび係数メモリの構成図である。
【図３】本発明の第１の実施の形態のデジタルフィルタ処理フローである。
【図４】本発明の第１の実施の形態のデジタルフィルタにおけるポインタ位置説明図である。
【図５】本発明の第２の実施の形態のデジタルフィルタのブロック図である。
【図６】本発明の第３の実施の形態のデジタルフィルタにおける係数メモリの拡張処理フローである。
【図７】ＦＩＲ型デジタルフィルタの概念図である。
【図８】第１の従来のデジタルフィルタのブロック図である。
【図９】第１の従来のデジタルフィルタにおけるデータＲＡＭおよび係数メモリの構成図である。
【図１０】第１の従来のデジタルフィルタにおけるデジタルフィルタの処理フローである。
【図１１】第２の従来のデジタルフィルタにおけるデータＲＡＭおよび係数メモリの構成図である。
【図１２】第２の従来のデジタルフィルタにおけるデジタルフィルタの処理フローである。
【符号の説明】
【００９２】
１，１１，２１     データＲＡＭ（遅延器）
２，１２，２２     係数メモリ
３，１３     乗算器
４，１４     加算器
５，１５     乗数レジスタ
６，１６     被乗数レジスタ
７，１７     結果レジスタ
Ｐ１     書き込みポインタ
Ｐ２     読み出しポインタ
Ｐ３     係数メモリポインタ
【図１】
0004464380.tif 000002
【図２】
0004464380.tif 000003
【図３】
0004464380.tif 000004
【図４】
0004464380.tif 000005
【図５】
0004464380.tif 000006
【図６】
0004464380.tif 000007
【図７】
0004464380.tif 000008
【図８】
0004464380.tif 000009
【図９】
0004464380.tif 000010
【図１０】
0004464380.tif 000011
【図１１】
0004464380.tif 000012
【図１２】
0004464380.tif 000013