"内燃機関の複数の気筒の排出ガスが合流して流れる排気集合部に設置した排出ガスセンサの検出値に基づいて気筒別に空燃比を推定する気筒別空燃比推定を実行する気筒別空燃比推定手段を備えた内燃機関の制御装置において、前記気筒別空燃比推定手段は、少なくとも1つの気筒毎に燃焼空燃比を入力として前記排気集合部における流入ガスの空燃比以下集合部流入空燃比というを出力とする第1の排気系モデルと、前記集合部流入空燃比を入力として前記排出ガスセンサの検出値を出力とする第2の排気系モデルとを用い、前記排出ガスセンサの検出値と前記第2の排気系モデルとに基づいて前記集合部流入空燃比を推定する集合部流入空燃比推定手段と、前記集合部流入空燃比推定手段で推定した集合部流入空燃比と前記第1の排気系モデルとに基づいて少なくとも1つの気筒毎に燃焼空燃比を推定する燃焼空燃比推定手段とを備え、前記集合部流入空燃比推定手段及び前記燃焼空燃比推定手段により前記気筒別空燃比推定を実行することを特徴とする内燃機関の制御装置。前記第1の排気系モデルは、各気筒の燃焼ガスの前記排出ガスセンサでの検出性の差を考慮して、前記排出ガスセンサでの検出に寄与する集合部流入空燃比を出力するように構築されていることを特徴とする請求項1に記載の内燃機関の制御装置。前記第2の排気系モデルは、前記集合部流入空燃比の履歴と前記排出ガスセンサの検出値の履歴にそれぞれ所定の重みを乗じて加算したものを前記排出ガスセンサの検出値として出力するように構築されていることを特徴とする請求項1又は2に記載の内燃機関の制御装置。前記集合部流入空燃比推定手段は、前記第2の排気系モデルに基づくオブザーバにより前記集合部流入空燃比の推定を実施することを特徴とする請求項1乃至3のいずれかに記載の内燃機関の制御装置。前記燃焼空燃比推定手段は、前記第1の排気系モデルの逆モデルにより前記燃焼空燃比の推定を実施することを特徴とする請求項1乃至4のいずれかに記載の内燃機関の制御装置。前記気筒別空燃比推定手段は、内燃機関の運転条件に応じて前記第1の排気系モデルを設定し、内燃機関の運転条件に応じて前記集合部流入空燃比推定手段を変更することを特徴とする請求項1乃至5のいずれかに記載の内燃機関の制御装置。前記気筒別空燃比推定手段は、前記排出ガスセンサの応答特性に応じて前記第1の排気系モデルを設定し、前記排出ガスセンサの応答特性に応じて前記集合部流入空燃比推定手段を変更することを特徴とする請求項1乃至6のいずれかに記載の内燃機関の制御装置。前記燃焼空燃比推定手段による燃焼空燃比の推定精度を判定する推定精度判定手段を備え、前記気筒別空燃比推定手段は、前記推定精度判定手段の判定結果に基づいて前記集合部流入空燃比推定手段と前記燃焼空燃比推定手段の少なくとも1つの内部パラメータを変更することを特徴とする請求項1乃至7のいずれかに記載の内燃機関の制御装置。前記集合部流入空燃比推定手段は、内燃機関の所定の基準角度位置で前記排出ガスセンサの検出値に基づいて前記集合部流入空燃比を推定する演算を実行し、前記気筒別空燃比推定手段は、少なくとも内燃機関の負荷に応じて前記基準角度位置を決定することを特徴とする請求項1乃至8のいずれかに記載の内燃機関の制御装置。前記燃焼空燃比推定手段は、内燃機関の気筒毎に所定の基準角度位置で前記集合部流入空燃比に基づいて前記燃焼空燃比を推定する演算を実行し、前記気筒別空燃比推定手段は、少なくとも内燃機関の負荷に応じて前記基準角度位置を決定することを特徴とする請求項1乃至9のいずれかに記載の内燃機関の制御装置。前記気筒別空燃比推定手段は、内燃機関の排気バルブの開弁時期に応じて前記基準角度位置を補正することを特徴とする請求項9又は10に記載の内燃機関の制御装置。前記気筒別空燃比推定手段は、前記排出ガスセンサの状態と内燃機関の運転状態のうちの少なくとも一方に基づいて前記気筒別空燃比推定の実行条件が成立しているか否かを判定し、該実行条件が成立しているときに前記気筒別空燃比推定を実行することを特徴とする請求項1乃至11のいずれかに記載の内燃機関の制御装置。前記気筒別空燃比推定の実行条件として、内燃機関の燃料カット中でなく且つ該燃料カット終了から所定期間以内でないという条件を含むことを特徴とする請求項12に記載の内燃機関の制御装置。内燃機関の気筒群毎又は気筒毎に前記気筒別空燃比推定手段を備えていることを特徴とする請求項1乃至13のいずれかに記載の内燃機関の制御装置。前記排出ガスセンサの検出値を目標値に一致させるよう各気筒の空燃比をフィードバック制御する空燃比フィードバック制御を実行する空燃比フィードバック制御手段と、前記気筒別空燃比推定により推定された各気筒の気筒別空燃比に基づいて気筒毎に気筒間空燃比ばらつきを算出し、該気筒間空燃比ばらつきに基づいて気筒毎に気筒別補正値を算出して、該気筒別補正値を用いて気筒毎に空燃比制御量を補正する気筒別空燃比制御を実行する気筒別空燃比制御手段とを備えていることを特徴とする請求項1乃至14のいずれかに記載の内燃機関の制御装置。前記気筒別空燃比制御手段は、前記気筒別空燃比推定により推定された全気筒の気筒別空燃比の平均値と気筒別空燃比との差から前記気筒間空燃比ばらつきを算出することを特徴とする請求項15に記載の内燃機関の制御装置。前記気筒別空燃比制御手段は、前記気筒別補正値の全気筒平均値を算出し、この全気筒平均値により各気筒の気筒別補正値を減算補正することを特徴とする請求項15又は16に記載の内燃機関の制御装置。前記気筒別空燃比制御手段は、所定条件下で前記気筒別空燃比推定が許可された場合又は前記気筒別空燃比推定が許可されてから所定期間が経過した場合に前記気筒別空燃比制御を許可することを特徴とする請求項15乃至17のいずれかに記載の内燃機関の制御装置。前記排出ガスセンサの検出値を目標値に一致させるよう各気筒の空燃比をフィードバック制御する空燃比フィードバック制御を実行する空燃比フィードバック制御手段と、前記気筒別空燃比推定により推定された各気筒の気筒別空燃比に基づいて気筒毎に気筒間空燃比ばらつきを算出し、該気筒間空燃比ばらつきに基づいて前記空燃比フィードバック制御のフィードバックゲインを変化させる手段とを備えていることを特徴とする請求項1乃至14のいずれかに記載の内燃機関の制御装置。前記気筒別空燃比制御の実行中に、前記気筒別補正値に基づいて気筒毎に気筒別学習値を算出し、該気筒別学習値をバックアップ用メモリに記憶する気筒別学習手段を備えていることを特徴とする請求項15乃至18のいずれかに記載の内燃機関の制御装置。前記気筒別学習手段は、内燃機関の運転領域を複数に区分し、該区分した運転領域毎に前記気筒別学習値を算出して前記バックアップ用メモリに記憶することを特徴とする請求項20に記載の内燃機関の制御装置。前記気筒別学習手段は、前記気筒別補正値が所定値以上である場合にのみ前記気筒別学習値を更新することを特徴とする請求項20又は21に記載の内燃機関の制御装置。前記所定値は、前記気筒別空燃比推定により推定された全気筒の気筒別空燃比の平均値と気筒別空燃比との差が空気過剰率λで0.01以上となる場合の相当値に設定されていることを特徴とする請求項22に記載の内燃機関の制御装置。前記気筒別学習手段は、その都度の前記気筒別補正値に応じて前記気筒別学習値の1回当たりの更新幅を決定し、該更新幅だけ前記気筒別学習値を更新することを特徴とする請求項22又は23に記載の内燃機関の制御装置。前記気筒別学習手段は、前記気筒別学習値の更新周期を前記気筒別補正値の算出周期よりも長くすることを特徴とする請求項20乃至24のいずれかに記載の内燃機関の制御装置。各気筒に対する燃料噴射の都度、前記バックアップ用メモリに記憶された気筒別学習値を前記気筒別空燃比制御に反映させる学習値反映手段を備えていることを特徴とする請求項20乃至25のいずれかに記載の内燃機関の制御装置。前記気筒別学習手段は、内燃機関の運転領域において学習実行領域と学習非実行領域とを予め設定しておき、前記学習値反映手段は、前記学習非実行領域では前記学習実行領域内で最も前記学習非実行領域寄りの気筒別学習値を前記気筒別空燃比制御に反映させることを特徴とする請求項26に記載の内燃機関の制御装置。前記気筒別空燃比制御の実行条件が満たされない場合に、前記気筒別学習値の更新を禁止する手段を備えていることを特徴とする請求項20乃至27のいずれかに記載の内燃機関の制御装置。前記排出ガスセンサの検出値の変動量が所定の許容レベルを超えている場合に、前記気筒別学習値の更新を禁止する手段を備えていることを特徴とする請求項20乃至28のいずれかに記載の内燃機関の制御装置。前記気筒別空燃比制御手段は、内燃機関の気筒毎に所定の基準角度位置で前記気筒別補正値の演算を実行し、少なくとも内燃機関の負荷に応じて前記基準角度位置を決定することを特徴とする請求項15乃至29のいずれかに記載の内燃機関の制御装置。内燃機関の複数の気筒の排出ガスが合流して流れる排気集合部に排出ガスセンサを設置したシステムでは、排出ガスセンサに対する各気筒の燃焼ガスの当り具合の差、各気筒の排気マニホールドの長さの違い、気筒間の燃焼間隔のばらつき等によって、気筒毎に燃焼空燃比の変化に対する排出ガスセンサの出力の挙動が異なってくるため、各気筒の空燃比に対する排出ガスセンサの検出性に差ばらつきが生じることがある。しかし、上記特許文献1の技術では、各気筒の空燃比に対する排出ガスセンサの検出性のばらつきの影響を受けて、各気筒の空燃比を精度良く推定できない可能性がある。そこで、本発明が解決しようとする課題は、各気筒の空燃比に対する排出ガスセンサの検出性のばらつきの影響を受け難くすることができ、各気筒の空燃比を精度良く推定することができる内燃機関の制御装置を提供することにある。上記課題を解決するために、請求項1に係る発明は、内燃機関の複数の気筒の排出ガスが合流して流れる排気集合部に設置した排出ガスセンサの検出値に基づいて気筒別に空燃比を推定する気筒別空燃比推定を実行する気筒別空燃比推定手段を備えた内燃機関の制御装置において、気筒別空燃比推定手段は、少なくとも1つの気筒毎に燃焼空燃比を入力として排気集合部における流入ガスの空燃比以下集合部流入空燃比というを出力とする第1の排気系モデルと、集合部流入空燃比を入力として排出ガスセンサの検出値を出力とする第2の排気系モデルとを用い、排出ガスセンサの検出値と第2の排気系モデルとに基づいて集合部流入空燃比を推定する集合部流入空燃比推定手段と、この集合部流入空燃比推定手段で推定した集合部流入空燃比と第1の排気系モデルとに基づいて少なくとも1つの気筒毎に燃焼空燃比を推定する燃焼空燃比推定手段とを備え、これらの集合部流入空燃比推定手段及び燃焼空燃比推定手段により気筒別空燃比推定を実行するようにしたものである。この構成では、第1の排気系モデルで、各気筒の燃焼空燃比の変化に対する集合部流入空燃比の挙動を表現することができるため、第2の排気系モデルでは、各気筒の燃焼空燃比の変化に対する排出ガスセンサの検出値の挙動の違いを考慮することなく、集合部流入空燃比の変化に対する排出ガスセンサの検出値の挙動を表現すれば良く、これらの第1及び第2の排気系モデルによって各気筒の燃焼空燃比から排出ガスセンサの検出値までの挙動を精度良く表現することができるモデル化誤差を少なくすることができる。このように設定した第1及び第2の排気系モデルを用いて、排出ガスセンサの検出値と第2の排気系モデルとに基づいて集合部流入空燃比を推定し、その推定した集合部流入空燃比と第1の排気系モデルとに基づいて少なくとも1つの気筒毎に燃焼空燃比を推定することで、各気筒の空燃比に対する排出ガスセンサの検出性の差ばらつきの影響をあまり受けずに、各気筒の空燃比を精度良く推定することができる。この場合、請求項2のように、第1の排気系モデルは、各気筒の燃焼ガスの排出ガスセンサでの検出性の差を考慮して、排出ガスセンサでの検出に寄与する集合部流入空燃比を出力するように構築すると良い。このように各気筒の燃焼ガスの排出ガスセンサでの検出性の差を考慮して第1の排気系モデルを設定することで、第2の排気系モデルは、各気筒の燃焼ガスの排出ガスセンサでの検出性の差がないものとして設定することができ、精度良くモデル化することが可能となる。更に、請求項3のように、第2の排気系モデルは、集合部流入空燃比の履歴と排出ガスセンサの検出値の履歴にそれぞれ所定の重みを乗じて加算したものを排出ガスセンサの検出値として出力するように構築すると良い。このようにすれば、排気集合部におけるガスの混合に着目したモデルを用いることになるため、排気集合部のガス交換挙動を反映して気筒別空燃比気筒別の燃焼空燃比を算出することができる。また、排出ガスセンサの検出値をその過去の値から予測するモデル自己回帰モデルを用いることから、精度向上を図る上で履歴を増やすことを要しない。その結果、簡単なモデルを用いることでモデリングの複雑さを解消し、しかも気筒別空燃比を精度良く推定することができるようになる。また、請求項4のように、集合部流入空燃比推定手段は、第2の排気系モデルに基づくオブザーバにより集合部流入空燃比の推定を実施するようにしても良い。オブザーバを用いることにより対ノイズ性能を向上させることができ、気筒別空燃比の推定精度を向上させることができる。更に、請求項5のように、燃焼空燃比推定手段は、第1の排気系モデルの逆モデルにより燃焼空燃比の推定を実施するようにしても良い。このようにすれば、集合部流入空燃比から各気筒の燃焼空燃比を容易に推定することができる。また、請求項6のように、気筒別空燃比推定手段は、内燃機関の運転条件に応じて第1の排気系モデルを設定し、内燃機関の運転条件に応じて集合部流入空燃比推定手段を変更するようにしても良い。このようにすれば、内燃機関の運転条件が変化しても最適なモデルに基づいて気筒別空燃比を推定することができ、気筒別空燃比の推定精度を向上させることができる。更に、請求項7のように、気筒別空燃比推定手段は、排出ガスセンサの応答特性に応じて第1の排気系モデルを設定し、排出ガスセンサの応答特性に応じて集合部流入空燃比推定手段を変更するようにしても良い。このようにすれば、排出ガスセンサの応答特性が変化しても最適なモデルに基づいて気筒別空燃比を推定することができ、気筒別空燃比の推定精度を向上させることができる。また、請求項8のように、燃焼空燃比推定手段による燃焼空燃比の推定精度を判定する推定精度判定手段を備え、気筒別空燃比推定手段は、推定精度判定手段の判定結果に基づいて集合部流入空燃比推定手段と燃焼空燃比推定手段の少なくとも1つの内部パラメータを変更するようにしても良い。このようにすれば、燃焼空燃比の推定精度が悪化した場合に、集合部流入空燃比推定手段や燃焼空燃比推定手段の内部パラメータを予め設定した値に変更して燃焼空燃比の推定精度の改善を図ることが可能となる。実際の空燃比挙動では、気筒間で存在する個体差等により空燃比が変動し、その空燃比変動はクランク角に同期した所定パターンで現れるが、空燃比の変動パターンは、少なくとも内燃機関の負荷に応じて進角側又は遅角側にシフトするため図8参照、この空燃比変動により気筒別空燃比の推定精度が低下する可能性がある。このような事情を考慮して、請求項9のように、集合部流入空燃比推定手段は、内燃機関の所定の基準角度位置で排出ガスセンサの検出値に基づいて集合部流入空燃比を推定する演算を実行し、気筒別空燃比推定手段は、少なくとも内燃機関の負荷に応じて基準角度位置を決定するようにしても良い。このようにすれば、内燃機関の負荷に応じた適正なタイミングで排出ガスセンサの検出値に基づいた集合部流入空燃比の推定を実行することができ、集合部流入空燃比の推定精度を向上させることができる。また、請求項10のように、燃焼空燃比推定手段は、内燃機関の気筒毎に所定の基準角度位置で集合部流入空燃比に基づいて燃焼空燃比を推定する演算を実行し、気筒別空燃比推定手段は、少なくとも内燃機関の負荷に応じて基準角度位置を決定するようにしても良い。このようにすれば、内燃機関の負荷に応じた適正なタイミングで集合部流入空燃比に基づいた燃焼空燃比の推定を実行することができ、気筒別空燃比の推定精度を向上させることができる。請求項9と請求項10のいずれの場合も、例えば、少なくとも内燃機関の負荷吸気管圧力や吸入空気量等をパラメータとする基準角度位置のマップを参照して、内燃機関の負荷に応じた基準角度位置を決定すれば良い。更に、請求項11のように、気筒別空燃比推定手段は、内燃機関の排気バルブの開弁時期に応じて基準角度位置を補正するようにしても良い。このようにすれば、排気バルブの開弁時期に応じて各気筒の燃焼ガスが排気マニホールドに流入する時期が変化するのに対応して、基準角度位置を補正することができ、より適正なタイミングで集合部流入空燃比や燃焼空燃比の推定を実行することができ、集合部流入空燃比や燃焼空燃比の推定精度を向上させることができる。また、請求項12のように、気筒別空燃比推定手段は、排出ガスセンサの状態と内燃機関の運転状態のうちの少なくとも一方に基づいて気筒別空燃比推定の実行条件が成立しているか否かを判定し、該実行条件が成立しているときに気筒別空燃比推定を実行するようにすると良い。このようにすれば、気筒別空燃比推定の実行条件例えば、排出ガスセンサが使用可能であること、内燃機関の運転状態が所定の実行領域であること等が成立しているときに、気筒別空燃比推定を実行するようにできる。この場合、請求項13のように、気筒別空燃比推定の実行条件として、内燃機関の燃料カット中でなく且つ該燃料カット終了燃料噴射再開から所定期間以内でないという条件を含むようにしても良い。このようにすれば、燃料カット中や燃料カット終了から所定期間以内の期間つまり気筒別空燃比推定が困難になる期間や気筒別空燃比の推定値の信頼性が低下する期間に、気筒別空燃比推定を禁止することができ、気筒別空燃比の推定精度の悪化を未然に防止することができる。ところで、例えばV型8気筒の内燃機関のように、1つのバンクにおける各気筒の燃焼間隔が不等間隔であったり、各気筒の排気管長が不等長の排気系であったり、全気筒バンク毎の排気管が集合する部分よりも上流側で複数気筒の排気管が集合する排気系の内燃機関においては、全気筒の排出ガスが合流して流れる排気集合部に到達する前に各気筒の排出ガスが混じり合ったり、各気筒の排出ガスが燃焼順に排気集合部に到達しない可能性がある。このような内燃機関に本発明を適用する場合に、内燃機関の全気筒に対して1つの気筒別空燃比推定手段を備えた構成にすると、第1の排気系モデルにおいて気筒毎の排出ガスの挙動を精度良くモデル化できない可能性があり、第2の排気系モデルのモデル化の精度が低下する可能性がある。そこで、本発明は、内燃機関の全気筒に対して1つの気筒別空燃比推定手段を備えた構成に限定されず、請求項14のように、内燃機関の気筒群毎又は気筒毎に気筒別空燃比推定手段を備えた構成としても良い。このようにすれば、第1の排気系モデルだけでなく第2の排気系モデルも気筒群毎又は気筒毎の挙動の違いを考慮して設定することが可能となる。これにより、各気筒の燃焼間隔が不等間隔であったり、各気筒の排気管長が不等長の排気系であったり、全気筒バンク毎の排気管が集合する部分よりも上流側で複数気筒の排気管が集合する排気系の内燃機関の場合でも、気筒別空燃比を推定するためのモデルを不等間隔燃焼や不等長排気系の影響を考慮して気筒群毎又は気筒毎に別々にモデル化できるため、気筒別空燃比を精度良く推定することができる。また、請求項15のように、排出ガスセンサの検出値を目標値に一致させるよう各気筒の空燃比をフィードバック制御する空燃比フィードバック制御を実行する空燃比フィードバック制御手段を備えたシステムでは、気筒別空燃比推定により推定された各気筒の気筒別空燃比気筒別の燃焼空燃比に基づいて気筒毎に気筒間空燃比ばらつきを算出し、該気筒間空燃比ばらつきに基づいて気筒毎に気筒別補正値気筒別補正係数又は気筒別補正量を算出して、該気筒別補正値を用いて気筒毎に空燃比制御量を補正する気筒別空燃比制御を実行する気筒別空燃比制御手段を備えた構成としても良い。このようにすれば、各気筒の気筒間空燃比ばらつき空燃比の気筒間ばらつきを小さくすることができ、精度の良い空燃比制御を実現することができる。この場合、請求項16のように、気筒別空燃比制御手段は、気筒別空燃比推定により推定された全気筒の気筒別空燃比の平均値と気筒別空燃比との差から気筒間空燃比ばらつきを算出するようにすると良い。このようにすれば、全気筒の気筒別空燃比の平均値を基準にしてリッチ/リーンいずれの方向に空燃比がばらついているかに応じて各気筒の空燃比を気筒毎に補正することができる。また、請求項17のように、気筒別空燃比制御手段は、気筒別補正値の全気筒平均値を算出し、この全気筒平均値により各気筒の気筒別補正値を減算補正するようにしても良い。このようにすれば、通常の空燃比フィードバック制御との干渉を回避することができる。つまり、通常の空燃比フィードバック制御では、排気集合部における空燃比検出値排出ガスセンサの検出値を目標値に一致させるように空燃比制御を実施するのに対して、請求項17による気筒別空燃比制御では、各気筒の気筒間空燃比ばらつきを吸収するよう空燃比制御を実施することができる。更に、請求項18のように、気筒別空燃比制御手段は、所定条件下例えば気筒別空燃比推定の実行条件が成立している状態で気筒別空燃比推定が許可された場合又は気筒別空燃比推定が許可されてから所定期間が経過した場合に気筒別空燃比制御を許可するようにしても良い。このようにすれば、精度良く推定した気筒別空燃比に基づいて気筒別空燃比制御を実行することができ、気筒別空燃比制御の精度を向上させることができる。ところで、通常の空燃比フィードバック制御では、気筒間空燃比ばらつきが無い状態で最適にマッチングがとられているため、気筒間空燃比ばらつきによってモデル化誤差や外乱が大きくなると、制御の安定性が悪化する可能性がある。そこで、請求項19のように、排出ガスセンサの検出値を目標値に一致させるよう各気筒の空燃比をフィードバック制御する空燃比フィードバック制御を実行する空燃比フィードバック制御手段を備えたシステムでは、気筒別空燃比推定により推定された各気筒の気筒別空燃比に基づいて気筒毎に気筒間空燃比ばらつきを算出し、該気筒間空燃比ばらつきに基づいて空燃比フィードバック制御のフィードバックゲインを変化させるようにしても良い。例えば、気筒間空燃比ばらつきが所定値以上の場合に、空燃比フィードバック制御のフィードバックゲインを減補正する。このようにすれば、気筒間空燃比ばらつきを考慮した空燃比フィードバック制御を実現することができ、空燃比フィードバック制御の安定性を確保することができる。気筒別空燃比の推定値気筒別空燃比推定により推定された気筒別空燃比に基づいて気筒別空燃比制御を実行することで各気筒の気筒間空燃比ばらつきを小さくすることができるが、内燃機関の運転状態等によっては気筒別空燃比の推定値が得られない気筒別空燃比を推定できない又は気筒別空燃比の推定が困難になる場合もあると考えられる。そこで、請求項20のように、気筒別空燃比制御の実行中に、気筒別補正値に基づいて気筒毎に気筒別学習値を算出し、該気筒別学習値をバックアップ用メモリに記憶する気筒別学習手段を備えた構成としても良い。このようにすれば、気筒別空燃比の推定値が得られない場合でも、気筒別学習値を用いることで気筒別空燃比制御を実行することが可能となり、各気筒の気筒間空燃比ばらつきを小さくすることができる。この場合、請求項21のように、気筒別学習手段は、内燃機関の運転領域を複数に区分し、該区分した運転領域毎に気筒別学習値を算出してバックアップ用メモリに記憶するようにしても良い。このようにすれば、気筒別空燃比の推定値が得られない場合でも、高精度な気筒別空燃比制御の実現が可能となる。尚、複数に区分する内燃機関の運転領域のパラメータとしては、回転速度、負荷吸入空気量や吸気管圧力等、冷却水温、要求噴射量等のうちの1つ又は複数を用いることが考えられる。また、請求項22のように、気筒別学習手段は、気筒別補正値が所定値以上である場合にのみ気筒別学習値を更新するようにしても良い。このようにすれば、気筒別学習値の更新に不感帯を設けて、気筒別補正値が所定値未満であれば、気筒別学習値を更新しないようにすることができ、気筒別学習値の誤学習の防止を図ることができる。この場合、請求項23のように、所定値は、気筒別空燃比推定により推定された全気筒の気筒別空燃比の平均値と気筒別空燃比との差が空気過剰率λで0.01以上となる場合の相当値に設定すると良い。このようにすれば、空気過剰率λの偏差が0.01以上となる場合にのみ気筒別学習値を更新するようにできる。また、請求項24のように、気筒別学習手段は、その都度の気筒別補正値に応じて気筒別学習値の1回当たりの更新幅を決定し、該更新幅だけ気筒別学習値を更新するようにしても良い。具体的には、気筒別補正値が大きいほど気筒別学習値の更新幅を大きくする。このようにすれば、気筒別補正値が大きいつまり気筒間空燃比ばらつきが大きい場合でも、比較的短時間で気筒別学習値の学習を完了することができる。一方、気筒間空燃比ばらつきが小さく、気筒別補正値が小さい場合には、小刻みにすなわち慎重に気筒別学習値を更新することができ、気筒別学習値の学習精度を高めることができる。更に、請求項25のように、気筒別学習手段は、気筒別学習値の更新周期を気筒別補正値の算出周期よりも長くすると良い。このようにすれば、気筒別学習値の急な更新による誤学習を抑制することができる。また、請求項26のように、各気筒に対する燃料噴射の都度、バックアップ用メモリに記憶された気筒別学習値を気筒別空燃比制御に反映させる学習値反映手段を備えた構成としても良い。このようにすれば、気筒間空燃比ばらつきが小さい高精度な気筒別空燃比制御を実現することができる。この場合、請求項27のように、気筒別学習手段は、内燃機関の運転領域において学習実行領域と学習非実行領域とを予め設定しておき、学習値反映手段は、学習非実行領域では学習実行領域内で最も学習非実行領域寄りの気筒別学習値を気筒別空燃比制御に反映させるようにすると良い。このようにすれば、学習非実行領域例えば高回転高負荷運転領域でも気筒別学習値を気筒別空燃比制御に反映させることができる。また、請求項28のように、気筒別空燃比制御の実行条件が満たされない場合に、気筒別学習値の更新を禁止するようにしても良い。例えば、排出ガスセンサの活性前、排出ガスセンサの故障時など気筒別空燃比制御が困難な場合に、気筒別学習値の更新を禁止する。又は気筒別空燃比制御が可能であっても、冷却水温の低温時、高回転運転時や低負荷運転時など気筒別空燃比の推定精度が低下する場合に、気筒別学習値の更新を禁止する。このようにすれば、気筒別学習値の誤学習の防止を図ることができる。更に、請求項29のように、排出ガスセンサの検出値の変動量が所定の許容レベルを超えている場合に、気筒別学習値の更新を禁止するようにしても良い。このようにすれば、気筒別学習値の誤学習の防止を図ることができる。また、請求項30のように、気筒別空燃比制御手段は、内燃機関の気筒毎に所定の基準角度位置で気筒別補正値の演算を実行し、少なくとも内燃機関の負荷に応じて基準角度位置を決定するようにしても良い。このようにすれば、内燃機関の負荷に応じた適正なタイミングで気筒別補正値を演算して気筒別空燃比制御を実行することができ、気筒別空燃比制御の精度を向上させることができる。以下、本発明を実施するための形態を具体化した幾つかの実施例を説明する。本発明の実施例1を図1乃至図8に基づいて説明する。まず、図1に基づいてエンジン制御システム全体の概略構成を説明する。内燃機関である例えば直列4気筒のエンジン11の吸気管12の最上流部には、エアクリーナ13が設けられ、このエアクリーナ13の下流側に、吸入空気量を検出するエアフローメータ14が設けられている。このエアフローメータ14の下流側には、モータ等によって開度調節されるスロットルバルブ15と、このスロットルバルブ15の開度スロットル開度を検出するスロットル開度センサ16とが設けられている。更に、スロットルバルブ15の下流側には、サージタンク17が設けられ、このサージタンク17に、吸気管圧力を検出する吸気管圧力センサ18が設けられている。また、サージタンク17には、エンジン11の各気筒に空気を導入する吸気マニホールド19が設けられ、各気筒の吸気マニホールド19の吸気ポートの近傍に、それぞれ燃料を吸気ポートに向けて噴射する燃料噴射弁20が取り付けられている。エンジン運転中は、燃料タンク21内の燃料が燃料ポンプ22によりデリバリパイプ23に送られ、各気筒の噴射タイミング毎に各気筒の燃料噴射弁20から燃料が噴射される。デリバリパイプ23には、燃料圧力燃圧を検出する燃圧センサ24が取り付けられている。また、エンジン11には、吸気バルブ25と排気バルブ26のバルブタイミング開閉タイミングをそれぞれ変化させる可変バルブタイミング装置27,28が設けられている。更に、エンジン11には、吸気カム軸29と排気カム軸30の回転に同期してカム角信号を出力する吸気カム角センサ31と排気カム角センサ32が設けられていると共に、エンジン11のクランク軸の回転に同期して所定クランク角毎例えば30°CA毎にクランク角信号のパルスを出力するクランク角センサ33が設けられている。一方、エンジン11の排気管34のうちの各気筒の排出ガスが合流して流れる排気集合部34a各気筒の排気マニホールド35が集合する部分又はそれよりも下流側には、排出ガスの空燃比を検出する空燃比センサ36排出ガスセンサが設けられ、この空燃比センサ36の下流側に、排出ガス中のCO,HC,NOx等を浄化する三元触媒等の触媒37が設けられている。また、エンジン11のシリンダブロックには、冷却水温を検出する冷却水温センサ38が取り付けられている。これら各種センサの出力は、電子制御ユニット以下ECUと表記する39に入力される。このECU39は、マイクロコンピュータを主体として構成され、内蔵されたROM記憶媒体に記憶された各種のエンジン制御用のプログラムを実行することで、エンジン運転状態に応じて、燃料噴射量、点火時期、スロットル開度吸入空気量等を制御する。その際、ECU39は、所定の空燃比F/Bフィードバック制御実行条件が成立したきに、空燃比センサ36で検出した排出ガスの空燃比空燃比センサ36の検出値を目標空燃比空燃比の目標値に一致させるよう各気筒の空燃比例えば燃料噴射量をF/B制御する空燃比F/B制御を実行する空燃比フィードバック制御手段として機能する。具体的には、図2に示すように、まず、空燃比偏差算出部40で、検出空燃比空燃比センサ36で検出した空燃比と別途設定した目標空燃比との偏差を算出し、空燃比F/B制御部41で、検出空燃比と目標空燃比との偏差が小さくなるように空燃比補正係数を算出する。そして、噴射量算出部42で、エンジン回転速度やエンジン負荷吸気管負圧や吸入空気量等に基づいて算出されたベース噴射量や空燃比補正係数等に基づいて最終噴射量を算出し、その最終噴射量により各気筒の燃料噴射弁20を制御する。この制御の流れは従来の空燃比F/B制御と同様である。上述した空燃比F/B制御は、排気管34のうちの各気筒の排出ガスが合流して流れる排気集合部34a各気筒の排気マニホールド35が集合する部分又はそれよりも下流側で検出した空燃比情報に基づいて各気筒の燃料噴射量空燃比を制御するものであるが、現実には気筒毎に空燃比がばらつく。そこで、ECU39は、空燃比センサ36の検出値に基づいて各気筒の燃焼空燃比を気筒毎に推定する気筒別空燃比推定を実行する気筒別空燃比推定手段として機能すると共に、この気筒別空燃比推定により推定された各気筒の気筒別空燃比気筒別の燃焼空燃比に基づいて各気筒の空燃比制御量例えば燃料噴射量を気筒毎に補正する気筒別空燃比制御を実行する気筒別空燃比制御手段として機能する。具体的には、図2に示すように、まず、気筒別空燃比推定部43で、各気筒の気筒別空燃比を次のようにして推定する。各気筒の燃焼ガスの空燃比センサ36での検出性の差を考慮するために、気筒毎に空燃比センサ36での検出に寄与する集合部流入空燃比排気集合部34aにおける流入ガスの空燃比を、燃焼空燃比の履歴と空燃比センサ36での検出に寄与する集合部流入空燃比の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化した第1の排気系モデルと、空燃比センサ36の検出値を、空燃比センサ36での検出に寄与する集合部流入空燃比の履歴と空燃比センサ36の検出値の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化した第2の排気系モデルを予め設計し、これらの第1及び第2の排気系モデルに基づいて気筒別空燃比を推定する。ここで、図3を用いて、気筒別空燃比推定部43のより詳しい構成を説明する。気筒別空燃比推定部43では、第2の排気系モデルに基づいて設計される集合部流入空燃比推定部47集合部流入空燃比推定手段に空燃比センサ36の検出値yを入力することにより、集合部流入空燃比Xを推定出力し、第1の排気系モデルに基づいて設計される燃焼空燃比推定部48燃焼空燃比推定手段に推定された集合部流入空燃比Xを入力することにより、各気筒の燃焼空燃比φiを推定出力する。集合部流入空燃比推定部47では、第2の排気系モデルに基づくカルマンフィルタ型オブザーバを用いる。より具体的には、排気集合部34aにおけるガス交換のモデルを次の1式にて近似する。ys=b1×ub2×u-a1×ys-a2×ys...1ここで、ysは空燃比センサ36の検出値、uは集合部流入空燃比、a1,a2,b1,b2は定数である。排気系では、排気集合部34aにおけるガス流入及び混合の一次遅れ要素と、空燃比センサ36の応答による一次遅れ要素とが存在する。そこで、上記1式では、これらの一次遅れ要素を考慮して過去2回分の履歴を参照することとしている。尚、次数はこれに限定されず、適宜変更しても良く、例えば気筒数分の排気空燃比の存在を考慮して4次のモデルとして次の2式にて近似するようにしても良い。ys=b1×ub2×ub3×ub4×u-a1×ys-a2×ys-a3×ys-a4×ys...2ここで、a1~a4,b1~b4は定数である。上記1式を状態空間モデルに変換すると、次の3a、3b式が導き出される。X=AXBuW...3aY=CXDu...3bここで、A,B,C,Dはモデルのパラメータ、Yは空燃比センサ36の検出値、Xは状態変数としての集合部流入空燃比、Wはノイズである。更に、上記3a、3b式によりカルマンフィルタを設計すると、次の4式が得られる。X^=AX^L{Y-CX^}...4ここで、X^エックスハットは推定値としての集合部流入空燃比、Lはカルマンゲインである。X^の意味は、時間の推定値により次の時間の推定値を求めることを表す。以上のように、集合部流入空燃比推定部47をカルマンフィルタ型オブザーバにて構成することにより、燃焼サイクルの進行に伴い集合部流入空燃比を順次推定することができる。尚、図2の構成では、空燃比偏差検出空燃比と目標空燃比との偏差を気筒別空燃比推定部43の入力としており、上記4式において出力Yが空燃比偏差に置き換えられる。次に燃焼空燃比推定部48では、気筒毎の第1の排気系モデルの逆モデルを用いる。より具体的には、集合部流入空燃比を、各気筒の燃焼空燃比を入力とする一次遅れとして次の5式にて近似する。yc=bi×ui-ai×yc...5ここで、ycは集合部流入空燃比、uiは各気筒の燃焼空燃比、ai,biは定数である。上記5式を伝達関数表現に変換すると、次の6式が得られる。Gi=bi/z-ai...6ここで、Giは第i気筒に対応するモデルであり、zは差分方程式を伝達関数表現に変換する一般的なz変換におけるサンプリング周期分の時間シフトを表す演算子である。集合部流入空燃比推定部47で推定した集合部流入空燃比を上記6式の逆モデルに入力することにより、各気筒の推定空燃比φi^を算出する。尚、第1の排気系モデルは、上記に限定されず、例えば、Gi=miスカラのような静的なモデルであっても良い。この場合、Gi^-1=1/miとなり、計算負荷を軽減しつつ、各気筒の燃焼ガスの空燃比センサ36での検出性の振幅差を補償することができる。また、エンジン運転条件例えばエンジン回転速度やエンジン負荷等に応じて第1の排気系モデルを設定し、エンジン運転条件に応じて集合部流入空燃比推定部47を変更するようにしても良い。これにより、エンジン運転条件が変化しても最適なモデルに基づいて気筒別空燃比気筒別の燃焼空燃比を推定することができ、気筒別空燃比の推定精度を向上させることができる。更に、空燃比センサ36の応答特性に応じて第1の排気系モデルを設定し、空燃比センサ36の応答特性に応じて集合部流入空燃比推定部47を変更するようにしても良い。これにより、空燃比センサ36の応答特性が変化しても最適なモデルに基づいて気筒別空燃比を推定することができ、気筒別空燃比の推定精度を向上させることができる。また、燃焼空燃比推定部48による燃焼空燃比の推定精度を判定する推定精度判定部推定精度判定手段を設け、この推定精度判定部の判定結果に基づいて集合部流入空燃比推部47と燃焼空燃比推定部48の少なくとも1つの内部パラメータを変更するようにしても良い。これにより、燃焼空燃比の推定精度が悪化した場合に、集合部流入空燃比推定部47や燃焼空燃比推定部48の内部パラメータを予め設定した値に変更して燃焼空燃比の推定精度の改善を図ることが可能となる。以上のようにして、気筒別空燃比推定部43で各気筒の気筒別空燃比を推定した後、図2に示すように、基準空燃比算出部44で、各気筒の気筒別空燃比に基づいて基準空燃比を算出する。本実施例では、全気筒第1~第4気筒の気筒別空燃比の平均値を基準空燃比として算出し、新たに気筒別空燃比が算出される度に基準空燃比を更新する。この後、気筒別空燃比偏差算出部45で、気筒毎に気筒別空燃比と基準空燃比との偏差を気筒別空燃比偏差気筒間空燃比ばらつきとして算出することで各気筒の気筒別空燃比偏差を算出し、気筒別空燃比制御部46で、気筒毎に気筒別空燃比偏差に基づいて気筒別補正係数気筒別補正値を算出することで各気筒の気筒別補正係数を算出し、気筒毎に気筒別補正係数を用いて最終噴射量を補正することで各気筒の空燃比を補正する。ここで、図4を用いて、気筒別空燃比制御部46のより詳しい構成を説明する。気筒毎に算出された気筒別空燃比偏差図2の気筒別空燃比偏差算出部45の出力が、第1~第4の各気筒毎の補正係数算出部49~52にそれぞれ入力される。各補正係数算出部49~52では、気筒別空燃比偏差に基づいて気筒間の空燃比ばらつきが解消されるように、すなわち、該当する気筒の気筒別空燃比が基準空燃比に一致するように気筒別補正係数を算出する。この際、各気筒の補正係数算出部49~52で算出された気筒別補正係数は全て補正係数平均値算出部53に取り込まれ、第1気筒~第4気筒の気筒別補正係数の平均値が算出される。そして、その補正係数平均値だけ各気筒の気筒別補正係数が減量補正される。結果この補正後の気筒別補正係数により各気筒の最終噴射量が補正される。尚、補正後の気筒別補正係数に上下限ガードを設けるようにしても良く、この場合、上限ガード値と下限ガード値は、それぞれ全気筒で同一の値であっても良いし、気筒毎に設定した値であっても良く、更に、エンジン運転状態や空燃比センサ36の応答特性に応じて変化させるようにしても良い。また、気筒別空燃比偏差の今回値と前回値との差分に基づいて前述のように算出した補正後の気筒別補正係数に対して上下限ガードを設けた値を積算することにより最終的な気筒別補正係数を算出するようにしても良い。また、各気筒の補正係数算出部49~52において構成されるフィードバック制御器におけるフィードバックゲインは、全気筒で同一の値であっても良いし、気筒毎に設定した値であっても良く、更に、エンジン運転状態や空燃比センサ36の応答特性に応じて変化させるようにしても良い。以上説明した本実施例1の気筒別空燃比制御は、ECU39によって図5乃至図7の気筒別空燃比制御用の各ルーチンに従って実行される。以下、これらの各ルーチンの処理内容を説明する。[気筒別空燃比制御メインルーチン]図5に示す気筒別空燃比制御メインルーチンは、クランク角センサ33の出力パルスに同期して所定クランク角毎例えば30°CA毎に起動される。本ルーチンが起動されると、まず、101で、後述する図6の実行条件判定ルーチンを実行することで、実行フラグをONオンにセットするか又はOFFオフにリセットする。ここで、実行フラグのONは、気筒別空燃比推定及び気筒別空燃比制御の実行条件が成立していることを意味する。この後、ステップ102に進み、実行フラグがONであるか否かを判定し、実行フラグがONであるつまり気筒別空燃比推定及び気筒別空燃比制御の実行条件が成立していると判定された場合には、ステップ103に進み、気筒別空燃比推定及び気筒別空燃比制御の制御タイミングを決定する。この場合、エンジン負荷例えば吸気管負圧や吸入空気量等をパラメータとする基準クランク角度のマップを参照して、現在のエンジン負荷に応じた基準クランク角度を決定する。この基準クランク角度のマップは、低負荷域で基準クランク角度が遅角側にシフトされるように設定されている。つまり、低負荷域では排気流速が遅くなることが考えられ、故にその遅延分に合わせて基準クランク角度が設定され、その基準クランク角度に基づいて制御タイミングが決定されるようになっている。ここで、基準クランク角度は、気筒別空燃比推定に用いる空燃比センサ36の検出値を取得するための基準角度位置であり、これはエンジン負荷に応じて変動する。図8に示すように、空燃比センサ36の検出値は気筒間の個体差等により変動し、クランク角に同期した所定パターンとなる。この変動パターンはエンジン負荷が小さい場合に遅角側にシフトする。例えば図8のa,b,c,dの各タイミングで空燃比センサ36の検出値を取得したい場合に、負荷変動が生じると空燃比センサ36の検出値が本来欲しい値からずれるが、上記の通り基準クランク角度が可変設定されることにより最適なタイミングで空燃比センサ36の検出値が取得できる。但し、空燃比センサ36の検出値を取り込むこと例えばA/D変換すること自体は、必ずしも上記基準クランク角度のタイミングに限定されず、この基準クランク角度よりも短い間隔で実施される構成であっても良い。この後、ステップ104に進み、クランク角センサ33で検出したクランク角が基準クランク角度になったか否かによって、気筒別空燃比推定及び気筒別空燃比制御の制御タイミングであるか否かを判定し、制御タイミングであると判定される毎に、ステップ105に進み、後述する図7の気筒別空燃比推定及び気筒別空燃比制御ルーチンを実行する。一方、上記ステップ102で、実行フラグがOFFであるつまり気筒別空燃比推定及び気筒別空燃比制御の実行条件が不成立であると判定された場合には、ステップ106に進み、各気筒の気筒別補正係数FAFを全て1.0にセットする。この場合、気筒別空燃比推定及び気筒別空燃比制御は実行されない。[実行条件判定ルーチン]図6に示す実行条件判定ルーチンは、前記図5の気筒別空燃比制御メインルーチンのステップ101で実行されるサブルーチンである。本ルーチンが起動されると、まず、ステップ201で、空燃比センサ36が使用可能であるか否かを、例えば、空燃比センサ36が活性化していること、空燃比センサ36が正常であるフェイルしていないこと等を全て満たすか否かによって判定し、空燃比センサ36が使用可能であると判定されれば、ステップ202に進み、エンジン11の冷却水温が所定値例えば70°C以上であるか否かを判定する。上記ステップ201で空燃比センサ36が使用可能ではないと判定された場合、又は、上記ステップ202で冷却水温が所定値よりも低いと判定された場合には、気筒別空燃比推定及び気筒別空燃比制御の実行条件が不成立であると判断して、ステップ206に進み、実行フラグをOFFにリセットする。一方、上記ステップ201で空燃比センサ36が使用可能であると判定され、且つ、上記ステップ202で冷却水温が所定値以上であると判定された場合には、ステップ203に進み、エンジン回転速度とエンジン負荷例えば吸気管負圧や吸入空気量等とをパラメータとする運転領域マップを参照して、現在のエンジン運転状態が実行領域である否かを判定する。このとき、高回転域又は低負荷域では気筒別空燃比の推定が困難である又は推定値の信頼性が低いと考えられるため、高回転域又は低負荷域では気筒別空燃比制御が禁止されるように実行領域が設定されている。尚、実行領域を空燃比センサ36の応答特性の変化に応じて補正するようにしても良い。また、実行領域であっても空燃比センサ36の検出値の変化量の絶対値が所定値以上の場合は推定値の信頼性が低いと判断して、気筒別空燃比制御を禁止する構成としても良い。この後、ステップ204に進み、上記ステップ203の判定結果に基づいて現在のエンジン運転状態が実行領域であると判定されたか否かを判別し、現在のエンジン運転状態が実行領域であると判定された場合には、気筒別空燃比推定及び気筒別空燃比制御の実行条件が成立していると判断して、プ205に進み、実行フラグをONにセットする。一方、上記ステップ204で、現在のエンジン運転状態が実行領域ではないと判定された場合には、気筒別空燃比推定及び気筒別空燃比制御の実行条件が不成立であると判断して、ステップ206に進み、実行フラグをOFFにリセットする。以上の処理により、気筒別空燃比推定及び気筒別空燃比制御の実行条件例えば、空燃比センサ36が使用可能であること、エンジン運転状態が実行領域であること等が成立しているときに、気筒別空燃比推定及び気筒別空燃比制御を実行するようにできる。尚、気筒別空燃比推定及び気筒別空燃比制御の実行条件として、エンジン11の燃料カット中でなく且つ該燃料カット終了燃料噴射再開から所定期間以内でないという条件を含むようにしても良い。このようにすれば、燃料カット中や燃料カット終了から所定期間以内の期間つまり気筒別空燃比推定が困難になる期間や気筒別空燃比の推定値の信頼性が低下する期間に、気筒別空燃比推定を禁止することができ、気筒別空燃比の推定精度の悪化を未然に防止することができる。[気筒別空燃比推定及び気筒別空燃比制御ルーチン]図7に示す気筒別空燃比推定及び気筒別空燃比制御ルーチンは、前記図5の気筒別空燃比制御メインルーチンのステップ105で実行されるサブルーチンであり、基準クランク角度になる毎気筒別空燃比推定及び気筒別空燃比制御の制御タイミングになる毎に起動される。本ルーチンが起動されると、まず、ステップ301で、空燃比センサ36の検出値を読み込んだ後、ステップ302に進み、空燃比センサ36の検出値に基づいて集合部流入空燃比を推定し、この集合部流入空燃比に基づいて各気筒の気筒別空燃比気筒別の燃焼空燃比を推定する。気筒別空燃比の推定手法については既述の通りである。この際、検出空燃比空燃比センサ36の検出値に対してバンドパスフィルタ等の信号処理を施し、該信号処理後の検出空燃比に基づいて各気筒の気筒別空燃比を推定するようにしても良い。本実施例では、基準クランク角度になる毎に空燃比センサ36の検出値に基づいて集合部流入空燃比を推定する演算を実行するが、エンジン負荷に応じて基準クランク角度を決定するようにしたので、エンジン負荷に応じた適正なタイミングで空燃比センサ36の検出値に基づいた集合部流入空燃比の推定を実行することができ、集合部流入空燃比の推定精度を向上させることができる。また、基準クランク角度になる毎に集合部流入空燃比に基づいて該当する気筒の燃焼空燃比を推定する演算を実行するが、エンジン負荷に応じて基準クランク角度を決定するようにしたので、エンジン負荷に応じた適正なタイミングで集合部流入空燃比に基づいた燃焼空燃比の推定を実行することができ、気筒別空燃比の推定精度を向上させることができる。尚、排気バルブ26の開弁時期に応じて基準クランク角度を補正するようにしても良い。このようにすれば、排気バルブ26の開弁時期に応じて各気筒の燃焼ガスが排気マニホールド35に流入する時期が変化するのに対応して、基準クランク角度を補正することができ、より適正なタイミングで集合部流入空燃比や燃焼空燃比の推定を実行することができ、集合部流入空燃比や燃焼空燃比の推定精度を向上させることができる。この後、ステップ303に進み、推定した気筒別空燃比の全気筒分本実施例では過去4気筒分の平均値を算出し、その平均値を基準空燃比とする。この後、ステップ304に進み、気筒毎に気筒別空燃比と基準空燃比との偏差を気筒別空燃比偏差として算出することで各気筒の気筒別空燃比偏差を算出し、気筒毎に気筒別空燃比偏差に基づいて気筒別補正係数を算出することで各気筒の気筒別補正係数を算出する。この際、前記図4で説明したように、全気筒の気筒別補正係数が各々算出されると共に全気筒平均値が算出され、気筒別補正係数から全気筒平均値を減算した値が、最終的に気筒別補正係数とされるようになっている。そして、気筒毎に気筒別補正係数を用いて最終噴射量を補正することで各気筒の空燃比を補正する。本実施例では、基準クランク角度になる毎に気筒別空燃比に基づいて該当する気筒の気筒別補正係数の演算を実行するが、エンジン負荷に応じて基準クランク角度を決定するようにしたので、エンジン負荷に応じた適正なタイミングで気筒別補正係数を演算して気筒別空燃比制御を実行することができ、気筒別空燃比制御の精度を向上させることができる。尚、気筒別空燃比と基準空燃比との偏差に対して不感帯を設けた後、気筒毎に気筒別補正係数を算出するようにしても良い。この場合、例えば、気筒別空燃比と基準空燃比との偏差の絶対値が所定の微小値より小さい場合に、前記偏差を0として気筒別補正係数を算出することにより、過度な補正を軽減して制御の安定性を向上させることが可能となる。この際、不感帯の幅は、全気筒で同一の値であっても良いし、気筒毎に設定した値であっても良く、更に、エンジン運転状態や空燃比センサ36の応答特性に応じて変化させるようにしても良い。以上説明した本実施例1では、各気筒の燃焼ガスの空燃比センサ36での検出性の差を考慮して、気筒毎に空燃比センサ36での検出に寄与する集合部流入空燃比排気集合部34aにおける流入ガスの空燃比を、燃焼空燃比の履歴と空燃比センサ36での検出に寄与する集合部流入空燃比の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化した第1の排気系モデルと、空燃比センサ36の検出値を、空燃比センサ36での検出に寄与する集合部流入空燃比の履歴と空燃比センサ36の検出値の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化した第2の排気系モデルを予め設計し、第2の排気系モデルに基づいて設計される集合部流入空燃比推定部47に空燃比センサ36の検出値を入力することにより、集合部流入空燃比を推定出力し、第1の排気系モデルに基づいて設計される燃焼空燃比推定部48に推定された集合部流入空燃比を入力することにより、各気筒の燃焼空燃比を推定出力する。これにより、各気筒の燃焼ガスの空燃比センサ36での検出性の差を第1の排気系モデルに基づく燃焼空燃比推定部48で適切に補償することができ、第2の排気系モデルに基づく集合部流入空燃比推定部47での推定精度を向上させることができるため、各気筒の空燃比に対する空燃比センサ36の検出性の差ばらつきの影響をあまり受けずに、各気筒の空燃比を精度良く推定することができる。その結果、空燃比制御の制御性や各気筒の空燃比に基づく気筒間空燃比インバランス状態の検出性を向上させることができる。また、本実施例1では、第1の排気系モデルは、各気筒の燃焼ガスの空燃比センサ36での検出性の差を考慮して、空燃比センサ36での検出に寄与する集合部流入空燃比を出力するように構築したので、第2の排気系モデルは、各気筒の燃焼ガスの空燃比センサ36での検出性の差がないものとして設定することができ、精度良くモデル化することが可能となる。更に、本実施例1では、第2の排気系モデルは、集合部流入空燃比の履歴と空燃比センサ36の検出値の履歴にそれぞれ所定の重みを乗じて加算したものを空燃比センサ36の検出値として出力するように構築したので、排気集合部34aにおけるガスの混合に着目したモデルを用いることになり、排気集合部34aのガス交換挙動を反映して気筒別空燃比気筒別の燃焼空燃比を算出することができる。また、空燃比センサ36の検出値をその過去の値から予測するモデル自己回帰モデルを用いることから、精度向上を図る上で履歴を増やすことを要しない。その結果、簡単なモデルを用いることでモデリングの複雑さを解消し、しかも気筒別空燃比を精度良く推定することができるようになる。また、本実施例1では、第2の排気系モデルに基づくオブザーバにより集合部流入空燃比の推定を実施するようにしたので、オブザーバを用いることにより対ノイズ性能を向上させることができ、気筒別空燃比の推定精度を向上させることができる。更に、第1の排気系モデルの逆モデルにより燃焼空燃比の推定を実施するようにしたので、集合部流入空燃比から各気筒の燃焼空燃比を容易に推定することができる。また、本実施例1では、気筒別空燃比推定により推定された各気筒の気筒別空燃比に基づいて気筒毎に気筒間空燃比偏差気筒間空燃比ばらつきを算出し、該気筒間空燃比偏差に基づいて気筒毎に気筒別補正係数を算出して、該気筒別補正係数を用いて気筒毎に燃料噴射量を補正する気筒別空燃比制御を実行するようにしたので、各気筒の気筒間空燃比ばらつき空燃比の気筒間ばらつきを小さくすることができ、精度の良い空燃比制御を実現することができる。その際、本実施例1では、気筒別空燃比推定により推定された全気筒の気筒別空燃比の平均値を基準空燃比とし、気筒別空燃比と基準空燃比との偏差を気筒間空燃比偏差として算出するようにしたので、全気筒の気筒別空燃比の平均値を基準にしてリッチ/リーンいずれの方向に空燃比がばらついているかに応じて各気筒の空燃比を気筒毎に補正することができる。また、本実施例1では、気筒別補正係数の全気筒平均値を算出し、この全気筒平均値だけ各気筒の気筒別補正係数を減算補正するようにしたので、通常の空燃比F/B制御との干渉を回避することができる。つまり、通常の空燃比F/B制御では、排気集合部34aにおける空燃比検出値空燃比センサ36の検出値を目標値に一致させるように空燃比制御を実施するのに対して、気筒別空燃比制御では、各気筒の気筒間空燃比ばらつきを吸収するよう空燃比制御を実施することができる。更に、本実施例1では、所定条件下気筒別空燃比推定の実行条件が成立している状態で気筒別空燃比推定が許可された場合に気筒別空燃比制御を許可するようにしたので、精度良く推定した気筒別空燃比に基づいて気筒別空燃比制御を実行することができ、気筒別空燃比制御の精度を向上させることができる。尚、所定条件下で気筒別空燃比推定が許可されてから所定期間が経過した場合に気筒別空燃比制御を許可するようにしても良い。ところで、通常の空燃比F/B制御では、気筒間空燃比ばらつきが無い状態で最適にマッチングがとられているため、気筒間空燃比ばらつきによってモデル化誤差や外乱が大きくなると、制御の安定性が悪化する可能性がある。そこで、気筒別空燃比推定により推定された各気筒の気筒別空燃比に基づいて気筒毎に気筒間空燃比偏差気筒間空燃比ばらつきを算出し、該気筒間空燃比偏差に基づいて空燃比F/B制御のF/Bゲインを変化させるようにしても良い。例えば、気筒間空燃比偏差が所定値以上の場合に、空燃比F/B制御のF/Bゲインを減補正する。このようにすれば、気筒間空燃比ばらつきを考慮した空燃比F/B制御を実現することができ、空燃比F/B制御の安定性を確保することができる。次に、図9乃至図13を用いて本発明の実施例2を説明する。但し、前記実施例1と実質的に同一部分については説明を省略又は簡略化し、主として前記実施例1と異なる部分について説明する。前記実施例1では、空燃比センサ36の検出値に基づいて気筒別空燃比を推定し、該気筒別空燃比推定値に基づいて気筒間の空燃比ばらつきを小さくするように気筒別空燃比制御を実施するようにしたが、エンジン運転状態等によっては気筒別空燃比の推定値が得られない気筒別空燃比を推定できない又は気筒別空燃比の推定が困難になる場合もあると考えられる。気筒別空燃比の推定値が得られないと、気筒別空燃比制御を実施できなくなるため、気筒間の空燃比ばらつきが解消できないことが懸念される。例えば、エンジン始動直後や、高回転又は低負荷運転時にはこうした事態が生じる。そこで、本実施例2では、ECU39により後述する図9乃至図11の各ルーチンを実行することで、気筒別空燃比制御の実行中に、気筒別補正係数に基づいて気筒毎に気筒別学習値を算出し、その気筒別学習値をスタンバイRAMやEEPROM等のバックアップ用メモリECU39の電源オフ中でも記憶データを保持する書き換え可能なメモリに記憶する気筒別学習手段として機能すると共に、各気筒に対する燃料噴射の都度、バックアップ用メモリに記憶された気筒別学習値を気筒別空燃比制御に反映させる学習値反映手段として機能する。以下、本実施例2でECU39が実行する図9乃至図11の各ルーチンの処理内容を説明する。[気筒別空燃比推定及び気筒別空燃比制御ルーチン]図9に示す気筒別空燃比推定及び気筒別空燃比制御ルーチンは、前記実施例1で説明した図7のルーチンに置き換えて実行される。尚、本実施例2で実行する図9のルーチンのステップ401~404の処理は、図7のルーチンのステップ301~304の処理と同じである。本ルーチンが起動されると、まず、ステップ401で、空燃比センサ36の検出値を読み込んだ後、ステップ402に進み、空燃比センサ36の検出値に基づいて集合部流入空燃比を推定し、この集合部流入空燃比に基づいて各気筒の気筒別空燃比気筒別の燃焼空燃比を推定する。この後、ステップ403に進み、推定した気筒別空燃比の全気筒分の平均値を基準空燃比として算出した後、ステップ404に進み、気筒毎に気筒別空燃比と基準空燃比との偏差を気筒別空燃比偏差として算出することで各気筒の気筒別空燃比偏差を算出し、気筒毎に気筒別空燃比偏差に基づいて気筒別補正係数を算出することで各気筒の気筒別補正係数を算出する。この後、ステップ405に進み、後述する図10の気筒別学習値更新ルーチンを実行することで、気筒別補正係数に基づいて気筒毎に気筒別学習値を算出し、その気筒別学習値をバックアップ用メモリステップに記憶する。この後、ステップ406に進み、後述する図11の気筒別学習値反映ルーチンを実行することで、各気筒に対する燃料噴射の都度、バックアップ用メモリに記憶された気筒別学習値を気筒別空燃比制御に反映させる。[気筒別学習値更新ルーチン]図10に示す気筒別学習値更新ルーチンは、前記図9の気筒別空燃比推定及び気筒別空燃比制御ルーチンのステップ405で実行されるサブルーチンである。本ルーチンが起動されると、まず、ステップ501で、所定の学習実行条件が成立しているか否かを、例えば、次の~の条件を全て満たすか否かによって判定する。気筒別空燃比制御の実行中であるつまり気筒別空燃比制御の実行条件が成立していること冷却水温が所定温度以上例えばマイナス10°C以上であること空燃比変動量空燃比センサ36の検出値の変動量が所定値以下であり、空燃比安定条件が成立していることここで、上記の条件について説明する。検出空燃比空燃比センサ36の検出値の今回値と前回値との差ΔA/F1絶対値が所定値TH1未満であり、且つ、検出空燃比の今回値と720°CA前値との差ΔA/F2絶対値が所定値TH2未満である場合に、上記の空燃比安定条件が成立した判定することとしている。上記~の条件を全て満たせば、学習実行条件が成立するが、上記~の条件のうちいずれか1つでも満たさない条件があれば、学習実行条件が不成立となる。このステップ501で、学習実行条件が成立していると判定された場合には気筒別学習値の更新が許可されるが、学習実行条件が不成立と判定された場合には気筒別学習値の更新が禁止される。尚、上記~の条件以外にも、高回転時や低負荷時など、気筒別空燃比の推定精度が低下すると考えられる条件を設定し、かかる条件下で気筒別学習値の更新を禁止するようにしても良い。以上のように学習実行条件を規定することで、気筒別学習値の誤学習の防止が可能となる。このステップ501で、学習実行条件が成立していると判定された場合には、ステップ502に進み、例えばエンジン回転速度やエンジン負荷をパラメータとして今回学習を実施する学習領域を決定する。その後、ステップ503に進み、気筒毎に気筒別補正係数のなまし値を算出する。具体的には、次式を用いて補正係数なまし値を算出する。但し、Kはなまし係数であり、例えばK=0.25である。補正係数なまし値=前回のなまし値K×今回の補正係数-前回のなまし値この後、ステップ504に進み、今回の処理が気筒別学習値の更新タイミングであるか否かを判定する。この更新タイミングは、気筒別学習値の更新周期が少なくとも気筒別補正係数の算出周期よりも長くなるよう設定されるものであれば良く、例えば、タイマ等に設定された所定時間が経過した時に更新タイミングである旨判別される。これにより、気筒別学習値の急な更新による誤学習を抑制することができる。このステップ504で、気筒別学習値の更新タイミングであると判定される毎に、ステップ505に進み、前記算出した気筒毎の補正係数なまし値の絶対値が所定値THA以上であるか否かを判定する。この所定値THAは、気筒別空燃比推定値の全気筒平均値と気筒別空燃比との差が空気過剰率λで0.01以上となる場合の相当値に設定されている。このステップ505で、補正係数なまし値絶対値≧THAであると判定された場合には、ステップ506に進み、学習値更新量を算出する。このとき、学習値更新量は、例えば図12の関係を用い、その時の補正係数なまし値に基づいて算出され、基本的に補正係数なまし値が大きいほど学習値更新量が大きい値とされる。尚、図12の関係では、補正係数なまし値<aでは学習値更新量が0とされ、このaは前記ステップ505の所定値THAに相当する。この後、ステップ507に進み、気筒別学習値の更新処理を実施する。すなわち、気筒別学習値の前回値に学習値更新量を加算し、その結果を新たな気筒別学習値とする。一方、上記ステップ505で、補正係数なまし値絶対値<THAであると判定された場合には、ステップ508に進み、学習完了フラグをONにする。この後、ステップ509に進み、気筒別学習値と学習完了フラグをスタンバイRAMやEEPROM等のバックアップ用メモリに記憶する。このとき、気筒別学習値及び学習完了フラグは、複数に区分された運転領域毎に記憶される。その概要を図13に表す。図13では、エンジン運転領域を負荷レベル例えば吸気管圧力PM毎に領域0,領域1,領域2,領域3,領域4に区分しており、各領域0~4毎に気筒別学習値及び学習完了ラグが記憶されることを表している。領域0は学習未完了、領域1~4は学習完了の状態であり、領域1~4の気筒別学習値をそれぞれLRN1,LRN2,LRN3,LRN4としている。また、各領域0~4の領域中心負荷、すなわち領域を代表する負荷を、それぞれPM0,PM1,PM2,PM3,PM4としている。領域区分には、負荷以外にも、エンジン回転速度、冷却水温、吸入空気量、要求噴射量等を適宜用いることができる。[気筒別学習値反映ルーチン]図11に示す気筒別学習値反映ルーチンは、前記図9の気筒別空燃比推定及び気筒別空燃比制御ルーチンのステップ406で実行されるサブルーチンである。本ルーチンが起動されると、まず、ステップ601で、その時のエンジン運転状態に基づいて学習反映値を算出する。このとき、学習反映値は、前記図13のように運転領域毎に記憶保持された気筒別学習値を用い、それら領域間の気筒別学習値の線形補間により求められる。学習反映値の求め方を図13を用いて説明する。一例として、その時の負荷がPMaである場合、領域2,3の気筒別学習値LRN2,LRN3と、領域2,3の中心負荷であるPM2,PM3とを用い、次の7式により学習反映値FLRNを算出する。尚、予め設定された領域外学習非実行領域では、領域境界部に相当する気筒別学習値を用いて学習反映値が算出されると良い。例えば、図13において、領域0~4が学習実行領域であり、その外側が学習非実行領域であれば、領域0,4の気筒別学習値を用いて学習非実行領域の学習反映値を算出する。これにより、例えば高回転高負荷領域等の学習非実行領域であっても気筒別学習値の反映が可能となる。この後、ステップ602に進み、前記算出した学習反映値を最終の燃料噴射量TAUに反映させる。具体的には、基本噴射量TP、空燃比補正係数FAF、気筒別補正係数FK、学習反映値FLRN、その他の補正係数FALLを用いて、燃料噴射量TAUを次式により算出する。TAU=TP×FAF×FK×FLRN×FALLなおこのとき、FAF補正と学習補正とが干渉しないように、空燃比補正係数FAFを学習反映値FLRN分だけ減補正すると良い。以上説明した本実施例2では、気筒別空燃比制御の実行中に、気筒別補正係数に基づいて気筒毎に気筒別学習値を算出し、その気筒別学習値をバックアップ用メモリに記憶するようにしたので、気筒別空燃比の推定値が得られない場合でも、気筒別学習値を用いることで気筒別空燃比制御を実行することが可能となり、各気筒の気筒間空燃比ばらつきを小さくすることができる。しかも、本実施例2では、エンジン11の運転領域を複数に区分して、その区分した運転領域毎に気筒別学習値を算出してバックアップ用メモリに記憶するようにしたので、気筒別空燃比の推定値が得られない場合でも、高精度な気筒別空燃比制御の実現が可能となる。また、本実施例2では、気筒別補正係数が所定値THA以上である場合にのみ気筒別学習値を更新するようにしたので、気筒別学習値の更新に不感帯を設けて、気筒別補正値が所定値THA未満であれば、気筒別学習値を更新しないようにすることができ、気筒別学習値の誤学習の防止を図ることができる。更に、本実施例2では、気筒別学習値の1回当たりの更新幅学習値更新量がその都度の気筒別補正係数に応じて可変設定されるため、気筒別補正係数が大きいすなわち気筒間における空燃比ばらつきが大きい場合であっても、比較的短時間で学習を完了することができる。また、気筒間における空燃比ばらつきが解消され、気筒別補正係数が小さくなる場合には、小刻みにすなわち慎重に気筒別学習値を更新することができるため、学習の精度を高めることができる。また、本実施例2では、バックアップ用メモリに記憶された気筒別学習値に基づいて学習反映値を算出し、その学習反映値を気筒別空燃比制御に反映させるようにしたので、気筒間空燃比ばらつきが小さい高精度な気筒別空燃比制御を実現することができる。尚、上記各実施例1,2では、エンジン11の全気筒に対して1つの気筒別空燃比推定部43を備えた構成図2参照としたが、これに限定されず、例えば、図14に示すように、エンジン11の気筒毎又は気筒群毎に気筒別空燃比推定部43を備えた構成としても良い。このようにすれば、第1の排気系モデルだけでなく第2の排気系モデルも気筒毎又は気筒群毎の挙動の違いを考慮して設定することが可能となる。これにより、各気筒の燃焼間隔が不等間隔であったり、各気筒の排気管長が不等長の排気系であったり、全気筒バンク毎の排気管が集合する部分よりも上流側で複数気筒の排気管が集合する排気系の内燃機関の場合でも、気筒別空燃比を推定するためのモデルを不等間隔燃焼や不等長排気系の影響を考慮して気筒毎又は気筒群毎に別々にモデル化できるため、気筒別空燃比を精度良く推定することができる。また、上記各実施例1,2では、1つの気筒毎に第1の排気系モデルを設定するようにしたが、これに限定されず、複数の気筒毎に第1の排気系モデルを設定するようにしても良い。また、上記各実施例1,2では、排出ガスセンサとして、排出ガスの空燃比を検出する空燃比センサを用いたシステムに本発明を適用したが、これに限定されず、排出ガスセンサとして、排出ガスの空燃比のリッチ/リーンを検出する酸素センサを用いたシステムに本発明を適用しても良い。更に、上記各実施例1,2では、各気筒の排出ガスが合流して流れる排気集合部のうちの触媒の上流側に配置した排出ガスセンサの検出値に基づいて気筒別空燃比推定を実行するようにしたが、これに限定されず、排気集合部のうちの他の位置例えば、触媒の下流側や排気タービンの下流側等に配置した排出ガスセンサの検出値に基づいて気筒別空燃比推定を実行するようにしても良い。また、上記各実施例1,2では、気筒別空燃比制御の際に、各気筒の気筒別空燃比に基づいて気筒毎に燃料噴射量を補正するようにしたが、これに限定されず、例えば、各気筒の気筒別空燃比に基づいて気筒毎に吸入空気量を補正するようにしても良く、何れにしても空燃比が精度良くF/B制御されるものであれば良い。その他、本発明は、図1に示すような吸気ポート噴射式エンジンに限定されず、筒内噴射式エンジンや、吸気ポート噴射用の燃料噴射弁と筒内噴射用の燃料噴射弁の両方を備えたデュアル噴射式のエンジンにも適用して実施できる。また、複数の気筒ずつで排気通路が集合される構成とした多気筒内燃機関であれば、任意の型式のエンジンに本発明を適用できる。例えば、6気筒エンジンにおいて3気筒ずつ二つに分けて排気系が構成される場合、各排気系の排気集合部にそれぞれ排出ガスセンサを設定して、各排気系でそれぞれ排出ガスセンサの検出値に基づいて気筒別空燃比推定や気筒別空燃比制御を実行するようにしても良い。"