(57)【特許請求の範囲】
【請求項１】
内燃機関の点火時期等を自動適合する装置に適用され、各気筒の筒内圧センサ出力を高周波サンプリングした筒内圧データに基づき気筒毎およびサイクル毎にノックかノイズの判定をするノック判定手段を備える自動適合用ノック自動検出装置であって、
前記各気筒の筒内圧センサ出力と同時計測する各気筒のブロック振動センサ出力を、前記ノック判定手段によりノック有りと判定されたノックサイクルとノック無しと判定されたノイズサイクルに分けて抽出する振動センサ出力抽出手段と、
前記ノックサイクルと前記ノイズサイクルに分けて抽出した各気筒のブロック振動センサ出力をそれぞれＦＦＴ処理して１ノックサイクル毎のＦＦＴ結果（ａ）と１ノイズサイクル毎のＦＦＴ結果（ｔ-ｂ）を算出するＦＦＴ処理手段と、
各ノックサイクルに対して、そのノックサイクルと前回ノックと判定されたノックサイクルとの間のノイズサイクル全ての前記ＦＦＴ結果（ｔ-ｂ）を加算平均したＦＦＴ加算平均値（ｂ）を算出する加算平均値算出手段と、
前記ＦＦＴ結果（ａ）と前記ＦＦＴ加算平均値（ｂ）との差分に基づき、ノックサイクル毎にノック強度を算出するノック強度算出手段とを備えることを特徴とする自動適合用ノック自動検出装置。
【請求項２】
前記ノック強度算出手段は、前記差分を所定の周波数区間で積分してノックサイクル毎のノック強度を算出することを特徴とする請求項１に記載の自動適合用ノック自動検出装置。
【請求項３】
前記所定の周波数区間は可聴帯であることを特徴とする請求項２に記載の自動適合用ノック自動検出装置。
【請求項４】
前記ノック強度算出手段により算出したノック強度毎に任意サイクル中のノック頻度を算出するノック頻度算出手段と、前記ノック強度と前記ノック頻度から任意サイクルでのノックレベルを算出するノックレベル算出手段とを備えることを特徴とする請求項１〜３のいずれか一項に記載の自動適合用ノック自動検出装置。
【請求項５】
前記ノック頻度算出手段は、前記ノック強度を任意の強度段階に分けて各段階の頻度を算出し、前記ノックレベル算出手段は、前記ノック頻度算出手段により算出した頻度が最も高い強度段階のノック強度を任意サイクルのノックレベルと決定することを特徴とする請求項４に記載の自動適合用ノック自動検出装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、内燃機関の点火時期等を自動適合する装置に適用される自動適合用ノック自動検出装置に関する。
【０００２】
【従来の技術】
一般に、内燃機関としてのエンジンで発生するノック波形の周波数（ノック周波数）は、エンジン毎に異なり、シリンダのボア径で決まる。そのため、筒内圧センサの出力或いはブロック振動センサの出力からノック波形を抽出するのにバンドパスフィルタ等のフィルタを使う方法が主流である。
【０００３】
【発明が解決しようとする課題】
ところで、（１）エンジンのシリンダブロックに直接取り付けるタイプの非共振或いは共振型ブロック振動センサでノックを検出する場合、機械ノイズ等のノック以外の振動成分とノックによる振動発生成分とを分離しなければならない。このため、事前に、ノック周波数の選定と、その周波数に応じたフィルタ中心波長をもつバンドパスフィルタの設定（共振型のセンサはセンサそのものの設定）と、センサ出力と比較されるノック判定のしきい値の設定とを行なう必要がある。なぜなら、ブロック振動センサでは、シリンダブロックに伝わるあらゆる振動を拾ってしまうため、ノック振動のみを分離する必要があるが、ノック周波数はエンジン毎に異なるとともに、機械ノイズの発生周波数も異なるからである。
【０００４】
ノック周波数に応じたバンドパスフィルタの設定や前記しきい値の設定をする際には、まずはそのエンジンで実際に聴覚で聞えるノックを発生させて、その時のセンサ出力のＦＦＴ解析によりノック共振周波数がどこに有るのかを特定する必要がある。しかし、ノック共振周波数には機械ノイズ周波数のピークが重なることも有り得るため、必ずしもＳ／Ｎが良いとは限らない。したがって、ノック判定のためのしきい値も一義的には決まらず、エンジン毎の適合が必要となる。
【０００５】
（２）一方、筒内圧センサ、例えば点火プラグ一体型の筒内圧センサでノックを検出する場合、筒内圧最大値の直後に発生するノック特有の圧力振動を捕らえることにより、機械ノイズ等とは無縁でノック検出が可能になる。しかし、あくまでも筒内で発生しているノック起因の異常燃焼を捕らえてしまうため、ノックによる圧力振動がシリンダブロックやシリンダヘッドを伝わって外部へ振動音を伝えているとは限らず、聴感で捕らえるノックとは強度、頻度共に合わない。これは、筒内圧では逆にエンジンの機械振動を取り込まないため、ノックがこれらバックグラウンドノイズにかき消される分まで検出してしまっているからである。これをしきい値等を設定して聴感と合わせようとすると、結局人間による合わせ込みが必要となってしまう。
【０００６】
すなわち、エンジンの点火時期、燃料増量値、ＶＶＴ進角等を自動適合化する場合、そのエンジンでの最適燃費、最適出力、最適エミッション性能を求めたい。このため、狙いの点火時期は、ＭＢＴ（Minimum advance for the Best Torque）かＭＢＴより遅角側でノックが発生する場合は、聴感上許容可能なノックレベルとなる。前記各適合を自動的に求めようとした場合、ノック検出を自動で行なうことが必須となるが、現状のノック制御（ＫＣＳ制御）では、ノックを検出させるために人間による合わせ込みが必須である。
【０００７】
したがって、点火時期等を自動適合化しようとした際に、エンジン損傷防止も含めて狙いのノックレベルを検出しようとした場合には、ブロック振動センサ、筒内圧センサ共に、各々単体では完全自動化は不可能である。
【０００８】
本発明は、このような従来の問題点に着目してなされたもので、その目的は、内燃機関の点火時期等を自動適合する際に、狙いのノックレベルを自動検出可能にして、自動適合を可能にした自動適合用ノック自動検出装置を提供することにある。
【０００９】
【課題を解決するための手段】
以下、上記目的を達成するための手段及びその作用効果について記載する。
請求項１に係る発明は、内燃機関の点火時期等を自動適合する装置に適用され、各気筒の筒内圧センサ出力を高周波サンプリングした筒内圧データに基づき気筒毎およびサイクル毎にノックかノイズの判定をするノック判定手段を備える自動適合用ノック自動検出装置であって、前記各気筒の筒内圧センサ出力と同時計測する各気筒のブロック振動センサ出力を、前記ノック判定手段によりノック有りと判定されたノックサイクルとノック無しと判定されたノイズサイクルに分けて抽出する振動センサ出力抽出手段と、前記ノックサイクルと前記ノイズサイクルに分けて抽出した各気筒のブロック振動センサ出力をそれぞれＦＦＴ処理して１ノックサイクル毎のＦＦＴ結果（ａ）と１ノイズサイクル毎のＦＦＴ結果（ｔ-ｂ）を算出するＦＦＴ処理手段と、各ノックサイクルに対して、そのノックサイクルと前回ノックと判定されたノックサイクルとの間のノイズサイクル全ての前記ＦＦＴ結果（ｔ-ｂ）を加算平均したＦＦＴ加算平均値（ｂ）を算出する加算平均値算出手段と、前記ＦＦＴ結果（ａ）と前記ＦＦＴ加算平均値（ｂ）との差分に基づき、ノックサイクル毎にノック強度を算出するノック強度算出手段とを備えることを要旨とする。
【００１０】
この構成によれば、各気筒の筒内圧センサ出力と同時に各気筒のブロック振動センサ出力を計測することで、筒内圧情報をもとにノック有り無しの層別を自動的に行なうことができる。すなわち、人間の聴感でノック判定をする必要がない。
【００１１】
また、各ブロック振動センサ出力にバックグラウンドノイズ以上の振動が含まれていれば、間違いなく音としてノックが発生していることになる。このようなノックの強度を、各ノックサイクルのＦＦＴ結果ａとＦＦＴ加算平均値ｂとの差分に基づき、ノックサイクル毎に算出することができる。すなわち、そのＦＦＴ加算平均値ｂは、各ノックサイクルに対して、そのノックサイクルと前回「ノック」と判定されたノックサイクルとの間のノイズサイクル全てのＦＦＴ結果ｔ-ｂを加算平均した値であり、これらノイズサイクル全てのバックグラウンドレベルを表している。各ノックサイクルのＦＦＴ結果ａとそのノックサイクルに対して算出したバックグラウンドレベルとの差分（ａ−ｂ）に基づいて、ノック強度をノックサイクル毎に算出することができる。その結果、人間の聴感でノック判定する場合は、ある一定時間エンジン近傍で音を聞き、その時のバックグラウンド音とノック音を聞き分けてノックレベルを決定する。この場合、人による差や、聞く方向の違いにより、レベルが異なってしまうが、こうした自動適合をする上で妨げとなる要因を排除できる。したがって、内燃機関の点火時期等を自動適合する際に、狙いのノックレベルを自動検出可能になり、点火時期等の自動適合が可能になる。
【００１２】
さらに、任意サイクル中のノックサイクル毎にノック強度を算出するのに、ＦＦＴ結果ａとＦＦＴ加算平均値ｂ（バックグラウンドレベル）の差分（ａ−ｂ）をノックとしている。これにより、各ブロック振動センサ出力にバックグラウンドノイズ以上の振動が含まれていれば、間違いなく音としてノックが発生していることになる。このようなシリンダヘッド、シリンダブロックを通して外部へノック音として伝わるノックを、ＦＦＴ結果ａとＦＦＴ加算平均値ｂの差分で表すことができる。
【００１３】
請求項２に係る発明は、請求項１に記載の自動適合用ノック自動検出装置において、前記ノック強度算出手段は、前記差分を所定の周波数区間で積分してノックサイクル毎のノック強度を算出することを要旨とする。
【００１４】
自動適合時にノックを自動検出する狙いのノックレベルは聴感上許容可能なノックレベルであり、このような狙いのノックレベルを自動検出するためには、ノックレベルを定量的に扱う必要がある。聴感上許容可能なノックレベルは、１回当たりに聞えるノック強度とその頻度により決まる。そのうちのノック強度を算出できる。つまり、ノックサイクル毎のノック強度を、人間によりしきい値を設定することなく、前記差分を所定の周波数区間で積分して求めることができる。
【００１５】
請求項３に係る発明は、請求項２に記載の自動適合用ノック自動検出装置において、前記所定の周波数区間は可聴帯であることを要旨とする。
この構成によれば、シリンダブロックを通して外部へ音として伝わるノックの強度を算出することができる。
【００１６】
請求項４に係る発明は、請求項１〜３のいずれか一項に記載の自動適合用ノック自動検出装置において、前記ノック強度算出手段により算出したノック強度毎に任意サイクル中のノック頻度を算出するノック頻度算出手段と、前記ノック強度と前記ノック頻度から任意サイクルでのノックレベルを算出するノックレベル算出手段とを備えることを要旨とする。
【００１７】
この構成によれば、ノック強度に加えてノック頻度を算出し、ノック強度とその頻度からノックレベルを算出することで、任意サイクルでのノックレベルを自動的に検出することができる。
【００１８】
請求項５に係る発明は、請求項４に記載の自動適合用ノック自動検出装置において、前記ノック頻度算出手段は、前記ノック強度を任意の強度段階に分けて各段階の頻度を算出し、前記ノックレベル算出手段は、前記ノック頻度算出手段により算出した頻度が最も高い強度段階のノック強度を任意サイクルのノックレベルと決定することを要旨とする。
【００１９】
この構成によれば、ノックレベルを定量的に扱うことができ、聴感上許容可能なノックレベルを自動的に検出することができる。
【００２０】
【発明の実施の形態】
以下、本発明に係る自動適合用ノック自動検出装置を具体化した一実施形態を図面に基づいて説明する。
【００２１】
[一実施形態]
図１は、一実施形態に係る自動適合用ノック自動検出装置の全体構成を模式的に示している。この自動適合用ノック自動検出装置は、エンジンの点火時期、燃料増量値、ＶＶＴ進角等を自動適合化するための装置であり、筒内圧を利用してノックを自動検出するものである。ここにいう「ＶＶＴ」とは、エンジン２１の吸気カムシャフト（図示略）のクランクシャフト（図示略）に対する相対角を連続的に変化させるための可変バルブタイミング機構をいう。
【００２２】
エンジン２１には、クランク角センサ２２、ブロック振動センサ２３、および筒内圧センサ２４が取り付けられている。筒内圧センサ２４は、４気筒エンジン２１の各気筒に設けられている。クランク角センサ２２は、クランクシャフトの１回転につき所定角度毎（例えば１５度毎）にパルス状の信号（クランク角信号）を出力する。このクランク角信号は、各気筒の圧縮上死点位置ＴＤＣを算出するのに用いられる。ブロック振動センサ２３は、各気筒のシリンダブロック（図示略）に取り付けられており、各シリンダブロックに伝わる振動を検出し、ブロック振動センサ信号を出力する。そして、各筒内圧センサ２４は、気筒毎の筒内圧（燃焼圧）をそれぞれ検出し、筒内圧信号を出力する。図１２は、各気筒の筒内圧センサ２４の出力（筒内圧センサ出力）が表す１／２サイクル分の筒内圧波形（指圧線）を示している。この指圧線には、筒内圧が最大値Ｐｍａｘとなる位置付近（破線６５で囲んだ領域）に、ノック波形が含まれている。
【００２３】
自動適合用ノック自動検出装置（以下、単に「ノック自動検出装置」という。）は、増幅回路２５と、高速データ収録手段としての高速データロガー２６と、筒内圧解析用パソコン（パーソナルコンピュータ）２７とを備える。増幅回路２５は、４つの気筒の各筒内圧センサ２４からそれぞれ出力される筒内圧センサ出力を増幅して高速データロガー２６に出力する。
【００２４】
高速データロガー２６は、増幅回路２５により増幅された各筒内圧センサ出力を高周波サンプリングして、気筒毎およびサイクル毎に単位期間毎の筒内圧データＰｄａｔａ［ｉ］を収録する。なお、高速データロガー２６による高周波サンプリングは、時間ベースまたはクランク角ベースのいずれでも良い。本実施形態では、高速データロガー２６は、各筒内圧センサ出力（各気筒の筒内圧波形）に含まれるノック波形（振動周波数が１２〜１４ＫＨｚ程度の振動成分）を精度良く解析して抽出するのに十分高い周波数、例えば２００ＫＨｚで各気筒の筒内圧センサ出力をサンプリングする。
【００２５】
また、高速データロガー２６には、各筒内圧センサ出力の他に、クランク角センサ２２から出力されるクランク角信号と、各気筒のブロック振動センサ２３から出力されるブロック振動センサ信号（ブロック振動センサ出力）とがそれぞれ入力されている。これにより、高速データロガー２６は、デジタル信号にそれぞれ変換したクランク角信号および各気筒のブロック振動センサ信号と、各気筒の筒内圧データＰｄａｔａ［ｉ］とを同期して筒内圧解析用パソコン２７へ出力するようになっている。
【００２６】
また、筒内圧解析用パソコン２７は、高速データロガー２６にデータ計測指示を与えて、同データロガーから各気筒の筒内圧データＰｄａｔａ［ｉ］、各気筒のブロック振動センサ信号、およびクランク角信号のデータを任意サイクル分（例えば、１００サイクル分）一括して取り込むようになっている。
【００２７】
また、筒内圧解析用パソコン２７には、「ノックレベル算出処理」用のプログラムが組み込まれている。このノックレベル算出処理では、各気筒の筒内圧データとクランク角信号とに基づき、各筒内圧センサ出力に含まれるノック波形等の振動成分の振幅相当量Ａｍｐ［ｉ］（図１３に示す振動波形）を気筒毎およびサイクル毎に算出し、気筒毎およびサイクル毎にノック判定を行なう。そして、各筒内圧センサ出力と同時計測の各ブロック振動センサ出力に基づき、ノック強度とノック頻度を算出して現在の運転条件でのノックレベルを自動的に検出する。
【００２８】
次に、この「ノックレベル算出処理」について図２〜図１５を参照して説明する。
まず、図２に示すフローチャートのステップＳ１０で、エンジン２１の運転状態を定常状態に設定し、所定の運転条件および所定の点火時期にてエンジン２１を運転する。つまり、エンジン２１を、エンジン回転数、吸入空気量および空燃比をそれぞれ一定に設定するとともに、点火時期を一定値に設定して運転する。
【００２９】
次に、ステップＳ１００に進み、高速データロガー２６により気筒毎にそれぞれ収録された筒内圧データＰｄａｔａ［ｉ］とクランク角信号を、上記任意サイクル分取り込む。ここで、高速データロガー２６による１サイクル当たりの筒内圧データのサンプリングデータ数をｓｉｚｅとすると、筒内圧データＰｄａｔａ［ｉ］は、ｉ＝０（吸気工程下死点付近の基準点で、クランク角０度）〜ｉ＝ｓｉｚｅ（クランク角７２０度）である。また、筒内圧解析用パソコン２７は、取り込んだクランク角信号に基づき、各気筒の圧縮上死点位置ＴＤＣを算出する。
【００３０】
次に、ステップＳ２００に進み、ステップＳ１００で取り込んだ各気筒の筒内圧データに基づき、気筒毎およびサイクル毎に筒内圧最大値Ｐｍａｘとその位置ｉｍａｘを算出する。このステップＳ２００が最大値算出手段に相当する。
【００３１】
次に、ステップＳ３００に進み、気筒毎およびサイクル毎に、筒内圧波形（指圧線）の形から点火時期の大遅角状態を検出する。具体的には、気筒毎およびサイクル毎に、ステップＳ２００で算出した筒内圧最大値Ｐｍａｘと圧縮上死点位置での筒内圧Ｐ［ｉ＝ＴＤＣ］との差が所定のしきい値を超えているか否かを判定する。その差がしきい値を超えている場合には大遅角状態ではないと判定されてステップＳ４００に進み、その差がしきい値以下の場合には、大遅角状態であると判定されてステップＳ３１０に進み、分析を終了する。
【００３２】
大遅角状態ではないと判定されてステップＳ４００に進むと、筒内圧データに基づき気筒毎およびサイクル毎に筒内圧最小値Ｐｍｉｎとその位置ｉｍｉｎを算出する。
【００３３】
次に、ステップＳ５００に進み、気筒毎およびサイクル毎に指圧線全体の変曲点の数を算出する。ここにいう、「指圧線全体」とは、１サイクルの指圧線をいう。このステップＳ５００では、図５に示すように、ステップＳ４００で算出した筒内圧最小値ＰｍｉｎとステップＳ１００で算出した圧縮上死点位置での筒内圧Ｐ［ｉ＝ＴＤＣ］を比較し、両者が等しい場合には指圧線全体の変曲点が１つであると判定し、そうでない場合には変曲点が３つであると判定する。つまり、筒内圧が圧縮上死点位置ＴＤＣの前後で上昇し続けて筒内圧最大値Ｐｍａｘに達し、この位置ｉｍａｘから筒内圧が下降し続ける場合には、指圧線全体の変曲点が１つであると判定される。この判定がなされると、ステップＳ５１０に進み、１つの変曲点の位置をｉｍａｘとして設定する。
【００３４】
一方、圧縮上死点位置ＴＤＣの近傍に極大値を持つ場合には、指圧線全体の変曲点が３つであると判定される。この判定がなされると、ステップＳ５２０に進み、３つの変曲点の位置をそれぞれＴＤＣ、ｉｍｉｎおよびｉｍａｘとして設定する。なお、指圧線の圧縮上死点位置ＴＤＣ近傍に極大値（変曲点）ができる場合には、その変曲点はＴＤＣの近傍にできるので、ＴＤＣをその変曲点に代えて１つの変曲点に設定している。これにより、圧縮上死点位置ＴＤＣ近傍の変曲点を算出する処理を省略でき、処理速度を早くすることができる。
【００３５】
こうして気筒毎およびサイクル毎に指圧線全体の変曲点の数を算出した後、図２のステップＳ６００に進む。このステップＳ６００では、気筒毎およびサイクル毎に、筒内圧データＰｄａｔａ［ｉ］に基づき筒内圧波形（指圧線）に含まれる振動波形を抽出し、その振動成分の振幅相当量Ａｍｐ［ｉ］を算出する。
【００３６】
次に、変曲点の数が１と判定された場合にステップＳ６００で実行される振幅相当量Ａｍｐ［ｉ］の計算処理を図６および図７に基づいて説明する。上記ステップＳ５００で変曲点が１つと判定された場合、気筒毎およびサイクル毎に、筒内圧Ｐの上昇中（０＜ｉ＜ｉｍａｘ）と、筒内圧Ｐの下降中（ｉｍａｘ＜ｉ＜ｓｉｚｅ）とに分けて振幅相当量Ａｍｐ［ｉ］を計算する。
【００３７】
まず、筒内圧データＰｄａｔａ［ｉ］のデータ数ｉが０〜ｉｍａｘまでの筒内圧上昇中（０＜ｉ＜ｉｍａｘ）、すなわち図１２で筒内圧ＰがＰｍａｘに達するまでのクランク角区間では、上記ステップＳ５１０から図６のステップＳ６１０に進み、同図に示す計算処理を実行する。
【００３８】
このステップＳ６１０は、データ数ｉが０〜ｉｍａｘまでのクランク角区間で計算処理がなされるように、ゲートをかけている。すなわち、このステップＳ６１０では、最初にｉを０に設定し、ｉがｉｍａｘになるまでの間、ステップＳ６１４以下の処理を繰り返しつつ、データ数ｉを１ずつインクリメント（ｉ←ｉ＋１）する。
【００３９】
ｉがｉｍａｘになるまでの間はステップＳ６１０の判定結果はＹＥＳになり、ステップＳ６１４に進む。このステップＳ６１４では、筒内圧データの単位期間当たりの変化量ＤＬＰ［ｉ］（ＤＬＰ［ｉ］＝Ｐｄａｔａ［ｉ］−Ｐｄａｔａ［ｉ−１］）を算出し、ＤＬＰ［ｉ］が負または０であるか否かを判定する。ＤＬＰ［ｉ］が正の場合、すなわち筒内圧データの今回値Ｐｄａｔａ［ｉ］がその前回値Ｐｄａｔａ［ｉ−１］より大きい場合、ステップＳ６１４の判定結果はＮＯになり、ステップＳ６１６に進み、振幅相当量Ａｍｐ［ｉ］およびｔ-ａｍｐを共に０に設定する。
【００４０】
この後、ステップＳ６１０に戻り、筒内圧データのデータ数ｉを１だけインクリメントし（ｉ←ｉ＋１）、ｉがｉｍａｘより小さいか否かを判定する。ｉ＜ｉｍａｘでかつＤＬＰ［ｉ］が正の間は、ステップＳ６１０の判定結果はＹＥＳでかつステップＳ６１４の判定結果はＮＯであるので、ステップＳ６１０，Ｓ６１４およびＳ６１６が繰り返し実行される。その間、ステップＳ６１０でデータ数ｉが１ずつインクリメントされていくとともに、Ａｍｐ［ｉ］およびｔ-ａｍｐは共に０のままに維持される。
【００４１】
こうして、ステップＳ６１０，Ｓ６１４およびＳ６１６が繰り返される間に、図１０の符号９０で示すように筒内圧が低下すると、筒内圧データの今回値ＤＬＰ［ｉ］がその前回値Ｐｄａｔａ［ｉ−１］より小さくなり、ＤＬＰ［ｉ］が負になるので、ステップＳ６１４からステップＳ６１８に進む。
【００４２】
このステップＳ６１８では、ｔ-ａｍｐとＤＬＰ［ｉ］の加算値をｔ-ａｍｐとして設定する。このとき、ｔ-ａｍｐは上記ステップＳ６１６で０に設定されているので、このステップＳ６１８で設定されるｔ-ａｍｐはＤＬＰ［ｉ］に等しい。
【００４３】
この後、ステップＳ６２０に進み、筒内圧データの今回値と次回値の変化量ＤＬＰ［ｉ＋１］（ＤＬＰ［ｉ＋１］＝Ｐｄａｔａ［ｉ＋１］−Ｐｄａｔａ［ｉ］）が正であるか否かを判定する。図１０の区間９０で示すようにその変化量ＤＬＰ［ｉ＋１］が負の場合には、ステップＳ６２２に進み、振幅相当量Ａｍｐ［ｉ］を０に維持する。
【００４４】
この後、ステップＳ６１０に戻り、ステップＳ６１４に進む。このとき、ステップＳ６１４では、前回算出した変化量ＤＬＰ［ｉ］よりデータ数が１つ増えたデータ数ｉの筒内圧データ（今回値）とその前回値の変化量ＤＬＰ［ｉ］を算出し、その変化量が負または０であるか否かについて判定する。つまり、図１０の区間９０で、ＤＬＰ［ｉ＋１］が負または０であるか否かを判定する。ＤＬＰ［ｉ＋１］は負であるので、ステップＳ６１４の判定結果はＹＥＳになり、ステップＳ６１８に進む。このとき、ｔ-ａｍｐ＝ＤＬＰ［ｉ］であるので、ステップＳ６１８で設定されるｔ-ａｍｐはＤＬＰ［ｉ］にＤＬＰ［ｉ＋１］を加算した値に設定される。
【００４５】
この後、ステップＳ６２０に進み、筒内圧データの今回値と次回値の変化量ＤＬＰ［ｉ＋１］が正であるか否かを判定する。ここでは、図１０の場合でいうと、その今回値に相当する区間９０のｉ＋１位置の筒内圧と、その次回値であるｉ＋２位置の筒内圧の変化量が正であるか否かを判定する。同図の場合、筒内圧はｉ＋１位置からｉ＋２位置の間で上昇に転じているので、ステップＳ６２０の判定結果がＹＥＳになり、ステップＳ６２４に進む。
【００４６】
このステップＳ６２４では、ステップＳ６１８で設定したｔ-ａｍｐ（負の値）の絶対値を振幅相当量Ａｍｐ［ｉ］として設定する。こうして、筒内圧上昇中には（データ数ｉが０〜ｉｍａｘまでのクランク角区間では）、図１０の区間９０、９１、９２のように筒内圧データの変化量ＤＬＰ［ｉ］が負である各区間内での同変化量の総和の絶対値を振幅相当量Ａｍｐ［ｉ］として算出する。
【００４７】
そして、データ数ｉがｉｍａｘに達すると、ステップＳ６１０の判定結果がＮＯになるので、ステップＳ６１２に進み、図６の計算処理を終了する。また、ｉ＝ｉｍａｘの位置では、変化量ＤＬＰ［ｉ］は０に設定される。
【００４８】
次に、変曲点が１つと判定された場合、気筒毎およびサイクル毎に、筒内圧Ｐの下降中（ｉｍａｘ＜ｉ＜ｓｉｚｅ）に、図７の計算処理が実行される。筒内圧データＰｄａｔａ［ｉ］のデータ数ｉがｉｍａｘ〜ｓｉｚｅまでの筒内圧下降中、すなわち図１２で筒内圧ＰがＰｍａｘから低下し続けるクランク角区間では、上記ステップＳ５１０から図７のステップＳ６３０に進み、図７に示す計算処理を実行する。
【００４９】
このステップＳ６３０は、データ数ｉがｉｍａｘ〜ｓｉｚｅまでのクランク角区間で計算処理がなされるように、ゲートをかけている。すなわち、このステップＳ６３０では、最初にｉをｉｍａｘ＋１に設定し、ｉがｓｉｚｅになるまでの間、ステップＳ６３４以下の処理を繰り返しつつ、データ数ｉを１ずつインクリメント（ｉ←ｉ＋１）する。
【００５０】
ｉがｓｉｚｅになるまでの間はステップＳ６３０の判定結果はＹＥＳになり、ステップＳ６３４に進む。このステップＳ６３４では、筒内圧データの単位期間当たりの変化量ＤＬＰ［ｉ］を算出し、ＤＬＰ［ｉ］が正または０であるか否かを判定する。ＤＬＰ［ｉ］が負の場合、ステップＳ６３４の判定結果はＮＯになり、ステップＳ６３６に進み、振幅相当量Ａｍｐ［ｉ］およびｔ-ａｍｐを共に０に設定する。
【００５１】
この後、ステップＳ６３０に戻り、筒内圧データのデータ数ｉを１だけインクリメントし（ｉ←ｉ＋１）、ｉがｓｉｚｅより小さいか否かを判定する。ｉ＜ｓｉｚｅでかつＤＬＰ［ｉ］が負の間は、ステップＳ６３０の判定結果はＹＥＳでかつステップＳ６３４の判定結果はＮＯであるので、ステップＳ６３０，Ｓ６３４およびＳ６３６が繰り返し実行される。その間、ステップＳ６３０でデータ数ｉが１ずつインクリメントされていくとともに、Ａｍｐ［ｉ］およびｔ-ａｍｐは共に０のままに維持される。
【００５２】
こうして、ステップＳ６３０，Ｓ６３４およびＳ６３６が繰り返される間に、図１１の符号９５で示すように筒内圧が上昇すると、筒内圧データの今回値Ｐｄａｔａ［ｉ］がその前回値Ｐｄａｔａ［ｉ−１］より大きくなり、ＤＬＰ［ｉ］が正になるので、ステップＳ６３４からステップＳ６３８に進む。
【００５３】
このステップＳ６３８では、ｔ-ａｍｐとＤＬＰ［ｉ］の加算値をｔ-ａｍｐとして設定する。このとき、ｔ-ａｍｐは上記ステップＳ６３６で０に設定されているので、このステップＳ６３８で設定されるｔ-ａｍｐはＤＬＰ［ｉ］に等しい。
【００５４】
この後、ステップＳ６４０に進み、筒内圧データの今回値と次回値の変化量ＤＬＰ［ｉ＋１］（ＤＬＰ［ｉ＋１］＝Ｐｄａｔａ［ｉ＋１］−Ｐｄａｔａ［ｉ］）が負であるか否かを判定する。図１１の区間９５で示すようにその変化量ＤＬＰ［ｉ＋１］が正の場合には、ステップＳ６４２に進み、振幅相当量Ａｍｐ［ｉ］を０に維持する。
【００５５】
この後、ステップＳ６３０に戻り、ステップＳ６３４に進む。このとき、ステップＳ６３４では、前回算出した変化量ＤＬＰ［ｉ］よりデータ数が１つ増えたデータ数ｉの筒内圧データ（今回値）とその前回値の変化量ＤＬＰ［ｉ］を算出し、その変化量が正または０であるか否かについて判定する。つまり、図１１の区間９５で、ＤＬＰ［ｉ＋１］が正または０であるか否かを判定する。ＤＬＰ［ｉ＋１］は正であるので、ステップＳ６３４の判定結果はＹＥＳになり、ステップＳ６３８に進む。このとき、ｔ-ａｍｐ＝ＤＬＰ［ｉ］であるので、ステップＳ６３８で設定されるｔ-ａｍｐはＤＬＰ［ｉ］にＤＬＰ［ｉ＋１］を加算した値に設定される。
【００５６】
この後、ステップＳ６４０に進み、筒内圧データの今回値と次回値の変化量ＤＬＰ［ｉ＋１］が負であるか否かを判定する。ここでは、図１１の場合でいうと、その今回値に相当する区間９５のｉ＋１位置の筒内圧と、その次回値であるｉ＋２位置の筒内圧の変化量が負であるか否かを判定する。同図の場合、筒内圧はｉ＋１位置からｉ＋２位置の間で下降に転じているので、ステップＳ６４０の判定結果がＹＥＳになり、ステップＳ６４４に進む。
【００５７】
このステップＳ６４４では、ステップＳ６３８で設定したｔ-ａｍｐ( 正の値)を振幅相当量Ａｍｐ［ｉ］として設定する。こうして、筒内圧下降中には（データ数ｉがｉ〜ｓｉｚｅまでのクランク角区間では）、図１１の区間９４、９５、９６のように筒内圧データの変化量ＤＬＰ［ｉ］が正である各区間内での同変化量の総和を振幅相当量Ａｍｐ［ｉ］として算出する。そして、データ数ｉがｓｉｚｅに達すると、ステップＳ６３０の判定結果がＮＯになるので、ステップＳ６３２に進み、図７の計算処理を終了する。
【００５８】
このようにして、指圧線全体の変曲点が１つの場合、気筒毎およびサイクル毎に、筒内圧データＰｄａｔａ［ｉ］に基づき筒内圧波形（指圧線）に含まれる振動波形を抽出し、その振動成分の振幅相当量Ａｍｐ［ｉ］を算出することができる。こうして気筒毎およびサイクル毎に算出される振幅相当量Ａｍｐ［ｉ］を、図１３で示してある。
【００５９】
次に、上記ステップＳ５００で変曲点の数が３と判定された場合に、ステップＳ６００で実行される振幅相当量Ａｍｐ［ｉ］の計算処理について説明する。
（１）まず、筒内圧Ｐ上昇中のクランク角区間（０＜ｉ＜ＴＤＣ）では、気筒毎およびサイクル毎に、筒内圧データの変化量ＤＬＰ［ｉ］が負である各区間内での同変化量の総和の絶対値を振幅相当量Ａｍｐ［ｉ］として算出する。
【００６０】
（２）次に、圧縮上死点位置（ｉ＝ＴＤＣ）では、振幅相当量Ａｍｐ［ｉ］を０に設定する。
（３）次に、筒内圧Ｐ下降中のクランク角区間（ＴＤＣ＜ｉ＜ｉｍｉｎ）では、気筒毎およびサイクル毎に、筒内圧データの変化量ＤＬＰ［ｉ］が正である各区間内での同変化量の総和を振幅相当量Ａｍｐ［ｉ］として算出する。
【００６１】
（４）次に、筒内圧最小値Ｐｍｉｎの位置（ｉ＝ｉｍｉｎ）では、振幅相当量Ａｍｐ［ｉ］を０に設定する。
（５）次に、筒内圧Ｐ上昇中のクランク角区間（ｉｍｉｎ＜ｉ＜ｉｍａｘ）では、気筒毎およびサイクル毎に、筒内圧データの変化量ＤＬＰ［ｉ］が負である各区間内での同変化量の総和の絶対値を振幅相当量Ａｍｐ［ｉ］として算出する。
【００６２】
（６）次に、筒内圧最大値Ｐｍａｘの位置（ｉ＝ｉｍａｘ）では、振幅相当量Ａｍｐ［ｉ］を０に設定する。
（７）そして、筒内圧Ｐ下降中のクランク角区間（ｉｍａｘ＜ｉ＜ｓｉｚｅ）では、気筒毎およびサイクル毎に、筒内圧データの変化量ＤＬＰ［ｉ］が正である各区間内での同変化量の総和を振幅相当量Ａｍｐ［ｉ］として算出する。
【００６３】
このようにして、指圧線全体の変曲点が３つの場合、気筒毎およびサイクル毎に、筒内圧データＰｄａｔａ［ｉ］に基づき筒内圧波形（指圧線）に含まれる振動波形を抽出し、図１３で示すその振動成分の振幅相当量Ａｍｐ［ｉ］を算出することができる。上記ステップＳ６００が振動成分抽出手段に相当する。
【００６４】
このようにして上記ステップＳ６００で振幅相当量Ａｍｐ［ｉ］を計算した後、図２のステップＳ７００に進む。このステップＳ７００では、気筒毎およびサイクル毎に、１サイクル中の第１ゲート区間内での振幅相当量Ａｍｐ［ｉ］の最大値Ａｍｐｍａｘを算出する。その第１ゲート区間は、図１２で示すように、上記ステップＳ２００で算出したｉｍａｘ前後のα＋βのクランク角区間である。
【００６５】
ステップＳ７００の処理を図８のフローチャートに基づいて説明する。
まず、ステップＳ７１０では、データ数ｉがｉｍａｘ−αからｉｍａｘ−βまでの第１ゲート区間で計算処理がなされるように、ゲートをかけている。すなわち、このステップＳ７１０では、最初にｉをｉｍａｘ−αに設定し、ｉがｉｍａｘ−βになるまでの間、ステップＳ７１０、Ｓ７２０およびＳ７３０の処理を繰り返しつつ、データ数ｉを１ずつインクリメント（ｉ←ｉ＋１）する。
【００６６】
ｉがｉｍａｘ−βになるまでの間はステップＳ７１０の判定結果はＹＥＳになり、ステップＳ７２０に進む。このステップＳ７２０では、振幅相当量Ａｍｐ［ｉ］の今回値が最大値Ａｍｐｍａｘを超えているか否かを判定する。その今回値がＡｍｐｍａｘ以下の場合には、ステップＳ７１０に戻る。一方、その今回値がＡｍｐｍａｘを超えている場合には、ステップＳ７２０に進み、振幅相当量Ａｍｐ［ｉ］の今回値をＡｍｐｍａｘとして設定する。この後、ステップＳ７１０に戻る。
【００６７】
こうして、データ数ｉがｉｍａｘ−αからｉｍａｘ−βまでの第１ゲート区間において、振幅相当量Ａｍｐ［ｉ］の今回値が最大値Ａｍｐｍａｘを超える度にその今回値でＡｍｐｍａｘを更新していくことで、第１ゲート区間内での最大値Ａｍｐｍａｘを算出する。なお、上記ステップＳ７００が、振幅最大値算出手段に相当する。
【００６８】
この後、図２のステップＳ８００に進み、気筒毎に、しきい値１としきい値２を設定する（図１４参照）。このステップＳ８００では、ステップＳ７００で算出した最大値Ａｍｐｍａｘの任意サイクル（例えば１００サイクル）分の加算平均値と、その標準偏差σを３倍した値との加算値（任意サイクル平均値＋３σ）をしきい値１として算出する。また、最大値Ａｍｐｍａｘの任意サイクル分の加算平均値（任意サイクル平均値）をしきい値２として算出する。なお、このステップＳ８００が、しきい値算出手段に相当する。
【００６９】
この後、図３のステップＳ９００に進み、気筒毎およびサイクル毎にノック判定を行なう。このステップＳ９００では、上記ステップＳ７００で算出した振幅相当量Ａｍｐ［ｉ］の最大値Ａｍｐｍａｘと、振動成分の繰り返し性の有無とに基づき、気筒毎およびサイクル毎にノック判定を行なう。
【００７０】
ステップＳ９００の処理（「ノックＯＲノイズ判定処理」）を図９のフローチャートに基づいて説明する。
まず、ステップＳ９１０では、ステップＳ７００で算出した振幅相当量Ａｍｐ［ｉ］の最大値ＡｍｐｍａｘがステップＳ８００で設定したしきい値１を超えているか否かについて判定する。この判定結果がＮＯの場合、すなわち最大値Ａｍｐｍａｘがしきい値１以下の場合、ステップＳ９６０に進み、「ノイズ」と判定される。こうして、気筒毎に最大値Ａｍｐｍａｘがしきい値１以下のサイクルについては、「ノイズ」と判定される。
【００７１】
また、ステップＳ９１０の判定結果がＹＥＳの場合、すなわち最大値Ａｍｐｍａｘがしきい値１を超えている場合には、振動が大きくノックである可能性が高いので、次のステップ９２０に進む。このステップＳ９２０では、データ数ｉが最大値Ａｍｐｍａｘの位置であるｉａｍｐｍａｘからｉａｍｐｍａｘ＋γまでの第２ゲート区間（図１４参照）で計算処理がなされるように、ゲートをかけている。すなわち、このステップＳ９２０では、最初にｉをｉａｍｐｍａｘに設定し、ｉがｉａｍｐｍａｘ＋γになるまでの間、ステップＳ９２０〜Ｓ９７０の処理を繰り返しつつ、データ数ｉを１ずつインクリメント（ｉ←ｉ＋１）する。
【００７２】
ｉがｉａｍｐｍａｘ＋γになるまでの間はステップＳ９２０の判定結果はＹＥＳになり、ステップＳ９３０に進む。このステップＳ９３０では、振幅相当量Ａｍｐ［ｉ］の今回値がステップＳ８００で設定したしきい値２を超えているか否かを判定する。この判定結果がＮＯの場合にはステップＳ９２０に戻る。一方、その判定結果がＹＥＳの場合にはステップＳ９４０に進む。
【００７３】
このステップＳ９４０では、振幅相当量Ａｍｐ［ｉ］がしきい値２を超える回数である振幅繰り返し数Ｎを１だけインクリメントする。なお、ステップＳ９４０では、ｉａｍｐｍａｘでの最大値Ａｍｐｍａｘを含めて振幅繰り返し数Ｎをカウントする。つまり、図９の処理が開始されたときのｉａｍｐｍａｘの位置で、ステップＳ９４０において振幅繰り返し数Ｎが１に設定されるようになっている。この後、ステップＳ９２０に戻る。
【００７４】
こうしてｉがｉａｍｐｍａｘ＋γになるまでの第２ゲート区間内に、最大値Ａｍｐｍａｘを含めて振幅相当量Ａｍｐ［ｉ］がしきい値２を超えた振幅繰り返し数Ｎをカウントする。
【００７５】
そして、ｉがｉａｍｐｍａｘ＋γになると、ステップＳ９２０の判定結果がＮＯになり、ステップＳ９５０に進む。このステップＳ９５０では、ステップＳ９４０で設定した振幅繰り返し数Ｎがしきい値３を超えているか否かを判定する。振幅繰り返し数Ｎがしきい値３以下の場合には、ステップＳ９５０の判定結果がＮＯになり、上記ステップＳ９６０に進み、「ノイズ」と判定される。すなわち、ノック無しサイクルであるノイズサイクルと判定される。一方、振幅繰り返し数Ｎがしきい値３を超えている場合には、ステップＳ９５０の判定結果がＹＥＳになり、ステップＳ９７０に進み、「ノック」と判定される。すなわち、ノック有りサイクルであるノックサイクルと判定される。
【００７６】
このようにして、気筒毎に、次の２つの条件が成立したサイクルについては、「ノック」と判定される（ステップＳ９７０）。（条件１）図１４で示すように、第１ゲート区間内での最大値Ａｍｐｍａｘがしきい値１を超えている（ステップＳ９１０でＹＥＳ）。（条件２）第２ゲート区間内での振幅繰り返し数Ｎがしきい値３を超えている（ステップＳ９５０でＹＥＳ）。すなわち、振動成分の繰り返し性が有ると判定される。
【００７７】
これに対して、最大値Ａｍｐｍａｘがしきい値１以下（ステップＳ９１０でＮＯ）となる各気筒のサイクル、或いは振幅繰り返し数Ｎがしきい値３以下（ステップＳ９５０でＮＯ）となる各気筒のサイクルは、いずれもノック無し、すなわち「ノイズ」（ノイズサイクル）と判定される。なお、上記ステップＳ９００が、ノック判定手段に相当する。
【００７８】
そして、図３に示す上記ステップＳ９６０に進み、「ノイズ」と判定された場合には、図３のステップＳ１０００に進む。このステップＳ１０００では、図２の上記ステップＳ８００で算出したしきい値１，しきい値２を再計算する。すなわち、任意サイクルのうちステップＳ９００でノック無しと判定されたノイズサイクルだけの最大値Ａｍｐｍａｘの加算平均値と、その標準偏差σを３倍した値との加算値（「ノイズ」サイクルのＡｍｐｍａｘの平均値＋３σ）をしきい値１として算出する。また、ノイズサイクルだけの最大値Ａｍｐｍａｘの加算平均値（ノイズサイクルのＡｍｐｍａｘの平均値）をしきい値２として算出する。このステップＳ１０００も、しきい値設定手段に相当する。
【００７９】
この後、ステップＳ１１００に進み、しきい値の収束判定を行なう。すなわち、ステップＳ１０００で再計算したしきい値２の今回値が前回のしきい値２（しきい値２の前回値）と同じになったか否かを判定する。しきい値２の今回値がその前回値と同じになるまでは、ステップＳ９００、Ｓ９６０およびＳ１０００が繰り返されるので、しきい値１，しきい値２がそれぞれ徐々に下がっていく（図１２参照）。また、その間にステップＳ９００の判定結果がＹＥＳになる場合には、ステップＳ９７０に進み「ノック」と判定される。こうして、しきい値２の今回値がその前回値と同じになるまでは、「ノック」と判定されるサイクルを除外しながら（図１５参照）、ノック無しと判定されたノイズサイクルだけの最大値Ａｍｐｍａｘの加算平均値とその標準偏差σとに基づき両しきい値１，２が再計算される。
【００８０】
そして、しきい値２の今回値がその前回値と同じになり、ステップＳ１１００の判定結果がＹＥＳになると、ステップＳ１２００に進み、ステップＳ９００〜Ｓ１１００の繰り返し判定を終了する。これにより、気筒毎およびサイクル毎に「ノック」か「ノイズ」の判定結果（ｋ，ｃｙｃｌｅ）＝「ノック」ＯＲ「ノイズ」が得られる。ここで、ｋは気筒番号であり、ｃｙｃｌｅはサイクル番号である。例えば、気筒＃１の４サイクル目が「ノック」の場合には、（１，４）＝「ノック」という判定結果が得られる。こうして、ステップＳ１１００の判定結果がＹＥＳになった時点でノック無しと判定されていたサイクルが最終的に「ノイズ」となり、それ以外のサイクルは「ノック」となる。
【００８１】
この後、図４に示すステップＳ１３００に進む。このステップＳ１３００では、高速データロガー２６から取り込んだ各気筒のブロック振動センサ出力（任意サイクル分のブロック振動データ）を、気筒毎にノックサイクルとノイズサイクルに分けて抽出する。つまり、このステップＳ１３００では、上記ステップＳ１２００で得られた気筒毎およびサイクル毎の「ノック」か「ノイズ」の判定結果に基づき、任意サイクル分の各ブロック振動センサ出力をノックサイクルとノイズサイクルとに層別する。例えば、任意サイクルの２サイクル目では、気筒＃１，＃３，＃２の各ブロック振動センサ出力はそれぞれノイズサイクル、気筒＃４のブロック振動センサ出力はノックサイクル、というように任意サイクル分のブロック振動データを層別する。なお、このステップＳ１３００が、振動センサ出力抽出手段に相当する。
【００８２】
この後、ステップＳ１４００に進む。このステップＳ１４００では、ノックサイクルとノイズサイクルに分けて抽出した任意サイクル分の各ブロック振動センサ出力をそれぞれＦＦＴ処理する。これにより、１ノックサイクル毎のパワースペクトル（ＦＦＴ結果ａ）と１ノイズサイクル毎のパワースペクトル（ＦＦＴ結果ｔ-ｂ）とが算出される。なお、このステップＳ１４００がＦＦＴ処理手段に相当する。
【００８３】
この後、ステップＳ１５００に進む。このステップＳ１５００では、各ノックサイクルに対して、そのノックサイクルと前回「ノック」と判定されたノックサイクルとの間のノイズサイクル全ての前記ＦＦＴ結果ｔ-ｂを加算平均したＦＦＴ加算平均値ｂを算出する。すなわち、各ノックサイクルに対して、そのサイクル以前でかつ前回の判定結果「ノック」以降のノイズサイクル全てのＦＦＴ結果ｔ-ｂの加算平均値を算出する。
【００８４】
つまり、任意サイクルのうち、ｉ回目のノックサイクルのＦＦＴ加算平均値をｂｉとすると、
ｂｉは、（ｉ−１）回目のノックサイクルと、ｉ回目のノックサイクルとの間のノイズサイクル全てのＦＦＴ結果ｔ-ｂを加算平均した値である。４気筒エンジンの判定結果（ノック判定結果）およびｂｉの計算例をステップＳ１５００で示してある。ここでは、判定結果「ノイズ」を×で、判定結果「ノック」を○でそれぞれ示してある。また、ここでは、気筒＃４の２サイクル目が１回目のノックサイクルであり、気筒＃４の３サイクル目が２回目のノックサイクルであり、そして、気筒＃３の５サイクル目が３回目のノックサイクルであることを示している。また、ここでは、ｉ回目のノックサイクルの前記ＦＦＴ結果をａｉで、１回目のノックサイクルのＦＦＴ結果をａ１で、２回目のノックサイクルのＦＦＴ結果をａ２で、そして、３回目のノックサイクルのＦＦＴ結果をａ３でそれぞれ示している。
【００８５】
１回目のノックサイクルに対しては、そのノックサイクル以前のノイズサイクル全て、すなわち気筒＃１の１サイクル目から気筒＃３の２サイクル目までのノイズサイクル全てのＦＦＴ結果ｔ-ｂを加算平均したＦＦＴ加算平均値ｂ１がステップＳ１５００で算出される。同様に、２回目のノックサイクルに対しては、気筒＃２の２サイクル目から気筒＃３の３サイクル目までのノイズサイクル全てのＦＦＴ結果ｔ-ｂを加算平均したＦＦＴ加算平均値ｂ２が算出される。また、３回目のノックサイクルに対しては、気筒＃２の３サイクル目から気筒＃１の５サイクル目までのノイズサイクル全てのＦＦＴ結果ｔ-ｂを加算平均したＦＦＴ加算平均値ｂ３が算出される。
【００８６】
このようにステップＳ１５００では、ノックサイクル毎に、（ｉ−１）回目のノックサイクルとｉ回目のノックサイクルとの間のバックグラウンドレベルを表すｉ回目のノックサイクルのＦＦＴ結果ｂｉを算出している。なお、このステップＳ１５００が加算平均値算出手段に相当する。
【００８７】
この後、ステップＳ１６００に進む。このステップＳ１６００では、上記ステップＳ１５００で算出したｉ回目のノックサイクルのＦＦＴ結果ａｉと、ｉ回目のノックサイクルのＦＦＴ加算平均値をｂｉとの差分（ａｉ−ｂｉ）に基づき、ノックサイクル毎にノック強度ｃｉを算出する。すなわち、このステップＳ１６００では、差分（ａｉ−ｂｉ）を所定の周波数区間で積分してノックサイクル毎のノック強度を算出する。例えば、差分（ａｉ−ｂｉ）をノック波形の振動周波数に相当する１２〜１４ＫＨｚ程度の可聴帯で積分する。なお、このステップＳ１６００がノック強度算出手段に相当する。
【００８８】
この後、ステップＳ１７００に進む。このステップＳ１７００では、任意サイクルのノックレベルを、次の手順で算出する。
（１）まず、ステップＳ１６００で算出したノック強度ｃｉに対して３つのしきい値Ａ，Ｂ，Ｃを設け、ノック強度を４領域に分割する（４つの強度段階に分ける）。つまり、０＜ｃｉ＜しきい値Ａの場合、ノック強度ｃｉはＴＫ（トレースノック）であると判定する。また、しきい値Ａ≦ｃｉ＜しきい値Ｂの場合、ノック強度ｃｉは小ノックであると判定する。また、しきい値Ｂ≦ｃｉ＜しきい値Ｃの場合、ノック強度ｃｉは中ノックであると判定する。そして、しきい値Ｃ≦ｃｉの場合、大ノックであると判定する。
【００８９】
（２）次に、任意サイクル（解析サイクルＮサイクル）中のノック強度の分布、つまりノック強度毎に任意サイクル中のノック頻度を算出する。算出したノック強度の分布を、ステップＳ１７００のグラフで示している。このグラフの横軸はノック強度を、その縦軸は頻度をそれぞれ表している。ここでは、小ノックの頻度が一番大きい（最も高い）ことを示している。
【００９０】
（３）次に、（２）で求めた４つの強度段階に分けて求めた各段階のノック頻度のうち、頻度が最も高い強度段階のノック強度を任意サイクルのノックレベルとして算出する（決定する）。ここでは小ノックの頻度が最も高いので、任意サイクルの（現在の）ノックレベルとして小ノックが算出される。なお、ステップＳ１７００の（１）および（２）の処理がノック頻度算出手段に相当し、また、その（３）の処理がノックレベル算出手段に相当する。
【００９１】
以上説明したように、エンジン２１の点火時期等を自動適合するには、ステップＳ１０で定常状態と点火時期の設定を変えながら、各設定条件でエンジン２１を任意サイクル運転して得たデータに基づき、上記ノックレベル算出処理を行う。これにより、各設定条件でのノックレベルをそれぞれ自動的に検出することができる。
【００９２】
以上のように構成された一実施形態によれば、以下の作用効果を奏する。
（イ）各気筒のブロック振動センサ２３の出力を、ノック有りと判定されたノックサイクルとノック無しと判定されたノイズサイクルに分けて抽出する（ステップＳ１３００）。これにより、筒内圧を利用して１サイクル毎に、絶対にノックの発生していないサイクルと、少なくとも筒内ではノックが発生しているサイクルとに層別できる。このため、各筒内圧センサ出力と同時に各ブロック振動センサ出力を計測することで、筒内圧情報をもとにノック有り無しの層別を自動的に行なうことができる。すなわち、人間の聴感でノック判定をする必要がない。
【００９３】
（ロ）各ブロック振動センサ出力にバックグラウンドノイズ以上の振動が含まれていれば、間違いなく音としてノックが発生していることになる。このようなノックの強度を、各ノックサイクルのＦＦＴ結果ａとＦＦＴ加算平均値ｂとの差分（ａ−ｂ）に基づき、ノックサイクル毎に算出することができる（ステップＳ１６００）。すなわち、そのＦＦＴ加算平均値ｂは、各ノックサイクルとそのサイクル以前に「ノック」と判定されたサイクルとの間のバックグラウンドレベルを表している。各ノックサイクルのＦＦＴ結果ａとそのノックサイクルに対して算出したバックグラウンドレベルとの差分（ａ−ｂ）に基づいて、ノック強度をノックサイクル毎に算出することができる。その結果、人間の聴感でノック判定する場合は、ある一定時間エンジン近傍で音を聞き、その時のバックグラウンド音とノック音を聞き分けてノックレベルを決定する。この場合、人による差や、聞く方向の違いにより、レベルが異なってしまうが、こうした自動適合をする上で妨げとなる要因を排除できる。したがって、エンジンの点火時期等を自動適合する際に、狙いのノックレベルを自動検出可能になり、点火時期等の自動適合が可能になる。
【００９４】
（ロ）エンジン２１の点火時期等を自動適合する際に、ステップＳ１０で定常状態と点火時期の設定を変えながら、各設定条件でエンジン２１を任意サイクル運転して得たデータに基づき、上記ノックレベル算出処理を行う。これにより、各設定条件でのノックレベルをそれぞれ自動的に検出することができる（ステップＳ１７００）。
【００９５】
（ハ）自動適合時にノックを自動検出する狙いのノックレベルは聴感上許容可能なノックレベルであり、このような狙いのノックレベルを自動検出するためには、ノックレベルを定量的に扱う必要がある。聴感上許容可能なノックレベルは、１回当たりに聞えるノック強度とその頻度により決まる。そのうちのノック強度をステップＳ１６００で算出できる。つまり、ノックサイクル毎のノック強度を、人間によりしきい値を設定することなく、前記差分を所定の周波数区間で積分して求めることができる。
【００９６】
定の周波数区間は可聴帯であることを要旨とする。
（ニ）任意サイクル中のノックサイクル毎にノック強度を算出するのに、ＦＦＴ結果ａとＦＦＴ加算平均値ｂ（上記バックグラウンドレベル）の差分（ａ−ｂ）をノックとしている。これにより、各ブロック振動センサ出力にバックグラウンドノイズ以上の振動が含まれていれば、間違いなく音としてノックが発生していることになる。このようなシリンダヘッド、シリンダブロックを通して外部へノック音として伝わるノックを、ＦＦＴ結果ａとＦＦＴ加算平均値ｂの差分で表すことができる。
【００９７】
（ホ）ステップＳ１６００で算出したノック強度毎に任意サイクル中のノック頻度を算出する（ステップＳ１７００の処理（１），（２））。こうして求めたノック強度とノック頻度からノックレベルを算出する（ステップＳ１７００の処理（３））。このように、ノック強度に加えてノック頻度を算出し、ノック強度とその頻度からノックレベルを算出することで、現在の運転条件でのノックレベルを自動検出することができる。
【００９８】
（ヘ）ノック強度を４つの強度段階に分け、各段階の頻度を算出し（ステップＳ１７００の処理（１），（２））、算出した頻度が最も高い強度段階のノック強度を現在のノックレベルと決定する（ステップＳ１７００の処理（３））。これにより、ノックレベルを定量的に扱うことができ、聴感上許容可能なノックレベルを自動的に検出することができる。（請求項５）
（ト）ステップＳ１６００では、差分（ａｉ−ｂｉ）を所定の周波数区間、例えば、ノック波形の振動周波数に相当する１２〜１４ＫＨｚ程度の可聴帯で積分する。このため、シリンダブロックを通して外部へ音として伝わるノックの強度を算出することができる。
【００９９】
（チ）ステップＳ１５００では、ノックサイクル毎に、（ｉ−１）回目のノックサイクルとｉ回目のノックサイクルとの間のバックグラウンドレベルを表すｉ回目のノックサイクルのＦＦＴ結果ｂｉを算出している。このバックグラウンドレベルと各ノックサイクルのパワースペクトル（ＦＦＴ結果ａ）の差分（ａｉ−ｂｉ）を積分してノック強度を算出する（ステップＳ１６００）。このため、各ノックサイクルのノック強度として、ノックサイクル毎に異なるバックグランドレベルに応じた最適な値を算出することができる。
【０１００】
[ 変形例]
なお、この発明は以下のように変更して具体化することもできる。
・上記一実施形態では、任意サイクル運転して得られる任意サイクル分の各ブロック振動センサ出力を、２つのサイクルに層別して（ステップＳ１３００）、ＦＦＴ処理する（ステップＳ１４００）ようにしているが、本発明はこのような構成に限定されない。例えば、任意サイクルの運転中に、各ブロック振動センサ出力を順次取得しながら、ステップＳ１３００〜Ｓ１６００およびＳ１７００の処理（１）をリアルタイムで行なうようにしてもよい。これにより、任意サイクルの運転が終了した時点では、ステップＳ１７００の処理（２）と（３）を行なえだけでよく、ノックレベルを迅速に算出することができる。
【０１０１】
・上記一実施形態では、ステップＳ１６００で差分（ａｉ−ｂｉ）を所定の周波数区間で積分するようにしているが、その周波数区間は上記可聴帯に限らず、適宜の積分範囲を設定可能である。
【０１０２】
・上記一実施形態では、ステップＳ１７００の処理（１）で、ノック強度ｃｉに対して３つのしきい値Ａ，Ｂ，Ｃを設け、ノック強度を４つの強度段階に分けるようにしているが、その強度段階の数は「４」に限らず、適宜設定可能である。
【０１０３】
・上記一実施形態において、ステップＳ８００で算出するしきい値１を、最大値Ａｍｐｍａｘの任意サイクル分の加算平均値と、その標準偏差σを３以外の整数倍した値との加算値としてもよい。
【０１０４】
・上記一実施形態では、本発明を４気筒のエンジン２１に適用した例を示したが、本発明は多気筒の内燃機関に広く適用可能である。
・上記一実施形態では、指圧線の圧縮上死点位置ＴＤＣ近傍に極大値（変曲点）ができる場合には、その変曲点はＴＤＣの近傍にできるので、ＴＤＣをその変曲点に代えて１つの変曲点に設定しているが、その変曲点の位置を算出して、この変曲点を１つの変曲点として設定するようにしても良い。
【０１０５】
・上記一実施形態では、高速データロガー２６は、各筒内圧センサ出力を例えば２００ＫＨｚでサンプリングしているが、そのサンプリング周波数は適宜変更可能である。
【０１０６】
・上記一実施形態において、図１２に示す第１ゲート区間を図１４に示す第２ゲート区間と同じにしても良い。
以下、上記一実施形態から把握できる技術思想について説明する。
【０１０７】
（１）各気筒の筒内圧を検出する複数の筒内圧センサを備えた自動適合用ノック自動検出装置において、
前記複数の筒内圧センサからそれぞれ出力される各筒内圧センサ出力を高周波サンプリングして、気筒毎およびサイクル毎に筒内圧データを収録する高速データ収録手段と、
前記筒内圧データに基づき、前記各筒内圧センサ出力に含まれる振動成分の振幅相当量を気筒毎およびサイクル毎に算出する振動成分抽出手段と、
気筒毎およびサイクル毎に、前記振幅相当量の最大値或いは積分値を算出する振幅最大値算出手段と、
前記最大値或いは積分値の任意サイクル分の加算平均値と標準偏差とからしきい値を算出するしきい値算出手段と、
前記最大値或いは積分値と前記振動成分の繰り返し性の有無とに基づくノック判定を気筒毎およびサイクル毎に行い、同最大値或いは積分値がしきい値を超えかつ前記繰り返し性が有る場合にノックと判定するノック判定手段と、
前記各気筒の筒内圧センサ出力と同時計測する各気筒のブロック振動センサ出力を、前記判定結果に基づきノックサイクルとノイズサイクルに分けて抽出する振動センサ出力抽出手段と、
前記ノックサイクルと前記ノイズサイクルに分けて抽出した各気筒のブロック振動センサ出力をそれぞれＦＦＴ処理して１ノックサイクル毎のＦＦＴ結果（ａ）と１ノイズサイクル毎のＦＦＴ結果（ｔ-ｂ）を算出するＦＦＴ処理手段と、
各ノックサイクルに対して、そのノックサイクルと前回ノックと判定されたノックサイクルとの間のノイズサイクル全ての前記ＦＦＴ結果（ｔ-ｂ）を加算平均したＦＦＴ加算平均値（ｂ）を算出する加算平均値算出手段と、
前記ＦＦＴ結果（ａ）と前記ＦＦＴ加算平均値（ｂ）との差分に基づき、ノックサイクル毎にノック強度を算出するノック強度算出手段とを備えることを特徴とする自動適合用ノック自動検出装置。
【０１０８】
（２）上記（１）に記載の自動適合用ノック自動検出装置において、前記ノック強度算出手段は、前記差分を所定の周波数区間で積分してノックサイクル毎のノック強度を算出することを特徴とする自動適合用ノック自動検出装置。
【０１０９】
（３）上記（２）に記載の自動適合用ノック自動検出装置において、前記所定の周波数区間は可聴帯であることを特徴とする自動適合用ノック自動検出装置。
（４）上記（１）〜（３）のいずれかに記載の自動適合用ノック自動検出装置において、前記ノック強度算出手段により算出したノック強度毎に任意サイクル中のノック頻度を算出するノック頻度算出手段と、前記ノック強度と前記ノック頻度から任意サイクルでのノックレベルを算出するノックレベル算出手段とを備えることを特徴とする。自動適合用ノック自動検出装置。
【０１１０】
（５）上記（４）に記載の自動適合用ノック自動検出装置において、前記ノック頻度算出手段は、前記ノック強度を任意の強度段階に分けて各段階の頻度を算出し、前記ノックレベル算出手段は、前記ノック頻度算出手段により算出した頻度が最も高い強度段階のノック強度を任意サイクルのノックレベルと決定することを特徴とする自動適合用ノック自動検出装置。
【図面の簡単な説明】
【図１】  一実施形態に係る自動適合用ノック自動検出装置の全体を模式的に示す構成図。
【図２】  ノックレベル算出処理を示すフローチャート。
【図３】  図２のノックレベル算出処理の続きを示すフローチャート。
【図４】  図３のノックレベル算出処理の続きを示すフローチャート
【図５】  図２のステップＳ５００の処理内容を示すフローチャート。
【図６】  図２のステップＳ６００における変曲点１つの場合で筒内圧上昇中の振幅相当量の計算処理を示すフローチャート。
【図７】  図２のステップＳ６００における変曲点１つの場合で筒内圧下降中の振幅相当量の計算処理を示すフローチャート。
【図８】  図２のステップＳ７００の処理内容を示すフローチャート。
【図９】  図３のステップＳ９００の処理内容を示すフローチャート。
【図１０】  変曲点１つの場合で筒内圧上昇中の振幅相当量の計算処理を示す説明図。
【図１１】  変曲点１つの場合で筒内圧下降中の振幅相当量の計算処理を示す説明図。
【図１２】  筒内圧波形を示すグラフ。
【図１３】  図１２の筒内圧波形から抽出した振動波形を示すグラフ。
【図１４】  しきい値と振動成分の関係を示す説明図。
【図１５】  しきい値の再計算についての説明図。
【符号の説明】
２１…内燃機関としてのエンジン、２３…ブロック振動センサ、２４…筒内圧センサ、２６…高速データ収録手段としての高速データロガー、２７…筒内圧解析用パソコン。
【図１】
0003851591.tif 000002
【図２】
0003851591.tif 000003
【図３】
0003851591.tif 000004
【図４】
0003851591.tif 000005
【図５】
0003851591.tif 000006
【図６】
0003851591.tif 000007
【図７】
0003851591.tif 000008
【図８】
0003851591.tif 000009
【図９】
0003851591.tif 000010
【図１０】
0003851591.tif 000011
【図１１】
0003851591.tif 000012
【図１２】
0003851591.tif 000013
【図１３】
0003851591.tif 000014
【図１４】
0003851591.tif 000015
【図１５】
0003851591.tif 000016