(57)【要約】【課題】入力データを順次遅延させるバッファにＲＡＭを用いたＦＩＲフィルタにおいてフィルタ係数の対称性を利用して乗算回数を半減させる。【解決手段】ＲＡＭ−ＤＦ２１にＦＩＲフィルタ１の次数ｎの半分（ｎ／２個）まで入力データを書き込むと、最も先に書き込んだ入力データから順に読み出してＲＡＭ−ＤＳ２２に書き込むことにより移していく。ＲＡＭ−ＤＳ２２にもｎ／２個の入力データを書き込むと、ＲＡＭ−ＤＦ２１から最も先に書き込まれた入力データから順に読み出す一方、ＲＡＭ−ＤＳ２２から最も後に書き込まれた入力データから順に読み出していく。このようにＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２から同時に読み出した２つの入力データを加算器４で加算して、その加算値にＲＡＭ−ＣＥ３１から読み出したフィルタ係数を乗算器５で乗算する。このような処理をｎ／２回繰り返して乗算値を累算回路６で累算する。【選択図】図１
2007124556.tif 000002
【特許請求の範囲】
【請求項１】
従属接続された互いに独立した第１および第２メモリと、
前記第２メモリから最も先の入力データを格納するように第１および第２メモリに順次入力データを書き込ませ、前記第１および第２メモリにそれぞれＦＩＲフィルタの次数の半分の入力データを書き込ませると、前記第１メモリから最も先または最も後に書き込まれた入力データから順に入力データを読み出す一方、前記第２メモリから最も後または最も先に書き込まれた入力データから順に入力データを読み出すことを次数の半分の入力データについて行う書込／読出制御手段と、
前記第１および第２データから読み出された２つの入力データを加算する加算手段と、
前記加算手段による加算値に対応するフィルタ係数を乗算する乗算手段と、
前記次数の半分の前記乗算手段による乗算値を累算する累算手段とを備えていることを特徴とするＦＩＲフィルタ。
【請求項２】
前記書込／読出制御手段は、入力データの前記第１メモリへの書込位置を変更する第１書込ポインタ手段と、入力データの前記第２メモリへの書込位置を変更する第２書込ポインタ手段と、入力データの前記第１メモリからの読出位置を変更する第１読出ポインタ手段と、入力データの前記第２メモリからの読出位置を変更する第２読出ポインタ手段とを有していることを特徴とする請求項１に記載のＦＩＲフィルタ。
【請求項３】
前記第１および第２書込ポインタ手段が指定する書込位置の範囲および前記第１および第２読出ポインタ手段が指定する読出位置の範囲が可変であることを特徴とする請求項２に記載のＦＩＲフィルタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル回路にて構成される高速処理可能なＦＩＲ（Finite Inpulse Response）フィルタに関するものである。
【背景技術】
【０００２】
ＦＩＲフィルタは、遅延素子（バッファ）にて入力データを順次遅延させ、各遅延出力に予め設定されたフィルタ係数を乗算器にて乗算し、各乗算出力を加算器にて加算して出力を得る構成となっている。このように、ＦＩＲフィルタでは積和演算処理が行われる。
【０００３】
高次のＦＩＲフィルタ（例えば次数１００〜２００）を実現するためには、上記の積和演算処理を多数行う必要があり、例えば、特許文献１，２に開示されているように、ＤＳＰ（Digital Signal Processor）を用いるケースがある。このようなＦＩＲフィルタでは、フィルタ係数とデータとをそれぞれレジスタから読み出して乗算するため、乗算器が通常１個設けられる。
【０００４】
あるいは、高次のＦＩＲフィルタでは、例えば１００個以上の多数のデータを蓄えるバッファが必要であるため、例えば特許文献３に開示されているように、バッファをＲＡＭによって構成するものもある。
【０００５】
ＦＩＲフィルタでは、演算の効率を高めるために、処理すべき演算数ができるだけ少ないことが好ましい。これに対しては、フィルタ係数の対称性を利用して乗算回数を半減させることが知られている。フィルタ係数の対称性を利用する場合、対称なフィルタ係数が乗算される２つのデータを積和演算の前に加算する処理が必要である。このように乗算回数を半減させることにより、加算に比べて長い処理時間と大きい規模とを要する乗算器を削減することが可能となる。
【特許文献１】特開平５−２３６０３５（１９９３年９月１０日公開）
【特許文献２】特開平７−２５３９６５（１９９５年１０月３日公開）
【特許文献３】特開２０００−１１４９３２（２０００年４月２１日公開）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ＤＳＰによって構成されるＦＩＲフィルタでは、連続した積和計算については、１個の乗算器によっても高速で乗算を行うことが可能である。しかし、ＤＳＰではプログラムを実行することによってシリアルに処理が行われるので、乗算回数を半減させるためにフィルタ係数の対称性を利用する場合、上記のような積和演算の前で加算処理を行うために時間がかかり、全体の処理が遅くなるという不都合がある。
【０００７】
また、バッファをＲＡＭによって構成するＦＩＲフィルタでは、乗算回数を半減させるためにフィルタ係数の対称性を利用しようとしても、積和演算の前に加算する２つのデータをＲＡＭから取り出せるように構成されていないので、乗算回数を半減させることはできない。
【０００８】
本発明は、上記の問題点に鑑みてなされたものであり、その目的は、バッファにメモリ、特にＲＡＭを用いたＦＩＲフィルタにおいて乗算回数を半減させることにある。
【課題を解決するための手段】
【０００９】
本発明に係るＦＩＲフィルタは、上記課題を解決するために、従属接続された互いに独立した第１および第２メモリと、前記第２メモリから最も先の入力データを格納するように第１および第２メモリに順次入力データを書き込ませ、前記第１および第２メモリにそれぞれＦＩＲフィルタの次数の半分の入力データを書き込ませると、前記第１メモリから最も先または最も後に書き込まれた入力データから順に入力データを読み出す一方、前記第２メモリから最も後または最も先に書き込まれた入力データから順に入力データを読み出すことを次数の半分の入力データについて行う書込／読出制御手段と、前記第１および第２データから読み出された２つの入力データを加算する加算手段と、前記加算手段による加算値に対応するフィルタ係数を乗算する乗算手段と、前記次数の半分の前記乗算手段による乗算値を累算する累算手段とを備えていることを特徴としている。
【００１０】
上記の構成では、積和演算させるための入力データを２つの第１および第２メモリに分けて格納し、書込／読出制御手段によって、第１メモリから最も先（または最も後）に書き込まれた入力データから順に入力データが読み出される一方、第２メモリから最も後（または最も先）に書き込まれた入力データから順に入力データが読み出される。このような第１および第２メモリからの１つずつの入力データの読み出しは、各メモリに格納された次数の半分の入力データについて行われる。両メモリから読み出された２つの入力データは、加算手段で加算され、さらに乗算手段によってフィルタ係数が乗算された結果、乗算値が得られる。そして、乗算が繰り返されることによって得られた次数の半分の乗算値が累算手段によって累算される。
【００１１】
これにより、フィルタ係数の対称性を利用して乗算回数を次数の半分に減少させることをメモリを用いて実現することができる。
【００１２】
前記書込／読出制御手段は、入力データの前記第１メモリへの書込位置を変更する第１書込ポインタ手段と、入力データの前記第２メモリへの書込位置を変更する第２書込ポインタ手段と、入力データの前記第１メモリからの読出位置を変更する第１読出ポインタ手段と、入力データの前記第２メモリからの読出位置を変更する第２読出ポインタ手段とを有していることが好ましい。このように、第１および第２メモリへの書込位置および読出位置を変更することにより、第１および第２メモリがリングバッファとして構成されるので、第１および第２メモリにおける任意の位置に対して入力データの書き込みおよび読み出しを行うことができる。
【００１３】
また、前記第１および第２書込ポインタ手段が指定する書込位置の範囲および前記第１および第２読出ポインタ手段が指定する読出位置の範囲が可変であることにより、第１および第２メモリの記憶容量に余裕を持たせておけば、フィルタの次数に応じて第１および第２メモリに格納させる入力データ数を可変にすることができる。これにより、フィルタ次数（フィルタ長）を容易に変更することができる。
【発明の効果】
【００１４】
本発明に係るＦＩＲフィルタは、以上のように、２つの第１および第２メモリに格納した入力データから、それぞれフィルタ係数が対称関係にある入力データを読み出して加算し、その加算値に対して積和演算を行う構成であるので、フィルタ係数の対称性を利用して乗算回数を次数の半分に減少させることをメモリを用いて実現することができる。したがって、このＦＩＲフィルタを採用することによって、効率的なフィルタ処理を実現することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１５】
本発明の一実施形態について図１ないし図３に基づいて説明すると、以下の通りである。
【００１６】
本実施の形態に係るＦＩＲフィルタ１は、図１に示すように、データ遅延回路２、係数記憶回路３、加算器４、乗算器５および累算回路６を備えている。
【００１７】
データ遅延回路２は、ＲＡＭ−ＤＦ２１、ＲＡＭ−ＤＳ２２、アドレス制御回路２３，２４および制御回路２５を有している。
【００１８】
ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２は、遅延器を構成しており、順次入力された入力データを後述するように指定された順に読み出すことによって、所定時間遅延した入力データを後述する積和演算に供する。また、ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２は、それぞれ最大でｍ／２個（ｍは偶数）の入力データを格納する記憶容量を有しており、合計でｍ個の入力データの格納が可能である。ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２において入力データを格納する各記憶領域が遅延器における遅延素子に相当する。
【００１９】
アドレス制御回路２３（書込／読出制御手段）は、ＲＡＭ−ＤＦ２１の書き込みおよび読み出しのためのアドレスの出力を制御する回路である。このアドレス制御回路２３は、入力ポインタ（図中、in-pointerＦ）２３１と、出力ポインタ（図中、out-pointerＦ）２３２と、読出ポインタ（図中、rd-pointerＦ）２３３と、入力数カウンタ２３４と、セレクタ２３５とを有している。
【００２０】
入力ポインタ２３１は、ＲＡＭ−ＤＦ２１に外部からの入力データを書き込む領域を指定するためのアドレスを変化させる回路（アドレスポインタ）であり、例えばｎ進カウンタによって構成されている。この入力ポインタ２３１には、予め最初に入力される入力データを書き込む領域のアドレスの値（例えば０番地）がロードされており、最初にＲＡＭ−ＤＦ２１に入力データが入力されるときにアドレスのカウントを開始し、入力データが入力される毎にアドレスを１つずつインクリメントする。したがって、入力ポインタ２３１が出力するアドレスで指定されるＲＡＭ−ＤＦ２１の領域には、最も後に入力された入力データが格納されていることになる。
【００２１】
出力ポインタ２３２は、ＲＡＭ−ＤＦ２１に書き込まれた入力データを読み出す領域を指定するためのアドレスを発生する回路（アドレスポインタ）であり、例えばｎ進カウンタによって構成されている。この出力ポインタ２３２には、予め最初に入力される入力データを書き込む領域のアドレスの値（例えば０番地）がロードされており、入力データが読み出される毎にアドレスを１つずつインクリメントする。したがって、出力ポインタ２３２が出力するアドレスで指定されるＲＡＭ−ＤＦ２１の領域には、最も先に入力された入力データが格納されていることになる。
【００２２】
読出ポインタ２３３は、ＲＡＭ−ＤＦ２１に書き込まれた入力データを加算器４による加算に供するときに当該入力データを読み出す領域を指定するためのアドレスを発生する回路（アドレスポインタ）であり、例えばｎ進カウンタによって構成されている。この読出ポインタ２３３には、出力ポインタ２３２からのアドレスがロードされており、入力データが読み出される毎にアドレスを１つずつインクリメントする。これにより、読出ポインタ２３３が出力するアドレスは、ＲＡＭ−ＤＦ２１において最も先に書き込まれた入力データから後に書き込まれた入力データを１つずつ順次読み出すように変化する。
【００２３】
入力数カウンタ２３４は、ＲＡＭ−ＤＦ２１に入力された入力データ数（入力パルス数）をカウントする。この入力数カウンタ２３４は、ＲＡＭ−ＤＦ２１の規定データ入力数であるｋ個（２ｋはＦＩＲフィルタ１の次数）をカウントするとカウントアップする。
【００２４】
セレクタ２３５は、入力ポインタ２３１、出力ポインタ２３２および読出ポインタ２３３から出力されるアドレスの１つを選択して出力し、ＲＡＭ−ＤＦ２１に与える回路である。セレクタ２３５は、入力数カウンタ２３４がＲＡＭ−ＤＦ２１へのｋ個の入力データの入力をカウントアップするまで、入力ポインタ２３１からのアドレスを出力する。また、セレクタ２３５は、入力数カウンタ２３４が上記のようにカウントアップすると、出力ポインタ２３２からのアドレスと入力ポインタ２３１からのアドレスとを１つずつ交互に出力するように出力を切り替える。これにより、ＲＡＭ−ＤＦ２１から１つ入力データがＲＡＭ−ＤＳ２２に読み出されると、ＲＡＭ−ＤＦ２１に新たな入力データが１つ書き込まれる動作が繰り返される。さらに、セレクタ２３５は、後述する入力数カウンタ２４３がＲＡＭ−ＤＳ２２へのｋ個の入力データの入力をカウントアップすると、ｋ個の入力データに個々に対応したｋ個のアドレスを読出ポインタ２３３から出力した後、入力ポインタ２３１からのアドレスを１つ出力するように出力を切り替えることを繰り返す。これにより、ｋ個の入力データがＲＡＭ−ＤＦ２１から読み出される動作と、新たな１つの入力データがＲＡＭ−ＤＦ２１に書き込まれる動作とが繰り返される。
【００２５】
アドレス制御回路２４（読出／書込制御手段）は、ＲＡＭ−ＤＳ２２の書き込みおよび読み出しのためのアドレスの出力を制御する回路である。このアドレス制御回路２４は、入力ポインタ（図中、in-pointerＳ）２４１と、読出ポインタ（図中、rd-pointerＳ）２４２と、入力数カウンタ２４３と、セレクタ２４４とを有している。
【００２６】
入力ポインタ２４１は、ＲＡＭ−ＤＳ２２にＲＡＭ−ＤＦ２１から読み出された入力データを書き込む領域を指定するためのアドレスを発生する回路（アドレスポインタ）であり、例えばｎ進カウンタによって構成されている。この入力ポインタ２４１には、予め最初に入力される入力データを書き込む領域のアドレスの値（例えば０番地）がロードされており、最初にＲＡＭ−ＤＳ２２に入力データが入力されるとき、すなわち入力数カウンタ２３４がカウントアップしたときに入力データが入力される毎にアドレスを１つずつインクリメントする。したがって、入力ポインタ２４１が出力するアドレスで指定されるＲＡＭ−ＤＳ２２の領域には、最も後に入力された入力データが格納されていることになる。
【００２７】
読出ポインタ２４２は、ＲＡＭ−ＤＳ２２に書き込まれた入力データを加算器４による加算に供するときに当該入力データを読み出す領域を指定するためのアドレスを発生する回路（アドレスポインタ）であり、例えばｎ進カウンタによって構成されている。この読出ポインタ２４２には、入力ポインタ２４１からのアドレスがロードされており、入力データが読み出される毎にアドレスを１つずつデクリメントする。これにより、読出ポインタ２４２が出力するアドレスは、ＲＡＭ−ＤＳ２２において最も後に書き込まれた入力データから先に書き込まれた入力データを１つずつ順次読み出すように変化する。
【００２８】
入力数カウンタ２４３は、ＲＡＭ−ＤＳ２２に入力された入力データ数（入力パルス数）をカウントする。この入力数カウンタ２４３は、ＲＡＭ−ＤＳ２２の規定データ入力数であるｋ個をカウントするとカウントアップする。
【００２９】
セレクタ２４４は、入力ポインタ２４１および読出ポインタ２４２から出力されるアドレスの１つを選択して出力し、ＲＡＭ−ＤＳ２２に与える回路である。セレクタ２４４は、入力数カウンタ２４３がＲＡＭ−ＤＳ２２へのｋ個の入力データの入力をカウントアップするまで、入力ポインタ２４１からのアドレスを出力する。また、セレクタ２４４は、入力数カウンタ２４３が上記のようにカウントアップすると、ｋ個の入力データに個々に対応したｋ個のアドレスを読出ポインタ２４２から出力した後、入力ポインタ２４１からのアドレスを１つ出力するように出力を切り替えることを繰り返す。これにより、ＲＡＭ−ＤＳ２２からｋ個の入力データが読み出される動作と、ＲＡＭ−ＤＦ２１から出力された１つの入力データがＲＡＭ−ＤＳ２２に書き込まれる動作とが繰り返される。
【００３０】
制御回路２５は、ＲＡＭ−ＤＦ２１、ＲＡＭ−ＤＳ２２およびアドレス制御回路２３，２４の動作を制御する回路である。制御回路２５は、下記のアドレスの出力制御に合わせて、ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２に書き込みおよび読み出しを許可する。
【００３１】
制御回路２５は、アドレス制御回路２３に対しては次の（１）〜（６）の制御を行う。
（１）ＲＡＭ−ＤＦ２１への最初の入力データの入力に合わせて、入力数カウンタ２３４にカウント開始の指示を与えるとともに、入力ポインタ２３１にアドレスの出力開始の指示を与える。
（２）入力数カウンタ２３４が入力データ数のカウントを開始してからカウントアップするまでの間に入力ポインタ２３１からのアドレスを出力させるようにセレクタ２３５に指示を与える。
（３）入力数カウンタ２３４がカウントアップすると、入力ポインタ２３１にアドレスの出力停止の指示を与えた後、出力ポインタ２３２に１つのアドレスを出力させるための指示を与えることと、入力ポインタ２３１に１つのアドレスを出力させるための指示を与えることを繰り返す。
（４）入力数カウンタ２３４がカウントアップすると、出力ポインタ２３２からのアドレスと入力ポインタ２３１からのアドレスとを１つずつ交互に出力するようにセレクタ２３５に指示を与える。
（５）入力数カウンタ２３４がカウントアップすると、読出ポインタ２３３にｋ個のアドレスを出力させるための指示を与えることと、入力ポインタ２３１に１つのアドレスを出力させるための指示を与えることを繰り返す。
（６）入力数カウンタ２４３がカウントアップすると、読出ポインタ２３３からのｋ個のアドレスと入力ポインタ２３１からの１つのアドレスとを交互に出力させるようにセレクタ２３５に指示を与える。
【００３２】
また、制御回路２５は、アドレス制御回路２４に対しては次の（７）〜（１０）の制御を行う。
（７）入力数カウンタ２３４がカウントアップすると、ＲＡＭ−ＤＳ２２への最初の入力データの入力に合わせて、入力数カウンタ２４３にカウント開始の指示を与えるとともに、入力ポインタ２３１にアドレスの出力開始の指示を与える。
（８）入力数カウンタ２４３が入力データ数のカウントを開始してからカウントアップするまでの間に入力ポインタ２４１からのアドレスを出力させるようにセレクタ２４４に指示を与える。
（９）入力数カウンタ２４３がカウントアップすると、読出ポインタ２４２にｋ個のアドレスを出力させるための指示を与えることと、入力ポインタ２４１に１つのアドレスを出力させるための指示を与えることを繰り返す。
（１０）入力数カウンタ２４３がカウントアップすると、読出ポインタ２４２からのｋ個のアドレスと入力ポインタ２４１からの１つのアドレスとを交互に出力させるようにセレクタ２４４に指示を与える。
【００３３】
係数記憶回路３は、ＲＡＭ−ＣＥ３１と、読出ポインタ３２とを有している。
【００３４】
ＲＡＭ−ＣＥ３１は、乗算器５に与えるフィルタ係数を記憶するために設けられており、予め外部、例えばフィルタ係数レジスタ７などから入力されたｋ個のフィルタ係数を格納している。
【００３５】
読出ポインタ３２は、ＲＡＭ−ＣＥ３１に格納されているフィルタ係数を乗算器５に与えるときに当該フィルタ係数を読み出す領域を指定するためのアドレスを発生する回路（アドレスポインタ）であり、例えばｎ進カウンタによって構成されている。この読出ポインタ３２には、予め最初に出力されるフィルタ係数が格納された領域のアドレス（先頭アドレス）の値（例えば０番地）がロードされており、フィルタ係数が読み出される毎にアドレスを１つずつインクリメントする。これにより、読出ポインタ３２が出力するアドレスは、ＲＡＭ−ＣＥ３１において先頭のフィルタ係数から順に１つずつ順次読み出すように変化する。
【００３６】
加算器４（加算手段）は、ＲＡＭ−ＤＦ２１から読み出された入力データと、ＲＡＭ−ＤＳ２２から読み出された入力データとを加算する回路である。乗算器５（乗算手段）は、加算器４から出力された加算データにＲＡＭ−ＣＥ３１から出力されたフィルタ係数を乗算する回路である。
【００３７】
累算回路６（累算手段）は、乗算器５から連続して出力される乗算値をｋ個累算してフィルタ出力を得る回路である。この累算回路６は、加算器６１と、レジスタ６２と、出力レジスタ６３と、処理数カウンタ６４と、コンパレータ６５とを有している。
【００３８】
加算器６１は、乗算器５から出力される乗算値にレジスタ６２から出力される値を加算する回路である。
【００３９】
レジスタ６２は、加算器６１から出力される加算値を保持する回路である。このレジスタ６２は、加算器４による加算処理が開始してから、入力データが新たにＲＡＭ−ＤＦ２１に入力される毎にリセットされる。
【００４０】
出力レジスタ６３は、レジスタ６２の出力値を保持する回路である。この出力レジスタ６３は、累算回路６による累算処理の回数がｋ回に達したときに保持している出力値を出力データとして出力する。
【００４１】
処理数カウンタ６４は、レジスタ６２がリセットされるまでに加算器６１からの加算データを保持した回数をカウントするカウンタである。コンパレータ６５は、処理数カウンタ６４のカウント値と規定回数であるｋとを比較して、両者が一致したときに出力レジスタ６３に保持している出力値を出力する信号を与える。
【００４２】
上記のように構成されるＦＩＲフィルタ１の動作について説明する。
【００４３】
まず、初期状態では、ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２には、入力データが書き込まれていない。この状態から、入力データがＲＡＭ−ＤＦ２１に入力されると、入力データは、入力ポインタ２３１からセレクタ２３５を介して与えられたアドレス（例えば０番地）で指定される領域に書き込まれる。入力ポインタ２３１は、入力データが入力される毎にアドレスをインクリメントする。これにより、入力データは、入力順にＲＡＭ−ＤＦ２１の異なる領域に書き込まれていく。このとき、入力数カウンタ２３４によって、ＲＡＭ−ＤＦ２１に入力される入力データの数がカウントされる。
【００４４】
このようにして、ｋ個の入力データ（Ｄ１〜Ｄｋ）がＲＡＭ−ＤＦ２１に書き込まれると（図２（ａ））、入力数カウンタ２３４がカウントアップする。これにより、出力ポインタ２３２からのアドレスがセレクタ２３５を介してＲＡＭ−ＤＦ２１に与えられる。すると、図２（ａ）に示すように、最も先にＲＡＭ−ＤＦ２１に書き込まれていた入力データ（Ｄ１）が読み出される。出力ポインタ２３２は、入力データが読み出されるとアドレスをインクリメントする。したがって、ＲＡＭ−ＤＦ２１からは、次にそのアドレスで指定される入力データ（Ｄ２）が読み出される。
【００４５】
一方、アドレス制御回路２４では、入力ポインタ２４１からのアドレスがセレクタ２４４を介してＲＡＭ−ＤＳ２２に与えられるので、ＲＡＭ−ＤＳ２２において、そのアドレスで指定される領域にＲＡＭ−ＤＦ２１から最初に読み出された入力データ（Ｄ１）が書き込まれる（図２（ａ））。すると、入力ポインタ２４１がアドレスをインクリメントするので、そのアドレスで指定されるＲＡＭ−ＤＳ２２の領域には、次にＲＡＭ−ＤＦ２１から読み出された入力データ（Ｄ２）が書き込まれる。このようにして、ＲＡＭ−ＤＦ２１からの入力データの読み出しとＲＡＭ−ＤＳ２２への入力データの書き込みとを繰り返すことによって、ＲＡＭ−ＤＦ２１に書き込まれた入力データをＲＡＭ−ＤＳ２２に移す。このとき、入力数カウンタ２４３によって、ＲＡＭ−ＤＳ２２に入力される入力データの数がカウントされる。また、この動作と並行して、ＲＡＭ−ＤＦ２１にも前述のようにして入力データが書き込まれていく。
【００４６】
このようにして、ＲＡＭ−ＤＦ２１からのｋ個の入力データ（Ｄ１〜Ｄｋ）がＲＡＭ−ＤＳ２２に書き込まれると（図２（ｂ））、入力数カウンタ２４３がカウントアップする。また、ＲＡＭ−ＤＦ２１にも新たなｋ個の入力データ（Ｄｋ＋１〜Ｄ２ｋ）が書き込まれるので、入力数カウンタ２３４がカウントアップする。これにより、積和演算に供するためのＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２からの入力データの読み出しが開始される。
【００４７】
このとき、読出ポインタ２３３は出力ポインタ２３２からアドレスがロードされており、そのアドレスがセレクタ２３５を介してＲＡＭ−ＤＦ２１に与えられる。一方、読出ポインタ２４２は入力ポインタ２４１からアドレスがロードされており、そのアドレスがセレクタ２４４を介してＲＡＭ−ＤＳ２２に与えられる。すると、図２（ｂ）に示すように、ＲＡＭ−ＤＦ２１に最も先に書き込まれていた入力データ（Ｄｋ＋１）とＲＡＭ−ＤＳ２２に最も後に書き込まれていた入力データ（Ｄｋ）とが読み出される。
【００４８】
また、読出ポインタ２３３は、入力データが読み出されるとアドレスをインクリメントする一方、読出ポインタ２４２は、入力データが読み出されるとアドレスをデクリメントする。これにより、ＲＡＭ−ＤＦ２１からは、入力データ（Ｄｋ＋１）の次に書き込まれた入力データ（Ｄｋ＋２）が読み出される一方、ＲＡＭ−ＤＳ２２からは、入力データ（Ｄｋ）の前に書き込まれた入力データ（Ｄｋ−１）が読み出される。このように、読出ポインタ２３３によるアドレスのインクリメントおよび読出ポインタ２４２によるアドレスのデクリメントと、その結果得られたアドレスの指定によるＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２からの入力データの読み出しが繰り返される。
【００４９】
ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２から読み出された２つの入力データは、加算器４で加算されて乗算器５に入力される。また、係数記憶回路３１では、読出ポインタ３２から与えられるアドレスによって、フィルタ係数が読み出される。入力された２つの入力データには、乗算器５によって、対応したＲＡＭ−ＣＥ３１からのフィルタ係数が乗算される。読出ポインタ３１は、フィルタ係数が読み出される毎にアドレスをインクリメントする。このような加算および乗算の処理が、加算器４に順次入力されてくる２つの入力データに対して繰り返して行われる。
【００５０】
そして、乗算器５から出力される上限結果（乗算データ）は、順次、累算回路６に入力される。累算回路６では、加算器６１で、入力される乗算データにレジスタ６２からの出力（加算データ）が加算されてレジスタ６２に出力される。レジスタ６２では、加算器６１から加算データが出力される毎に、保持する加算データを最新の加算データに書き替える。また、レジスタ６２に保持された加算データは、加算器６１だけでなく出力レジスタ６３にも出力されているので、出力レジスタ６３も同じ加算データを保持している。
【００５１】
一方、レジスタ６２が加算器６１からの加算データを保持した回数が、コンパレータ６５によってｋと比較される。コンパレータ６５による比較の結果、保持回数がｋに一致すると（上記の乗算データがｋ個累算されると）、出力レジスタ６３に保持された加算データが出力データとして出力される。上記のように、ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２からの入力データの読み出し、加算器４による加算、乗算器５による乗算および累算回路６による累算がｋ回繰り返されて出力データが得られた後に、ＲＡＭ−ＤＦ２１に新たな入力データが入力される。この入力データの入力によって、レジスタ６２および出力レジスタ６３がリセットされる。
【００５２】
また、上記の入力データの読み出し、加算、乗算および累算のｋ回の一連の処理は、次の入力データがＲＡＭ−ＤＦ２１に入力されるまでに完了する。このため、制御回路２５は、入力データの読み出し、加算、乗算および累算の各処理をクロックの１クロック間に行うようにタイミングの制御を行い、各処理をパイプライン的に進めていく。例えば、第１期間で１回目のデータ読み出しを行い、第２期間で、２回目のデータ読み出しと、１回目の読み出しデータの加算とを行う。続く第３期間では、３回目のデータ読み出しと、２回目の読み出しデータの加算と、１回目の加算データへの乗算とを行う。さらに続く第４期間では、４回目のデータ読み出しと、３回目の読み出しデータの加算と、２回目の加算データへの乗算と、１回目の累算とを行う。このようなパイプライン処理を行うことにより、比較的動作の遅い回路でも、ＲＡＭ−ＤＦ２１へ入力データが入力される間にｋ回の積和演算を実行することができる。
【００５３】
上記のようにして、上記の一連の演算処理がｋ回行われることにより、ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２から読み出された２ｋ個の入力データに対する積和演算が行われる。また、ＦＩＲフィルタ１に新たに入力データが入力されると、前述のように、入力ポインタ２３４のアドレス指定によって、当該入力データがＲＡＭ−ＤＦ２１に書き込まれる。これと同時に、ＲＡＭ−ＤＦ２１における最も先に書き込まれた入力データが、ポインタ２３２によるアドレス指定で読み出されて、ＲＡＭ−ＤＳ２２に書き込まれて移される。したがって、この入力データの書き込みおよび転送と、新たな２ｋ個の入力データへの上記演算処理と同じ一連の演算処理が次のＲＡＭ−ＤＦ２１への力データの入力が行われるまでに完了する。
【００５４】
入力データが書き込まれると、この最も新しい入力データを含むＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２に格納されている２ｋ個の入力データに対して、上記のようなｋ回の積和演算が行われる。また、このとき、前の積和演算で用いたＲＡＭ−ＤＳ２２における最も先に書き込まれた（最も古い）入力データは、積和演算に用いられない（破棄される）。このように、最も新しい入力データを加えるとともに、前回の積和演算で使用された最も古い入力データを除いた２ｋ個の入力データに対する積和演算が繰り返されることによりフィルタ処理が実現される。
【００５５】
このように、本実施の形態に係るＦＩＲフィルタ１は、２つのＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２に格納された連続するｋ個の入力データ（ＲＡＭ−ＤＦ２１とＲＡＭ−ＤＳ２２との間でも連続する）から、対称関係にあるフィルタ係数を乗算する入力データをそれぞれ１つずつ読み出して加算器４にて加算し、その加算結果に対してフィルタ係数を乗算器５にて乗算するという処理をｋ個の入力データについて行い、その総和を累算回路６にて演算する。これにより、フィルタ係数の対称性を利用して、乗算処理の回数を半減することができるＦＩＲフィルタ１を、ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２のようにＲＡＭを用いたデジタル回路で構成することができる。したがって、ＦＩＲフィルタ１をＡＩＳＣ（Application Specific Intefrated Circuit）やＦＰＧＡ（Field Prgrammable Gate Array）などで容易に構成することが可能となる。
【００５６】
また、ＦＩＲフィルタ１では、ＲＡＭ−ＤＦ２１において、入力ポインタ２３１、出力ポインタ２３２および読出ポインタ２３３によって書込位置および読出位置が変化し、ＲＡＭ−ＤＳ２２において、入力ポインタ２４１および読出ポインタ２４２によって書込位置および読出位置が変化するように構成されている。これにより、ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２が任意の位置で入力データの書き込みと読み出しとを行うリングバッファとして機能する。それゆえ、ＲＡＭ−ＤＦ２１およびＲＡＭ−ＤＳ２２のそれぞれの記憶可能な入力データ数の総数の上限をｍ／２≧ｎ／２（ｍ，ｎは偶数）と設定することにより、上限までであれば、入力ポインタ２３１，２４１、出力ポインタ２３２および読出ポインタ２３３，２４２によってそれぞれ規定されるアドレスの範囲を変更することにより、フィルタの次数ｎ（フィルタ長）を任意に設定することができる。
【００５７】
図３に示すように、フィルタ係数の対称性を利用したｎ次のＦＩＲフィルタ１００は、遅延器１０１，１０２と、加算器群１０３と、乗算器群１０４と、累算器１０５（加算器）とによって構成される。遅延器１０１は、ｎ／２個（ｋ個）の遅延素子ＤＥＬ１〜ＤＥＬｋからなり、遅延器１０２は、ｎ／２個（ｋ個）の遅延素子ＤＥＬｋ＋１〜ＤＥＬ２ｋからなる。加算器群１０３は、ｋ個の加算器ＡＤＤ１〜ＡＤＤｋからなり、乗算器群１０４は、ｋ個の乗算器ＭＴＰ１〜ＭＴＰｋからなる。
【００５８】
ＦＩＲフィルタ１００における遅延器１０１，１０２は、ＦＩＲフィルタ１におけるＲＡＭ−ＤＳ２１とＲＡＭ−ＤＳ２２とによってそれぞれ構成される。また、ＦＩＲフィルタ１００における加算器群１０３と乗算器群１０４は、それぞれＦＩＲフィルタ１における加算器４と乗算器５とによって構成される。さらに、ＦＩＲフィルタ１００における累算器１０５は、ＦＩＲフィルタ１における累算回路６によって構成される。
【００５９】
なお、上記のＦＩＲフィルタ１では、加算器４の加算に供するために、ＲＡＭ−ＤＦ２１から最も先に書き込まれた入力データから順に読み出す一方、ＲＡＭ−ＤＳ２２から最も後に書き込まれた入力データから順に読み出しているが、入力データの読み出しの順番は、上記の順番の逆であってもよい。つまり、ＲＡＭ−ＤＦ２１から最も後に書き込まれた入力データから順に読み出す一方、ＲＡＭ−ＤＳ２２から最も先に書き込まれた入力データから順に読み出す。このため、アドレス制御回路２３においては、読出ポインタ２３３は入力ポインタ２３１のアドレスがロードされる。また、アドレス制御回路２４においては、読出ポインタ２４２に出力ポインタ２３２と同等な昨日を持たせる。
【００６０】
また、本ＦＩＲフィルタ１では、ＲＡＭ−ＤＳ２１およびＲＡＭ−ＤＳ２２がリングバッファを構成する例について説明したが、遅延器を構成するメモリとしては、リングバッファに限らず、ＦＩＦＯ（First-In First-Out）メモリであってもよい。ただし、ＦＩＦＯメモリの場合、リングバッファのように任意のフィルタ長を可変に設定できない。
【００６１】
本発明は上述した実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能である。すなわち、請求項に示した範囲で適宜変更した技術的手段を組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【産業上の利用可能性】
【００６２】
本発明のＦＩフィルタは、フィルタ係数の対称性を利用して乗算処理の回数を半減させることをデジタル回路で構成することができるので、高速なフィルタ処理を必要とする状況に利用できる。
【図面の簡単な説明】
【００６３】
【図１】本発明の実施の一形態を示すＦＩＲフィルタの構成を示すブロック図である。
【図２】上記ＦＩＲフィルタにおけるＲＡＭ−ＤＦおよびＲＡＭ−ＤＳの入力データの書き込みおよび読み出しの動作を示す図である。
【図３】上記ＦＩＲフィルタによって実現可能なフィルタ係数の対称性を利用して乗算回数を半減できるＦＩＲフィルタの一般的な構成を示すブロック図である。
【符号の説明】
【００６４】
１        ＦＩＲフィルタ
２        データ遅延回路
３        係数記憶回路
４        加算器（加算手段）
５        乗算器（乗算手段）
６        累算回路（累算手段）
２１        ＲＡＭ−ＤＦ（第１メモリ）
２２        ＲＡＭ−ＤＳ（第２メモリ）
２３，２４  アドレス制御回路（書込／読出制御手段）
２３１        入力ポインタ（第１書込ポインタ手段）
２３２        出力ポインタ
２３３        読出ポインタ（第１読出ポインタ手段）
２４１        入力ポインタ（第２書込ポインタ手段）
２４２        読出ポインタ（第２読出ポインタ手段）
【図１】
2007124556.tif 000003
【図２】
2007124556.tif 000004
【図３】
2007124556.tif 000005