(57)【要約】【課題】フィルタ演算を行なう際の処理負荷や処理時間を改善したデジタルフィルタを提供すること。【解決手段】一定時間周期でサンプリングされるＮ個のデータに対して各々対応するフィルタ係数を乗じた後に積算することによってフィルタ演算を行なう。データは、Ｎ個記憶され、フィルタ係数は、Ｎ個のデータの各々に対応するＮ個のフィルタ係数を１組としたとき、２組分マイナス１個だけ記憶しておく、そして、Ｎ個のデータ、及びＮ個のデータ記憶領域の先頭に記憶されているデータに対応するフィルタ係数から順にＮ個のフィルタ係数を読み出してフィルタ演算を行なう。これにより、データ及びフィルタ係数の読み出しに要する処理負荷が低減でき、フィルタ演算の処理時間を改善できる。【選択図】  図７
2005252389.tif 000002
【特許請求の範囲】
【請求項１】
一定時間周期でサンプリングされる複数のデータに対して各々フィルタ係数を乗じた後に積算することによってフィルタ演算を行なうデジタルフィルタであって、
前記データに関して、最新データ及び過去データからなる計Ｎ個分のデータをそれぞれ記憶するＮ個のデータ記憶領域を有し、そのＮ個のデータ記憶領域の先頭から末尾にかけて時系列にデータを記憶するとともに、最新データの記憶先が末尾のデータ記憶領域まで達した場合に、その最新データ記憶先が先頭のデータ記憶領域に戻るデータ記憶手段と、
前記Ｎ個のデータの各々に対応するＮ個のフィルタ係数を１組としたとき、２組分のフィルタ係数を記憶すべく２Ｎ個のフィルタ係数記憶領域を有するフィルタ係数記憶手段と、
前記２Ｎ個のフィルタ係数記憶領域において、前記Ｎ個のデータ記憶領域の先頭に記憶されているデータに対応するフィルタ係数が記憶されているフィルタ係数記憶領域を指示する指示手段とを備え、
前記指示手段によって指示されたフィルタ係数記憶領域を先頭として、それに続くフィルタ係数記憶領域から読み出されるＮ個のフィルタ係数を用いて、前記フィルタ演算を行なうことを特徴とするデジタルフィルタ。
【請求項２】
一定時間周期でサンプリングされる複数のデータに対して各々フィルタ係数を乗じた後に積算することによってフィルタ演算を行なうデジタルフィルタであって、
前記データに関して、最新データ及び過去データからなる計Ｎ個分のデータをそれぞれ記憶するＮ個のデータ記憶領域を有し、そのＮ個のデータ記憶領域の先頭から末尾にかけて時系列にデータを記憶するとともに、最新データの記憶先が末尾のデータ記憶領域まで達した場合に、その最新データ記憶先が先頭のデータ記憶領域に戻るデータ記憶手段と、
前記Ｎ個のデータの各々に対応するＮ個のフィルタ係数を１組としたとき、その２組分のフィルタ係数において、第１組目の最初のフィルタ係数と第２組目の最後のフィルタ係数とのいずれかを除いた２Ｎ−１個のフィルタ係数を記憶する２Ｎ−１個のフィルタ係数記憶領域を有するフィルタ係数記憶手段と、
前記２Ｎ−１個のフィルタ係数記憶領域において、前記Ｎ個のデータ記憶領域の先頭に記憶されているデータに対応するフィルタ係数が記憶されているフィルタ係数記憶領域を指示する指示手段とを備え、
前記指示手段によって指示されたフィルタ係数記憶領域を先頭として、それに続くフィルタ係数記憶領域から読み出されるＮ個のフィルタ係数を用いて、前記フィルタ演算を行なうことを特徴とするデジタルフィルタ。
【請求項３】
前記指示手段は、前記最新データが前記データ記憶手段のいずれかのデータ記憶領域に記憶される度に、指示すべきフィルタ係数記憶領域を１つずらすように構成されていることを特徴とする請求項１又は請求項２に記載のデジタルフィルタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一定時間間隔で取得される複数のデータに対して、各々フィルタ係数を乗じた後に積算することによってフィルタ演算（畳み込み演算）を行なうデジタルフィルタに関するものである。本発明によるデジタルフィルタは、例えば、エンジンＥＣＵにおいて、エンジンノックの発生を検出するために、エンジンの振動周波数をフィルタ処理する際に利用できる。
【背景技術】
【０００２】
上述したようなフィルタ演算を行なうデジタルフィルタとして、ＦＩＲ（Finite Impulse Response :有限インパルス応答）フィルタが広く知られている。このＦＩＲフィルタにおいては、例えば、一定時間周期で入力される入力データをＲＡＭ等に記憶する際に、記憶領域において各データを一つずつ順送りさせることにより、最新のデータを記憶する際に、最も古いデータを削除する。これにより、記憶領域には、最新のデータから順に古くなる所定個数のデータが記憶されることになる。
【０００３】
しかし、このようなデータ順送り方法では、フィルタ演算に用いるデータ数が多くなると、移動させなければならないデータが増え、データ移動のために演算処理負荷が増加するとの問題が生じる。
【０００４】
また、入力データの記憶にリングバッファを用いて、最も古いデータを最新データに置き換え、その間のデータはそのままにしておくという方法もある。ただし、この場合、データとフィルタ係数との対応付けを行なうため、リングバッファのデータを時系列に並び替えて他のバッファに格納したりすることが必要になる。この場合、並べ替えた後のデータを記憶する記憶領域が必要になったり、その並べ替えのために演算処理負荷が増加したりするとの問題が生じる。
【０００５】
また、リングバッファを用いた場合、そのリングバッファ上で読み出すべきデータのアドレスを相対的に指定することによっても、フィルタ係数の対応付けを行なうことができる。しかしながら、この場合、データの読出し毎に、そのデータを記憶している領域のアドレスが最後尾アドレスに達したかどうかを判定し、最後尾アドレスの次は先頭アドレスへ戻すといった判定・復帰処理が必要となり、やはり演算処理負荷が増加してしまう。
【０００６】
このような問題点を解決できるデジタルフィルタが、本出願人により出願され公開された特許文献１に記載されている。
【０００７】
この特許文献１のデジタルフィルタでは、フィルタ演算に必要なデータ個数Ｎの２倍である２Ｎ個分のデータを各々記憶する２Ｎ個の記憶領域をＲＡＭに設けている。そして、Ａ／Ｄ変換された最新データをＲＡＭに記憶する際に、データＮ個分離れた２つの記憶領域に同一の最新データを記憶させる。その最新データの記憶先は、最新データが記憶される度に１ずつ進められ、同一のデータが格納される２つの記憶領域の一方が末尾の記憶領域になると、最新データの記憶先は、先頭の記憶領域とそれからＮ個分離れた記憶領域とに戻される。
【０００８】
このような形式でデータを記憶すると、フィルタ演算に使用するＮ個分のデータは、同じデータが記憶される２つの記憶領域間で、連続する記憶領域に格納されることになる。そのため、各記憶領域からデータを取り出す際に、単に連続的にアドレスを更新するのみで足り、そのアドレスが最後尾アドレスに達したかどうかを判定する処理等が不要となる。このため、演算処理負荷を減少することができ、フィルタ演算の処理速度を向上することができる。
【特許文献１】特開２００３−８７０９８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述した特許文献１に記載されたデジタルフィルタでは、同一の最新データを２箇所の記憶領域に記憶させており、そのための処理時間が余計に必要であった。すなわち、上述した従来のデジタルフィルタでは、フィルタ演算を行なう際の処理負荷や処理時間に関して、改善の余地が残されている。
【００１０】
本発明は、上記した点に鑑みてなされたものであり、フィルタ演算を行なう際の処理負荷や処理時間を改善したデジタルフィルタを提供することを目的とするものである。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、請求項１に記載のデジタルフィルタは、一定時間周期でサンプリングされる複数のデータに対して各々フィルタ係数を乗じた後に積算することによってフィルタ演算を行なうものであって、
データに関して、最新データ及び過去データからなる計Ｎ個分のデータをそれぞれ記憶するＮ個のデータ記憶領域を有し、そのＮ個のデータ記憶領域の先頭から末尾にかけて時系列にデータを記憶するとともに、最新データの記憶先が末尾のデータ記憶領域まで達した場合に、その最新データ記憶先が先頭のデータ記憶領域に戻るデータ記憶手段と、
Ｎ個のデータの各々に対応するＮ個のフィルタ係数を１組としたとき、２組分のフィルタ係数を記憶すべく２Ｎ個のフィルタ係数記憶領域を有するフィルタ係数記憶手段と、
２Ｎ個のフィルタ係数記憶領域において、Ｎ個のデータ記憶領域の先頭に記憶されているデータに対応するフィルタ係数が記憶されているフィルタ係数記憶領域を指示する指示手段とを備え、
指示手段によって指示されたフィルタ係数記憶領域を先頭として、それに続くフィルタ係数記憶領域から読み出されるＮ個のフィルタ係数を用いて、フィルタ演算を行なうことを特徴とする。
【００１２】
このように請求項１に記載のデジタルフィルタでは、最新データを２箇所の記憶領域に格納して２Ｎ個のデータを記憶保持するのではなく、２Ｎ個のフィルタ係数を記憶する。この２Ｎ個のフィルタ係数は、Ｎ個のデータの各々に対応するＮ個のフィルタ係数を１組としたとき、２組分のフィルタ係数に相当する。
【００１３】
フィルタ演算では、先頭のデータ記憶領域に記憶されたデータから順に、対応するフィルタ係数と乗算される。その際、２組分のフィルタ係数を記憶しているので、その先頭のデータ記憶領域のデータに対応するフィルタの記憶領域が指示手段によって指示されれば、その後は、フィルタの記憶領域を順次更新することで、その後のデータに対応するフィルタ係数を連続したフィルタ係数記憶領域から読み出すことができる。従って、フィルタ係数記憶手段からのフィルタ係数の読出しに際しては、当然ではあるが、その記憶領域が末尾の記憶領域かどうかを判定する判定処理等は不要となる。
【００１４】
このように、請求項１に記載のデジタルフィルタでは、予め２組分のフィルタ係数を記憶しているので、上述した判定処理等を不要とし、かつ、同一のデータを２箇所の記憶領域に記憶させる必要もない。従って、従来のデジタルフィルタに比較して、さらに処理負荷の低減及び処理速度の向上を図ることが可能になる。
【００１５】
また、請求項２に記載のデジタルフィルタは、一定時間周期でサンプリングされる複数のデータに対して各々フィルタ係数を乗じた後に積算することによってフィルタ演算を行なうものであって、
データに関して、最新データ及び過去データからなる計Ｎ個分のデータをそれぞれ記憶するＮ個のデータ記憶領域を有し、そのＮ個のデータ記憶領域の先頭から末尾にかけて時系列にデータを記憶するとともに、最新データの記憶先が末尾のデータ記憶領域まで達した場合に、その最新データ記憶先が先頭のデータ記憶領域に戻るデータ記憶手段と、
Ｎ個のデータの各々に対応するＮ個のフィルタ係数を１組としたとき、その２組分のフィルタ係数において、第１組目の最初のフィルタ係数と第２組目の最後のフィルタ係数とのいずれかを除いた２Ｎ−１個のフィルタ係数を記憶する２Ｎ−１個のフィルタ係数記憶領域を有するフィルタ係数記憶手段と、
２Ｎ−１個のフィルタ係数記憶領域において、Ｎ個のデータ記憶領域の先頭に記憶されているデータに対応するフィルタ係数が記憶されているフィルタ係数記憶領域を指示する指示手段とを備え、
指示手段によって指示されたフィルタ係数記憶領域を先頭として、それに続くフィルタ係数記憶領域から読み出されるＮ個のフィルタ係数を用いて、フィルタ演算を行なうことを特徴とする。
【００１６】
上述したように、請求項２に記載のデジタルフィルタでは、請求項１に記載のデジタルフィルタと異なり、Ｎ個のデータの各々に対応するＮ個のフィルタ係数を１組としたとき、その２組分のフィルタ係数において、第１組目の最初のフィルタ係数と第２組目の最後のフィルタ係数とのいずれかを除いた２Ｎ−１個のフィルタ係数を記憶する。
【００１７】
ここで、フィルタ係数の記憶領域が末尾の記憶領域かどうかの判定処理を不要とするためには、常にＮ個のフィルタ係数を連続した記憶領域から取り出すことが可能であれば良い。２組分のフィルタ係数を記憶した場合、フィルタ係数の取出範囲がそれぞれの組に跨らず、第１組目あるいは第２組目のフィルタ係数が単独で取り出されるときに、全く同じフィルタ係数の組合せとなる。すなわち、厳密に考えれば、Ｎ個のフィルタ係数を連続した記憶領域から読み出すためには、２組分のフィルタ係数は過剰であり、２組分から１個だけ減らした２Ｎ−１個のフィルタ係数が記憶されていれば足りる。
【００１８】
請求項３に記載したように、指示手段は、最新データがデータ記憶手段のいずれかのデータ記憶領域に記憶される度に、指示すべきフィルタ係数記憶領域を１つずらすように構成することができる。これにより、簡単な構成で指示手段を実現することができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施形態に係るデジタルフィルタを図面を参照しつつ説明する。本実施形態のデジタルフィルタは、例えば自動車用センサの検出信号を取り込む車載ＥＣＵ等により実現される。
【００２０】
図１は、本実施形態によるデジタルフィルタを、自動車のエンジンのノック検出のため、ノックセンサの検出信号に対するフィルタ処理に適用した場合の構成を示すブロック図である。この適用例では、図１に示すように、複数のノックセンサ（第１及び第２ノックセンサ）が設けられており、それぞれ、図示しないエンジンの振動の大きさ及び周波数を示すノック信号を出力する。図２（ａ）に、ノックセンサから出力されるノック信号波形の一例を示す。
【００２１】
なお、複数のノックセンサが設けられているのは、通常、自動車のエンジンが複数気筒からなるためである。例えば、ノックセンサは、２気筒当たり１個程度の割合で、エンジンに設けられる。
【００２２】
センサセレクタ１０は、複数のノックセンサのノック信号から１つのノック信号を選択して、後段のプリアンプ２０に出力するものである。このセンサセレクタ１０は、所定の周期で、選択するノック信号を切り換える。プリアンプ２０は、センサセレクタ１０から出力されたノック信号を増幅する。プリアンプ２０によって増幅されたノック信号は、ローパスフィルタ（ＬＰＦ）３０に入力されて、ノックの発生を判定する際にノイズ成分となる高周波成分を除去する。
【００２３】
上述したセンサセレクタ１０、プリアンプ２０、及びＬＰＦ３０は、後述するエンジン制御装置（ＥＣＵ）４０の外部に、アナログ回路として構成される。
【００２４】
ＬＰＦ３０によって高周波成分が除去されたノック信号は、ＥＣＵ４０に入力される。ＥＣＵ４０は、アナログデジタル変換器（Ａ／Ｄ）５０、デジタルフィルタ部６０、及びノック判定部７０を備える。
【００２５】
ＥＣＵ４０に入力されたノック信号は、まずＡ／Ｄ５０によって、アナログ信号からデジタル信号に変換される。このデジタル信号への変換処理は、一定時間周期でノック信号（アナログ信号）をサンプリングし、このサンプリングしたノック信号に対して実施される。
【００２６】
デジタル信号に変換されたノック信号はデジタルフィルタ部６０に入力される。デジタルフィルタ部６０は、入力信号（入力データ）に対して複数の所定周波数帯域に属する信号成分のみを抽出するバンドパスフィルタ（ＢＰＦ）処理を実行する。このフィルタ処理により、例えば、中心周波数を１１．５ｋＨｚ，７．７ｋＨｚ，及び５．６ｋＨｚとし、所定の帯域幅を有する周波数帯域の信号成分が抽出される。すなわち、図１に示すように、機能的に、デジタルフィルタ部６０は複数のＢＰＦ６０ａ〜６０ｃを備えるものである。これらのＢＰＦ６０ａ〜６０ｃによってフィルタ処理された結果としての信号波形の一例を図２（ｂ）に示す。なお、デジタルフィルタ部６０の構成及び作用については後に詳細に説明する。
【００２７】
ノック判定部７０は、デジタルフィルタ部６０によってフィルタ処理された各周波数帯域の信号に基づいて、ノックが発生したか否かを判定する。すなわち、このノック判定部７０においては、例えば、フィルタ処理された各周波数帯域の信号が、図２（ｃ）に示すノック発生時の特徴パターンを備えているか否かをパターンマッチングによって判定し、その特徴パターンに対しての近似度が高ければノックが発生したと判定する。このようにノック信号に対してデジタルフィルタを用いて周波数解析処理を実施することにより、ノック判定における耐ノイズ性、ひいては判定精度を向上することができる。
【００２８】
なお、図示してはいないが、ＥＣＵ４０は、ノックの発生を判定した場合、エンジンの点火装置における点火時期を遅角させるように制御してノックの発生を抑制する。
【００２９】
上述したように、本実施形態では、エンジン制御を実行するＥＣＵ４０にて、デジタルフィルタ処理を実施するように構成されている。しかしながら、このような車載ＥＣＵ４０にて、従来のデジタルフィルタを用いて周波数解析処理を実施すると、ＥＣＵ４０はコスト等の問題からそれほど高性能なものを採用できないため、本来のエンジン制御に影響を与えるどころか、ＥＣＵ４０で動作するプログラムをノック判定用の周波数解析処理だけに限定しても、処理遅れが発生し、その動作に支障をきたす可能性がある。
【００３０】
デジタルフィルタの周波数解析処理の中で最も処理負荷が高くなる部分は、後述する畳み込み演算に関する処理であり、この演算処理量を低減できれば、ＥＣＵ４０にて、デジタルフィルタを用いた周波数解析処理を実施することも可能になる。
【００３１】
以下、本実施形態におけるデジタルフィルタ部６０の構成及び作用について説明する。この説明により、デジタルフィルタ部６０における畳み込み演算に関する演算処理量が、いかにして低減できるのかが理解される。
【００３２】
図３は、デジタルフィルタ部６０の概略構成を示すブロック図である。図３に示すように、デジタルフィルタ部６０は、データバッファ６２、フィルタ係数記憶部６４、演算部６６、及びフィルタ結果格納バッファ６８を備える。
【００３３】
データバッファ６２は、最新データ及び過去データからなる計Ｎ個分のデータを時系列的に格納して記憶するためにＮ個のデータ記憶領域を有している。そして、データバッファ６２は、Ｎ個のデータ記憶領域の先頭から末尾にかけて時系列にデータを記憶するとともに、最新データの記憶先が末尾のデータ記憶領域まで達した場合に、その最新データ記憶先を先頭のデータ記憶領域に戻す、いわゆるリングバッファとして構成されている。
【００３４】
図４（ａ）〜（ｄ）は、データバッファ６２における、最新データの記憶先となるデータ記憶領域の推移を示す説明図である。図４（ａ）は、先頭のデータ記憶領域に、その時点での最新データであるData１が書き込まれて記憶された状態を示している。このように、データData１の書き込みが完了すると、最新データの記憶先を示すバッファポインタDataPosが１進んで、２番目のデータ記憶領域を指示することになる。
【００３５】
図４（ｂ）は、最新データの記憶先を示すバッファポインタDataPosを１つづつ進めながら、Data２〜DataN−１が、各データ記憶領域に書き込まれた状態を示す。そして、次に最新データDataNの書き込みを行なうときには、図４（ｃ）に示すように、末尾となるＮ番目のデータ記憶領域に書き込むとともに、その書き込みの完了に伴なって、バッファポインタDataPosによる指示位置が先頭のデータ記憶領域に戻る。このため、次回の最新データDataN+１の書き込みは、図４（ｄ）に示すように、先頭のデータ記憶領域に対して実行される。
【００３６】
このように、リングバッファ６２においては、バッファポインタを用いて、最新データの記憶先が、先頭のデータ記憶領域から末尾のデータ記憶領域にかけて循環し、常に、最新データからＮ番目までの古さを持った過去データまでのＮ個のデータが記憶保持される。
【００３７】
そして、最新データの書き込み完了タイミングにおいて、上述したＮ個のデータを順次読み出すとともに、フィルタ係数記憶部６４からもその読出しデータに対応するフィルタ係数を順次読み出すことにより、フィルタ演算としての畳み込み演算を実施する。なお、異なる複数の周波数帯域に関するバンドパスフィルタ処理を行なうには、周波数帯域毎に設定された異なるフィルタ係数の組を用いて、それぞれ畳み込み演算を行なう必要がある。
【００３８】
この畳み込み演算について、図５を用いて簡単に説明する。図５に示すように、畳み込み演算は、Ｎ個の入力データと、それらに対応するＮ個のフィルタ係数とをそれぞれ乗算し、さらに積算することによって実行されるものである。このように、フィルタ演算を行なう際には、畳み込み演算そのものとしての積和演算と入力データ及びフィルタ係数に関するデータ読出処理とが大量に発生する。さらに、このようなフィルタ演算は、最新データがデータ記憶領域に記憶される度に実行され、その実行頻度も高くなる。従って、このフィルタ演算に関する演算処理量を極力低減することが、ＥＣＵ４０の処理負荷を低減するために重要となる。
【００３９】
そのため、本実施形態では、図６に示すように、フィルタ係数記憶部６４に、２Ｎ−１個のフィルタ係数を記憶するフィルタ係数記憶領域を設けた。そして、Ｎ個の入力データに対応するＮ個のフィルタ係数（FilterData１, FilterData２, …, FilterDataＮ）を１組としたときに、その２組分のフィルタ係数において、第１組目の最初のフィルタ係数FilterData１を除いて、第１組目のフィルタ係数と第２組目のフィルタ係数とを順番にフィルタ係数記憶領域に記憶させた。これにより、フィルタ演算における演算処理量を、従来よりもさらに低減することができる。その理由を図６及び図７を用いて説明する。
【００４０】
図６に示すように、本実施形態では、フィルタ係数記憶部６４の連続した記憶領域に、２組分マイナス１個のフィルタ係数を記憶している。このため、図７に示すように、先頭のデータ記憶領域のデータに対応するフィルタ係数の記憶領域を畳み込み開始ポインタFilPosによって指示することにより、データ記憶領域に記憶されたデータ順に、対応するフィルタ係数を簡単に読み出すことができる。
【００４１】
つまり、フィルタ係数の読出しにおいて、その記憶領域が末尾の記憶領域かどうかを判定する必要がなくなり、単に、畳み込み開始ポインタFilPosの位置を１つづつ更新することで、対応するフィルタ係数を連続したフィルタ係数記憶領域から読み出すことができる。
【００４２】
なお、図７に示す例では、データバッファ６２の先頭のデータ記憶領域に最新データDataN+1が記憶され。２番目の記憶領域に最も古いデータData2が記憶されている。これに対応して、畳み込み開始ポインタFilPosが、1組目のフィルタ係数を記憶するフィルタ係数記憶領域における、末尾の記憶領域を指示する位置となっている。これにより、畳み込み開始ポインタFilPosの指示位置のフィルタ係数記憶領域から順にN個のフィルタ係数を読み出すと、まず最新データに対応するフィルタ係数FilterDataNが読み出され、その後、最も古いデータに対応するフィルタ係数FilterData1から2番目に新しいデータに対応するフィルタ係数FilterDataN-1まで順番に読み出される。
【００４３】
従って、フィルタ演算において、データバッファ６２に関しては先頭のデータ記憶領域から、フィルタ係数記憶部６４に関しては畳み込み開始ポインタFilPosが指示するフィルタ係数記憶領域から、それぞれ順番にＮ個のデータ及びフィルタ係数を読み出して、上述した畳み込み演算を行なうことが可能になるので、特にデータの読出しに関する処理量を大きく低減できる。
【００４４】
さらに、本実施形態では、入力データを２Ｎ−１個用意するのではなく、２Ｎ−１個のフィルタ係数をフィルタ係数記憶部６４に記憶させているので、従来のように、同一のデータを２箇所のデータ記憶領域に記憶させる必要もない。従って、従来のデジタルフィルタに比較して、さらにフィルタ演算処理のための処理量を低減することができるのである。
【００４５】
なお、畳み込み開始ポインタFilPosは、連続したフィルタ係数記憶領域からＮ個のフィルタ係数を読み出すために、図６に示すように、第１組目の先頭のフィルタ係数記憶領域を指示する位置（FilPos＝１）から第２組目の先頭のフィルタ係数記憶領域を指示する位置（FilPos＝DATA_MAX）間を移動する。
【００４６】
次に、上述したフィルタ処理を行なうための具体的な処理内容について、図８〜図１３のフローチャートを用いて説明する。図８は、ＥＣＵ４０の電源が投入された時に実施される初期処理を示すフローチャートであり、図９は、ノック信号のサンプリングタイミングとなって、Ａ／Ｄ５０によってＡ／Ｄ変換が行なわれた場合に、そのＡ／Ｄ変換出力に基づく割込みによって実行される処理の全体を示すフローチャートである。また、図１０〜図１３は、図９における各処理の詳細を示すフローチャートである。
【００４７】
ＥＣＵ４０の電源が投入されると、図８に示すように、まずステップＳ１０において、畳み込み開始ポインタFilPosの指示位置をDATA_MAX、すなわち、２組目のフィルタ係数を記憶する記憶領域の先頭に設定する。これは、データバッファ６２の先頭のデータ記憶領域から順に時系列にＡ／Ｄ入力データが格納されていくためである。
【００４８】
次に、ステップＳ２０において、Ａ／Ｄ５０からのＡ／Ｄ入力データの記憶先を示すバッファポインタDataPosを１に設定する。これによって、データバッファ６２の先頭のデータ記憶領域がデータ記憶先に指定される。ステップＳ３０では、フィルタ演算結果格納バッファ６８における、フィルタ結果の格納位置を示す格納位置ポインタStorePosを１に設定する。これによって、フィルタ結果格納バッファ６８における、先頭のフィルタ結果記憶領域がフィルタ結果格納先に指定される。
【００４９】
次に、図９を用いて、Ａ／Ｄ５０からＡ／Ｄ変換されたデータが入力されたときの処理の全体について説明する。まず、ステップＳ１００では、Ａ／Ｄ値の取得処理を行なう。すなわち、Ａ／Ｄ５０から入力されたデータを、バッファポインタDataPosによって指示されるデータ記憶領域に書き込む。
【００５０】
具体的には、図１０に示すように、ステップＳ１１０において、バッファポインタDataPosによって指示されるデータ記憶領域Data[DataPos]にＡ／Ｄ値を書き込む。そして、ステップＳ１２０にて、バッファポインタDataPosが、畳み込み演算に利用されるデータ数Ｎに相当するDATA_MAXよりも小さいか否かを判定する。この判定において「ｙｅｓ」と判定されると、ステップＳ１３０に進んで、バッファポインタDataPosを１だけインクリメントする。一方、ステップＳ１２０にて「ｎｏ」と判定された場合には、ステップＳ１４０に進んで、バッファポインタDataPosを１に戻す。
【００５１】
上述したステップＳ１２０〜Ｓ１４０の処理は、次回のＡ／Ｄ値の記憶先を示すようにバッファポインタDataPosの値を変更するためのものである。この処理により、バッファポインタDataPosは１から順にDATA_MAXまで増加され、DATA_MAXに達すると１に戻される。
【００５２】
Ａ／Ｄ値取得処理が終了すると、図９のステップＳ２００にて、フィルタ演算処理が実施される。このフィルタ演算処理を、図１１のフローチャートに基づいて詳しく説明する。なお、このフィルタ演算処理は、Ａ／Ｄ値の取得を開始した後に、Ｎ個のＡ／Ｄ値がデータバッファ６２に記憶された時点から開始される。
【００５３】
まず、図１１のステップＳ２１０では、変数ｉを１に設定し、ステップＳ２２０にて、フィルタ結果FilResultをクリアする。そして、ステップＳ２３０にて、変数ｉが畳み込み演算に利用されるデータ数Ｎに相当するDATA_MAXよりも小さいか否かを判定する。ここで「ｎｏ」と判定されると、必要な畳み込み演算がまだ完了していないため、ステップＳ２４０に進んで、畳み込み演算を実行する。
【００５４】
このステップＳ２４０では、変数ｉを用いて、データバッファ６２の先頭のデータ格納領域から末尾のデータ格納領域に向けて順番にＡ／Ｄ入力データData[i]を読み出すとともに、変数ｉ及び畳み込み開始ポインタFilPosを用いて、読み出したＡ／Ｄ入力データData[i]に対応するフィルタ係数Fil[i‐1+FilPos]を読み出して、両方を乗算する。その乗算結果は、フィルタ結果FilResultに加算される。
【００５５】
ステップＳ２５０では、変数ｉをインクリメントして、ステップＳ２３０の処理に戻る。このようにしてステップＳ２３０〜ステップＳ２５０の処理が繰り返されることにより、変数ｉの値がDATA_MAXに達すると、それはＮ個のＡ／Ｄ入力データについて畳み込み演算が完了したことを意味する。このため、ステップＳ２３０での判定が「ｎｏ」となり、図１１に示すフィルタ演算処理を終了する。
【００５６】
フィルタ演算処理が終了すると、次に、図９に示すように、ステップＳ３００にて畳み込み開始ポインタFilPosの算出処理を行なう。この畳み込み開始ポインタFilPosの算出処理の詳細を図１２のフローチャートに示す。
【００５７】
図１２に示すように、まずステップＳ３１０において、畳み込み開始ポインタFilPosが１より大きいか否かを判定する。１より大きいと判定された場合には、ステップＳ３２０に進んで、畳み込み開始ポインタFilPosを１だけデクリメントする。このデクリメントによって畳み込み開始ポインタFilPosがDATA_MAXから１まで減少すると、ステップＳ３１０にて「ｎｏ」と判定され、ステップＳ３３０に進む。
【００５８】
ステップＳ３３０では、畳み込み開始ポインタFilPosの値をDATA_MAXに戻す。このようにして、Ｎ個のＡ／Ｄ入力データがデータバッファ６２に記憶された後、データのＡ／Ｄ値が入力されるごとに、畳み込み開始ポインタFilPosの値をDATA_MAXから１に向かって減少させることにより、常にデータバッファ６２の先頭のデータ記憶領域に記憶されるデータに対応するフィルタ係数の記憶領域を指示することができるようになる。
【００５９】
畳み込み開始ポインタFilPosの算出処理が終了すると、次に、図９に示すように、ステップＳ４００にてフィルタ結果FilResultの格納処理が実施される。このフィルタ結果FilResultの格納処理について、図１３のフローチャートを用いて説明する。
【００６０】
まず、ステップＳ４１０では、フィルタ結果FilResultの格納位置を示す格納位置ポインタStorePosが、格納可能な畳み込み演算結果の最大数STOREMAXよりも小さいか否かを判定する。このとき「ｙｅｓ」と判定されると、ステップＳ４２０に進んで、格納位置ポインタStorePosを１だけインクリメントする。一方、格納位置ポインタStorePosが最大数STOREMAXに達しており、「ｎｏ」と判定された場合には、ステップＳ４３０に進んで、格納位置ポインタStorePosの値を１に設定する。
【００６１】
最後にステップＳ４４０では、このようにして算出された格納位置ポインタStorePosによって指示されるフィルタ結果記憶領域Result[StorePos]に、フィルタ結果FilResultの値を格納する。これにより、図２（ｂ）に示すようなデジタルフィルタ処理結果が得られる。
【００６２】
以上、本発明の好ましい実施形態について説明したが、本発明は、上記の実施形態に制限されることなく、本発明の主旨を逸脱しない範囲において、種々、変形して実施することが可能である。
【００６３】
例えば、上述した実施形態においては、２Ｎ−１個のフィルタ係数を記憶する際に、１組目の最初のフィルタ係数FilterData１を除外したが、２組目の最後のフィルタ係数FilterDataＮを除外するようにしても良い。ただし、このように２組目の最後のフィルタ係数FilterDataＮを除外した場合には、畳み込み開始ポインタFilPosの初期値を１とする必要がある。
【００６４】
また、上述した実施形態においては、２Ｎ−１個のフィルタ係数を用いていたが、２Ｎ−１個よりも多い数のフィルタ係数、例えば２Ｎ個のフィルタ係数を用いても良い。２Ｎ個のフィルタ係数を用いる場合には、１組目の先頭あるいは２組目の最後のフィルタ係数を除外することなく、２組のフィルタ係数が順番に記憶される。
【００６５】
フィルタ係数の記憶領域が末尾の記憶領域かどうかの判定処理を不要とするためには、常にＮ個のフィルタ係数を連続した記憶領域から取り出すことが可能であれば良い。そのためには最低限２Ｎ−１個のフィルタ係数が記憶されていれば足りるが、それよりも多いフィルタ係数を用いて、畳み込み演算を行なうことも可能である。
【００６６】
さらに、上述した実施形態では、畳み込み演算開始ポインタFilPosを用いて、２Ｎ−１個のフィルタ係数記憶領域におけるフィルタ係数読み出し開始位置を定めていたが、例えば、データバッファ６２におけるバッファポインタDataPosを参照して、フィルタ係数読出し開始位置を定めることも可能である。
【図面の簡単な説明】
【００６７】
【図１】実施形態によるデジタルフィルタを、自動車のエンジンのノック検出のため、ノックセンサの検出信号に対するフィルタ処理に適用した場合の構成を示すブロック図である。
【図２】（ａ）は、ノックセンサから出力されるノック信号波形の一例を示す波形図であり、（ｂ）は、デジタルフィルタ処理された結果としての信号波形の一例を示す波形図であり、（ｃ）は、ノック判定に使用されるノック信号の特徴パターンを示す波形図である。
【図３】デジタルフィルタ部６０の概略構成を示すブロック図である。
【図４】（ａ）〜（ｄ）は、データバッファ６２における、最新データの記憶先となるデータ記憶領域の推移を示す説明図である。
【図５】フィルタ演算処理における畳み込み演算について説明するための説明図である。
【図６】フィルタ係数記憶部６４の詳細を示す図である。
【図７】データバッファ６２及びフィルタ係数記憶部６４を用いた畳み込み演算方法を説明するための説明図である。
【図８】ＥＣＵ４０の電源が投入された時に実施される初期処理を示すフローチャートである。
【図９】ノック信号のサンプリングタイミングとなって、Ａ／Ｄ５０によってＡ／Ｄ変換が行なわれた場合に、そのＡ／Ｄ変換出力に基づく割込みによって実行される処理の全体を示すフローチャートである。
【図１０】図９におけるＡ／Ｄ値取得処理を示すフローチャートである。
【図１１】図９におけるフィルタ演算処理を示すフローチャートである。
【図１２】図９における畳み込み開始ポインタFilPosの算出処理を示すフローチャートである。
【図１３】図９におけるフィルタ結果FilResult格納処理を示すフローチャートである。
【符号の説明】
【００６８】
４０  ＥＣＵ
５０  Ａ／Ｄ
６０  デジタルフィルタ部
６２  データバッファ
６４  フィルタ係数記憶部
６６  演算部
６８  フィルタ結果格納バッファ
【図１】
2005252389.tif 000003
【図２】
2005252389.tif 000004
【図３】
2005252389.tif 000005
【図４】
2005252389.tif 000006
【図５】
2005252389.tif 000007
【図６】
2005252389.tif 000008
【図７】
2005252389.tif 000009
【図８】
2005252389.tif 000010
【図９】
2005252389.tif 000011
【図１０】
2005252389.tif 000012
【図１１】
2005252389.tif 000013
【図１２】
2005252389.tif 000014
【図１３】
2005252389.tif 000015