"多気筒内燃機関における気筒間空燃比のばらつき度合いを表すパラメータを検出する検出手段と、前記内燃機関の排気通路に設けられた触媒の吸蔵酸素量を計測する計測手段と、前記検出手段により所定値以上のパラメータが検出されたとき、前記計測手段により計測された吸蔵酸素量に応じて、空燃比をリッチ化するためのリッチ制御を実行または停止するリッチ制御手段と、を備えることを特徴とする内燃機関の制御装置。前記リッチ制御手段は、前記吸蔵酸素量が所定の下限しきい値を下回らぬよう、前記リッチ制御を実行または停止することを特徴とする請求項1に記載の内燃機関の制御装置。前記リッチ制御手段は、前記リッチ制御の実行中に前記吸蔵酸素量が減少して所定の下限しきい値に達した時に前記リッチ制御を停止することを特徴とする請求項1または2に記載の内燃機関の制御装置。前記リッチ制御手段は、前記リッチ制御の停止中に前記吸蔵酸素量が増加して所定の上限しきい値に達した時に前記リッチ制御を再開することを特徴とする請求項1~3のいずれか一項に記載の内燃機関の制御装置。前記リッチ制御手段は、前記リッチ制御の実行中、前記計測手段により計測された吸蔵酸素量に応じてリッチ化度合いを変更することを特徴とする請求項1~4のいずれか一項に記載の内燃機関の制御装置。前記リッチ制御手段は、前記検出手段により所定値以上のパラメータが検出されたとき、その原因となった気筒を特定し、且つ、前記触媒の上流側に設けられた空燃比センサに対する前記気筒からの排気ガスのガス当たり強度に応じて、前記リッチ制御を停止する吸蔵酸素量の値を変更することを特徴とする請求項1~5のいずれか一項に記載の内燃機関の制御装置。前記リッチ制御手段は、少なくとも前記内燃機関の負荷が所定値以上であるときに前記リッチ制御を実行することを特徴とする請求項1~6のいずれか一項に記載の内燃機関の制御装置。前記触媒の上流側に設けられた空燃比センサと、前記空燃比センサにより検出された検出空燃比を所定の目標空燃比に一致させるよう空燃比フィードバック制御を実行する空燃比制御手段と、をさらに備えることを特徴とする請求項1~7のいずれか一項に記載の内燃機関の制御装置。前記リッチ制御手段は、リッチ制御実行時に前記空燃比フィードバック制御における目標空燃比または燃料噴射量をリッチ化することを特徴とする請求項8に記載の内燃機関の制御装置。ところで、前述の空燃比フィードバック制御は典型的に触媒前に設置された空燃比センサ、すなわち触媒前センサの出力に基づいて行われる。また、多気筒内燃機関においてある1気筒の空燃比が大きくリッチ側にずれると、このリッチずれ気筒から排出される水素の影響で、触媒前センサの出力が真の空燃比に対しリッチ側にずれる特許文献1参照。こうした状態で空燃比フィードバック制御が通常通り行われると、実際の排気ガスが目標空燃比に対しリーン側にずれてしまい、NOx排出量の増加が懸念される。よってこの対策として、気筒間空燃比ばらつきが検出された場合には、空燃比をリッチ化し、実際の排気空燃比のリーンずれを抑制ないし補償することが考えられる。しかし、本発明者らの研究結果によれば、かかるリッチ化を継続した場合にリッチ化が過剰となり、逆にHC排出量が増加する場合があることが判明した。そこで本発明は、上記事情に鑑みて創案され、その目的は、気筒間空燃比がばらついて空燃比のリッチ化を実行する場合の排気エミッション悪化を抑制し得る内燃機関の制御装置を提供することにある。本発明の一の態様によれば、多気筒内燃機関における気筒間空燃比のばらつき度合いを表すパラメータを検出する検出手段と、前記内燃機関の排気通路に設けられた触媒の吸蔵酸素量を計測する計測手段と、前記検出手段により所定値以上のパラメータが検出されたとき、前記計測手段により計測された吸蔵酸素量に応じて、空燃比をリッチ化するためのリッチ制御を実行または停止するリッチ制御手段と、を備えることを特徴とする内燃機関の制御装置が提供される。好ましくは、前記リッチ制御手段は、前記吸蔵酸素量が所定の下限しきい値を下回らぬよう、前記リッチ制御を実行または停止する。好ましくは、前記リッチ制御手段は、前記リッチ制御の実行中に前記吸蔵酸素量が減少して所定の下限しきい値に達した時に前記リッチ制御を停止する。好ましくは、前記リッチ制御手段は、前記リッチ制御の停止中に前記吸蔵酸素量が増加して所定の上限しきい値に達した時に前記リッチ制御を再開する。好ましくは、前記リッチ制御手段は、前記リッチ制御の実行中、前記計測手段により計測された吸蔵酸素量に応じてリッチ化度合いを変更する。好ましくは、前記リッチ制御手段は、前記検出手段により所定値以上のパラメータが検出されたとき、その原因となった気筒を特定し、且つ、前記触媒の上流側に設けられた空燃比センサに対する前記気筒からの排気ガスのガス当たり強度に応じて、前記リッチ制御を停止する吸蔵酸素量の値を変更する。好ましくは、前記リッチ制御手段は、少なくとも前記内燃機関の負荷が所定値以上であるときに前記リッチ制御を実行する。好ましくは、前記内燃機関の制御装置は、前記触媒の上流側に設けられた空燃比センサと、前記空燃比センサにより検出された検出空燃比を所定の目標空燃比に一致させるよう空燃比フィードバック制御を実行する空燃比制御手段と、をさらに備える。好ましくは、前記リッチ制御手段は、リッチ制御実行時に前記空燃比フィードバック制御における目標空燃比または燃料噴射量をリッチ化する。本発明によれば、気筒間空燃比がばらついて空燃比のリッチ化を実行する場合の排気エミッション悪化を抑制することができるという、優れた効果が発揮される。以下、本発明の実施形態を添付図面に基づき説明する。図1は、本実施形態に係る内燃機関の概略図である。図示されるように、内燃機関エンジン1は、シリンダブロック2に形成された燃焼室3の内部で燃料および空気の混合気を燃焼させ、燃焼室3内でピストンを往復移動させることにより動力を発生する。本実施形態の内燃機関1は自動車に搭載された多気筒内燃機関であり、より具体的には直列4気筒火花点火式内燃機関である。内燃機関1は1~4気筒を備える。但し気筒数、用途、形式等は特に限定されない。図示しないが、内燃機関1のシリンダヘッドには吸気ポートを開閉する吸気弁と、排気ポートを開閉する排気弁とが気筒ごとに配設されており、各吸気弁および各排気弁はカムシャフトによって開閉させられる。シリンダヘッドの頂部には、燃焼室3内の混合気に点火するための点火プラグ7が気筒ごとに取り付けられている。各気筒の吸気ポートは気筒毎の枝管4を介して吸気集合室であるサージタンク8に接続されている。サージタンク8の上流側には吸気管13が接続されており、吸気管13の上流端にはエアクリーナ9が設けられている。そして吸気管13には、上流側から順に、吸入空気量を検出するためのエアフローメータ5と、電子制御式のスロットルバルブ10とが組み込まれている。吸気ポート、枝管、サージタンク8及び吸気管13により吸気通路が形成される。吸気通路、特に吸気ポート内に燃料を噴射するインジェクタ燃料噴射弁12が気筒ごとに配設されている。インジェクタ12から噴射された燃料は吸入空気と混合されて混合気をなし、この混合気が吸気弁の開弁時に燃焼室3に吸入され、ピストンで圧縮され、点火プラグ7で点火燃焼させられる。一方、各気筒の排気ポートは排気マニフォールド14に接続される。排気マニフォールド14は、その上流部をなす気筒毎の枝管14aと、その下流部をなす排気集合部14bとからなる。排気集合部14bの下流側には排気管6が接続されている。排気ポート、排気マニフォールド14及び排気管6により排気通路が形成される。排気管6の上流側と下流側にはそれぞれ三元触媒からなる触媒、すなわち上流触媒11と下流触媒19が直列に取り付けられている。これら触媒11,19は酸素吸蔵能O2ストレージ能を有する。すなわち、触媒11,19は、排気ガスの空燃比がストイキ理論空燃比、例えばA/F=14.6より大きいリーンなときに排気ガス中の過剰酸素を吸蔵し、NOxを還元する。また触媒11,19は、排気ガスの空燃比がストイキより小さいリッチなときに吸蔵酸素を放出し、HC,COを酸化する。上流触媒11の上流側及び下流側にそれぞれ排気ガスの空燃比を検出するための第1及び第2の空燃比センサ、即ち触媒前センサ17及び触媒後センサ18が設置されている。これら触媒前センサ17及び触媒後センサ18は、上流触媒11の直前及び直後の位置に設置され、排気中の酸素濃度に基づいて空燃比を検出する。このように上流触媒11の上流側の排気合流部に単一の触媒前センサ17が設置されている。上流触媒11が本発明にいう触媒に該当し、触媒前センサ17が本発明にいう空燃比センサに該当する。上述の点火プラグ7、スロットルバルブ10及びインジェクタ12等は、制御手段としての電子制御ユニット以下ECUと称す20に電気的に接続されている。ECU20は、何れも図示されないCPU、ROM、RAM、入出力ポート、および記憶装置等を含むものである。またECU20には、図示されるように、前述のエアフローメータ5、触媒前センサ17、触媒後センサ18のほか、内燃機関1のクランク角を検出するクランク角センサ16、アクセル開度を検出するアクセル開度センサ15、その他の各種センサが図示されないA/D変換器等を介して電気的に接続されている。ECU20は、各種センサの検出値等に基づいて、所望の出力が得られるように、点火プラグ7、スロットルバルブ10、インジェクタ12等を制御し、点火時期、燃料噴射量、燃料噴射時期、スロットル開度等を制御する。スロットルバルブ10にはスロットル開度センサ図示せずが設けられ、スロットル開度センサからの信号がECU20に送られる。ECU20は、通常、アクセル開度に応じて定まる目標スロットル開度に、スロットルバルブ10の開度スロットル開度をフィードバック制御する。ECU20は、エアフローメータ5からの信号に基づき、単位時間当たりの吸入空気の量すなわち吸入空気量を検出する。そしてECU20は、検出したアクセル開度、スロットル開度および吸入空気量の少なくとも一つに基づき、エンジン1の負荷を検出する。ECU20は、クランク角センサ16からのクランクパルス信号に基づき、クランク角自体を検出すると共にエンジン1の回転数を検出する。ここで回転数とは単位時間当たりの回転数のことをいい、回転速度と同義である。本実施形態では1分間当たりの回転数rpmのことをいう。触媒前センサ17は所謂広域空燃比センサからなり、比較的広範囲に亘る空燃比を連続的に検出可能である。図2に触媒前センサ17の出力特性を示す。図示するように、触媒前センサ17は、排気空燃比に比例した大きさの電圧信号Vfを出力する。排気空燃比がストイキであるときの出力電圧はVreff例えば約3.3Vである。他方、触媒後センサ18は所謂O2センサからなり、ストイキを境に出力値が急変する特性を持つ。図2に触媒後センサ18の出力特性を示す。図示するように、排気空燃比がストイキであるときの出力電圧、すなわちストイキ相当値はVrefr例えば0.45Vである。触媒後センサ18の出力電圧は所定の範囲例えば0~1V内で変化する。排気空燃比がストイキよりリーンのとき、触媒後センサの出力電圧はストイキ相当値Vrefrより低くなり、排気空燃比がストイキよりリッチのとき、触媒後センサの出力電圧はストイキ相当値Vrefrより高くなる。上流触媒11及び下流触媒19は、それぞれに流入する排気ガスの空燃比A/Fがストイキ近傍のときに排気中の有害成分であるNOx,HCおよびCOを同時に浄化する。この三者を同時に高効率で浄化できる空燃比の幅ウィンドウは比較的狭い。そこで通常運転時、上流触媒11に流入する排気ガスの空燃比がストイキ近傍に制御されるように、空燃比フィードバック制御ストイキ制御がECU20により実行される。この空燃比フィードバック制御は、触媒前センサ17によって検出された排気空燃比を所定の目標空燃比であるストイキに一致させるような主空燃比フィードバック制御と、触媒後センサ18によって検出された排気空燃比をストイキに一致させるような補助空燃比フィードバック制御とからなる。さて、例えば全気筒のうちの一部の気筒特に1気筒に何等かの異常が発生し、気筒間に空燃比のばらつきインバランス:imbalanceが発生することがある。例えば1気筒のインジェクタ12が故障し、1気筒の燃料噴射量が相対的に多くなる結果、1気筒の空燃比が他の2、3及び4気筒の空燃比よりも大きくリッチ側にずれる場合等である。このときでも前述の主空燃比フィードバック制御により比較的大きな補正量を与えれば、触媒前センサ17に供給されるトータルガスの空燃比をストイキに制御できる場合がある。しかし、気筒別に見ると、1気筒がストイキより大きくリッチ、2、3及び4気筒がストイキより若干リーンであり、全体のバランスとしてストイキとなっているに過ぎず、エミッション上好ましくないことは明らかである。そこで本実施形態では、かかる気筒間空燃比ばらつきが発生した場合でも排気エミッションを悪化させぬような対策が施されている。図3に示すように、気筒間空燃比ばらつきが発生すると、1エンジンサイクル=720°CA間での排気空燃比の変動が大きくなる。Bの空燃比線図a,b,cはそれぞればらつき無し、1気筒のみ20のインバランス割合でリッチずれ、及び1気筒のみ50のインバランス割合でリッチずれの場合の、触媒前センサ17による検出空燃比A/Fを示す。見られるように、ばらつき度合いが大きくなるほど空燃比変動の振幅が大きくなる。ここでインバランス割合とは、気筒間空燃比のばらつき度合いを表す一つのパラメータである。即ち、インバランス割合とは、全気筒のうちある1気筒のみが燃料噴射量ズレを起こしている場合に、その燃料噴射量ズレを起こしている気筒インバランス気筒の燃料噴射量がどれくらいの割合で、燃料噴射量ズレを起こしていない気筒バランス気筒の燃料噴射量即ち基準噴射量からズレているかを示す値である。インバランス割合をIB、インバランス気筒の燃料噴射量をQib、バランス気筒の燃料噴射量即ち基準噴射量をQsとすると、IB=Qib-Qs/Qsで表される。インバランス割合IBの絶対値が大きいほど、インバランス気筒のバランス気筒に対する燃料噴射量ズレが大きく、空燃比ばらつき度合いは大きい。図3から理解されるように、インバランス割合が大きいほど、すなわち気筒間空燃比のばらつき度合いが大きいほど、触媒前センサ17の出力変動が大きくなる。よってこの特性を利用し、本実施形態では、触媒前センサ17の出力変動度合いを表す出力変動パラメータXを、気筒間空燃比ばらつき度合いを表すパラメータとして用い、且つ出力変動パラメータXを検出する。なお、前述のインバランス割合は説明目的のために用いる。[出力変動パラメータの検出]以下に出力変動パラメータXの検出方法を説明する。図4は図3のU部に相当する拡大図であり、特に1エンジンサイクル内の触媒前センサ出力の変動を簡略的に示す。触媒前センサ出力としては、触媒前センサ17の出力電圧Vfを空燃比A/Fに換算した値を用いる。但し触媒前センサ17の出力電圧Vfを直接用いることも可能である。図4Bに示すように、ECU20は、1エンジンサイクル内において、所定のサンプル周期τ単位時間、例えば4ms毎に、触媒前センサ出力A/Fの値を取得する。そして今回のタイミング第2のタイミングで取得した値A/Fnと、前回のタイミング第1のタイミングで取得した値A/Fn1との差ΔA/Fnの絶対値を次式1により求める。この差ΔA/Fnは今回のタイミングにおける微分値あるいは傾きと言い換えることができる。最も単純には、この差ΔA/Fnが触媒前センサ出力の変動を表す。変動度合いが大きくなるほど空燃比線図の傾きが大きくなり、差ΔA/Fnが大きくなるからである。そこで所定の1タイミングにおける差ΔA/Fnの値を出力変動パラメータとすることができる。但し、本実施形態では精度向上のため、複数の差ΔA/Fnの平均値を出力変動パラメータとする。本実施形態では、1エンジンサイクルの間、各タイミング毎に差ΔA/Fnを積算し、最終積算値をサンプル数Nで除し、1エンジンサイクル内の差ΔA/Fnの平均値を求める。そしてさらに、Mエンジンサイクル分例えばM=100だけ差ΔA/Fnの平均値を積算し、最終積算値をサイクル数Mで除し、Mエンジンサイクル内の差ΔA/Fnの平均値を求める。こうして求められた最終的な平均値を出力変動パラメータXとする。触媒前センサ出力の変動度合いが大きくなるほど出力変動パラメータXは大きくなる。なお、触媒前センサ出力A/Fは増加する場合と減少する場合とがあるので、これら各場合の一方についてだけ上記差ΔA/Fnあるいはその平均値を求め、これを出力変動パラメータとしても良い。特に1気筒のみリッチずれの場合、当該1気筒に対応した排気ガスを触媒前センサが受けた時にその出力が急速にリッチ側に変化すなわち急減するので、減少側のみの値をリッチずれ検出のために用いることも可能である。もっとも、これに限定されず、増加側の値のみを用いることも可能である。また、触媒前センサ出力の変動度合いに相関する如何なる値をも出力変動パラメータとすることができる。例えば、1エンジンサイクル内における触媒前センサ出力の最大ピークと最小ピークの差所謂ピークトゥピークpeaktopeak、または2階微分値の最大ピークまたは最小ピークの絶対値に基づいて、出力変動パラメータを算出することもできる。触媒前センサ出力の変動度合いが大きいほど、触媒前センサ出力の最大ピークと最小ピークの差は大きくなり、また2階微分値の最大ピークまたは最小ピークの絶対値も大きくなるからである。図5には、インバランス割合IBと出力変動パラメータXの関係を示す。図示されるように、インバランス割合IBと出力変動パラメータXの間には強い相関関係があり、インバランス割合IBの絶対値が増加するほど空燃比変動パラメータXも増加する。なお、出力変動パラメータXの検出値に基づいて気筒間空燃比ばらつき異常を検出することが可能である。すなわち、出力変動パラメータXの検出値が所定の異常判定値以上であればばらつき異常ありと判定し、出力変動パラメータXの検出値が異常判定値より小さければばらつき異常なし、即ち正常と判定することができる。[リッチ制御]ところで、本実施形態においては、所定値以上の出力変動パラメータXが検出されたとき、言い換えれば気筒間空燃比のばらつき度合いが大きいことが検出されたとき、所定条件を満たすことを条件として、空燃比をリッチ化するためのリッチ制御が実行される。1気筒のみの空燃比がストイキから大きくリッチ側にずれると、このリッチずれ気筒から比較的多量の水素が排出される。そしてこの水素の影響で、触媒前センサ17の出力が真の空燃比に対しリッチ側にずれる特許文献1参照。こうした状態でストイキ制御が通常通り行われると、実際のトータルガスの空燃比がストイキに対しリーン側にずれてしまい、NOx排出量の増加が懸念される。よってこの対策として前述のリッチ制御が行われる。これにより実際のトータルガスのリーンずれを抑制ないし補償し、NOx排出量の増加を抑制することができる。以下にリッチ制御の詳細を説明する。まず第1の例として、リッチ制御を行う際には、前述の空燃比フィードバック制御における目標空燃比A/Ftがリッチ化される。すなわち、通常の空燃比フィードバック制御の目標空燃比A/Ftはストイキ=14.6である。これに対し、リッチ制御の目標空燃比A/Ftrはストイキよりリッチな小さな値である。リッチ制御の目標空燃比A/Ftrは次式2により算出される。αは、目標空燃比を補正するためのリッチ補正量である。このリッチ補正量αは、一定値例えば0.4であってもよいが、本実施形態では少なくとも負荷KL、具体的には負荷KLと回転数Neと出力変動パラメータXに応じて、所定範囲例えば0.2~0.6内で可変設定される。図6には負荷KLおよび回転数Neとリッチ補正量αの関係を示す。負荷KLおよび回転数Neが大きいほど大きなリッチ補正量αが設定される。負荷KLおよび回転数Neが大きいほど、リッチずれ気筒からの水素排出量が多くなり、実際のトータルガスのリーンずれ量が大きくなる。よってこの特性に合わせて、負荷KLおよび回転数Neが大きいほど大きなリッチ補正量αを設定し、リッチ化度合いを大きくしている。図7には出力変動パラメータXとリッチ補正量αの関係を示す。出力変動パラメータXが大きいほど大きなリッチ補正量αが設定される。出力変動パラメータXが大きいほど、リッチずれ気筒におけるリッチずれ度合いが増し、リッチずれ気筒からの水素排出量が多くなり、実際のトータルガスのリーンずれ量が大きくなる。よってこの特性に合わせて、出力変動パラメータXが大きいほど大きなリッチ補正量αを設定し、リッチ化度合いを大きくしている。なお、リッチ補正量αは、実際には、上記の関係を予め定めたマップ関数でもよい。以下同様を利用して各検出値に基づき設定される。次に第2の例を説明する。この第2の例では、リッチ制御を行う際、前述の空燃比フィードバック制御における燃料噴射量がリッチ化される。すなわち、通常の空燃比フィードバック制御において、インジェクタ12から噴射される最終的な燃料噴射量Qfnlは例えば次式3から算出される。Qbは基本噴射量であり、例えばエアフローメータ5により検出された吸入空気量Gaに基づき、式:Qb=Ga/14.6から算出される。Kfは主空燃比フィードバック補正量であり、触媒前センサ17により検出された空燃比検出空燃比とストイキとの差に基づいて算出される。Krは補助空燃比フィードバック補正量であり、触媒後センサ18の出力に基づき算出される学習値である。他方、リッチ制御において、インジェクタ12から噴射される最終的な燃料噴射量Qfnlは次式3’から算出される。βは、燃料噴射量を補正するためのリッチ補正量であり、この式から明らかなように、燃料噴射量は単純にβだけ増量される。前記同様、リッチ補正量βは、一定値であってもよいが、本実施形態では少なくとも負荷KL、具体的には負荷KLと回転数Neと出力変動パラメータXに応じて、所定範囲内で可変設定される。負荷KLおよび回転数Neが大きいほど大きなリッチ補正量αを設定する点、および出力変動パラメータXが大きいほど大きなリッチ補正量αを設定する点も前記同様である。また、予め定められたマップを利用してリッチ補正量αを設定する点も前記同様である。上記の第1及び第2の例を含め、リッチ制御は、少なくともエンジンの負荷KLが所定値以上であるときに実行される。特に本実施形態において、リッチ制御は、エンジンの負荷KLと回転数Neがそれぞれ所定値以上であるときに実行される。排気ガス中の水素による触媒前センサ出力のリッチずれ、およびこのリッチずれによるNOx排出量増加の問題は、エンジンの負荷KLが所定値以上である運転領域、特にエンジンの負荷KLと回転数Neがそれぞれ所定値以上である運転領域において起こる。よってこのような運転領域でのみリッチ制御を行い、その他の運転領域ではリッチ制御を行わない。こうすることで、リッチ制御を行う運転領域を必要な運転領域に限定し、不必要なリッチ制御によるエミッション悪化を防止できる。以下、リッチ制御を行う運転領域をリッチ化領域という。また特に言及しない限りリッチ制御は第1の例によるものとする。[リッチ制御の実行/停止]ところで、本発明者らの研究結果によれば、リッチ化領域においてリッチ制御を継続した場合、リッチ化が過剰となり、HC排出量が増加する場合があることが判明した。図8は、本発明を適用しない比較例を示す。Aはエンジン回転数Ne、Bはエンジン負荷KL、Cはリッチフラグ、Dは目標空燃比A/Ft、EはHC排出量をそれぞれ示す。リッチフラグとは、エンジン運転状態がリッチ化領域に入るとオンされ、エンジン運転状態がリッチ化領域から外れるとオフされるフラグである。Eに示すHC排出量は、上流触媒11から排出されたHCの量を意味する。図示するように、時刻t1で回転数Neが所定値Ne1以上となり、時刻t2で負荷KLが所定値KL1以上となっている。時刻t2でエンジン運転状態がリッチ化領域に入り、リッチフラグがオンされ、リッチ制御が開始されている。リッチ制御は、時刻t3で負荷KLが所定値KL1未満となるまで、すなわちエンジン運転状態がリッチ化領域から外れるまで、継続されている。なおその後の時刻t4で回転数Neも所定値Ne1未満となっている。この比較例では、リッチフラグのオンオフとリッチ制御の実行停止とがそれぞれ対応している。リッチ制御中には、空燃比フィードバック制御における目標空燃比がリッチ化され、目標空燃比がストイキよりリッチな値とされている。リッチ制御継続中の後半部分において、HC排出量が所定の許容上限値であるしきい値Cxを超えている。これは、リッチ化が過剰であり、その結果HC排出量が増加したことを意味する。特に本発明者らは、HC排出量増加の原因が、上流触媒11が吸蔵酸素を放出し尽くしているのになおリッチ制御を継続する点にあることを見出した。すなわち、リッチ制御におけるリッチ化は、適合を通じて定常的に適正と思われるレベルでなされている。しかし実際には、運転状態が常時変化することも相俟って、リッチ化領域のような比較的高負荷の領域では、リッチ化のない場合であっても排気空燃比がリッチになりがちである。すると、上流触媒11における吸蔵酸素が次第に放出されて減少し、やがてHCを処理するのに不十分な量となる。こうなった時点でHC排出量が増加することとなる。そこでこれらの知見に基づき、本実施形態は、上流触媒11の吸蔵酸素量を計測あるいはモニタし、この吸蔵酸素量に応じてリッチ制御を実行または停止するものである。以下この点につき詳細に述べる。図9は、本発明を適用した本実施形態の実施例を示す。Aはエンジン回転数Ne、Bはエンジン負荷KL、Cはリッチフラグ、DはOSAフラグ、Eは吸蔵酸素量OSA、Fは目標空燃比A/Ft、GはHC排出量をそれぞれ示す。吸蔵酸素量OSAとは、上流触媒11に吸蔵されている酸素の量を意味する。またOSAフラグは、吸蔵酸素量OSAの値に応じてオンオフされるフラグである。本実施例においては、リッチフラグのオンオフとリッチ制御の実行停止とが必ずしも対応していない。すなわち、リッチフラグオンOSAフラグオンのときにリッチ制御が実行され、それ以外のときにはリッチ制御が停止される。リッチ制御停止時すなわち通常時には前述のストイキ制御が実行される。時刻t2から時刻t3までの間でエンジン運転状態がリッチ化領域に入っている点、およびこの間でリッチフラグがオンとなっている点は比較例と同様である。但し図示する実施例においては、時刻t2から時刻t3までの間で吸蔵酸素量OSAに応じてOSAフラグがオンオフされ、リッチ制御が実行停止されている。つまり、比較例ではリッチ制御が継続されるような回転負荷条件であっても、本実施例ではリッチ制御が一時的に停止されることがあり、またリッチ制御が断続的に行われることがある。リッチ制御は、吸蔵酸素量OSAの計測値が所定の下限しきい値A1を下回らないように実行または停止される。具体的には、リッチ制御の実行中に吸蔵酸素量OSAの計測値が減少し、下限しきい値A1に達した時時刻t21,t23,t25、OSAフラグがオフされ、リッチ制御が停止されるすなわちリッチカットが実行される。また、リッチ制御の停止中に吸蔵酸素量OSAの計測値が増加し、所定の上限しきい値A2に達した時時刻t22,t24、OSAフラグがオンされ、リッチ制御が再開される。下限しきい値A1は例えば100g、上限しきい値A2は例えば300gである。このように、吸蔵酸素量OSAが下限しきい値A1を下回らないようにリッチ制御が実行または停止され、吸蔵酸素量OSAが所定の下限しきい値A1に達した時にリッチ制御を停止するので、過剰なリッチ化を防止し、上流触媒11に吸蔵された酸素を放出し尽くす前にリッチ制御を停止することができる。そして時刻t2から時刻t3までの間の後半部分においても、Gに示すように、HC排出量がしきい値Cxを超えることを防止できる。よって上流触媒11が、HCを処理できなくなるような酸素不足状態になることを回避し、HC排出量の増加を抑制することができる。この観点から下限しきい値A1は、上流触媒11のHC処理能力を最低限確保できるような値とされる。また、吸蔵酸素量OSAが上限しきい値A2に達した時にリッチ制御を再開するので、リッチ制御の本来の目的であるNOx抑制も達成できる。[吸蔵酸素量の計測]ここで、上流触媒11の吸蔵酸素量OSAの計測について説明する。まず、リッチ制御時以外の空燃比フィードバック制御時には、次式4により、所定の演算周期毎の吸蔵酸素量dOSAが算出される。AF1は、通常時仮想空燃比と称し、ストイキ14.6よりリーンな値例えば15.0とされる。またBも適合により定められる係数で、例えば3.77とされる。Gaは吸入空気量である。通常時仮想空燃比AF1は、空燃比フィードバック制御実行時における実際の排気空燃比の値を反映するように設定される。すなわち、1気筒のみリッチずれが生じているときには、触媒前センサ17の検出空燃比がストイキとなるよう制御されているにも拘わらず、実際の排気空燃比がストイキよりリーンとなっている。またそもそも触媒前センサ17の検出空燃比自体が不正確である。そこで本実施形態では空燃比フィードバック制御実行時の実際の排気空燃比を固定値AF1=15.0として、演算周期毎の吸蔵酸素量dOSAを算出している。但し、触媒前センサ17の検出空燃比に基づいて通常時仮想空燃比AF1を設定してもよい。この演算周期毎の吸蔵酸素量dOSAを演算周期毎に積算することにより、各演算時期の吸蔵酸素量OSAが算出ないし計測される。式4においてAF1-14.6>0なので、空燃比フィードバック制御時には吸蔵酸素量OSAの値が増加していく。図9のt21~t22、t23~t24、t25~を参照のこと。次に、リッチ制御実行時には、次式5により、演算周期毎の吸蔵酸素量dOSAが算出される。AF2は、リッチ時仮想空燃比と称し、ストイキ14.6よりリッチな値、特にリッチ制御の目標空燃比A/Ftrと等しい値とされている。リッチ時仮想空燃比AF2は、一定値例えば14.2であってもよいが、本実施形態では少なくとも負荷KL、具体的には負荷KLと回転数Neと出力変動パラメータXに応じて、所定範囲例えば14.0~14.4内で可変設される。このリッチ時仮想空燃比AF2も、リッチ制御実行時における実際の排気空燃比の値を反映するように設定されている。式5においてAF2-14.6<0なので、リッチ制御時には吸蔵酸素量OSAの値が減少していく。図9のt2~t21、t22~t23、t24~t25を参照のこと。なお、燃料噴射を停止するフューエルカットF/C制御の実行時には、次式6により、演算周期毎の吸蔵酸素量dOSAが算出される。式6から明らかなように、F/C制御時には吸蔵酸素量OSAの値が急速に増加する。図9の図示例についてさらに詳述する。まず、リッチフラグがオンになる時刻t2より前では、通常の空燃比フィードバック制御が実行されている。このとき、吸蔵酸素量OSAの値は徐々に増加し、所定の最大酸素量A3に達するとその値に保持される。つまり吸蔵酸素量OSAの計測値は最大酸素量A3を上回らない。最大酸素量A3は例えば500gである。この状態から時刻t2でリッチフラグがオンになると、吸蔵酸素量OSAの値が下限しきい値A1より大きいのでOSAフラグがオンされ詳しくは後述、リッチ制御が開始される。リッチ制御開始後、吸蔵酸素量OSAの値は徐々に減少していき、時刻t21で下限しきい値A1に達する。するとOSAフラグがオフされ、リッチ制御が停止され、通常の空燃比フィードバック制御が開始される。リッチ制御停止後、吸蔵酸素量OSAの値は徐々に増加していき、時刻t22で上限しきい値A2に達する。するとOSAフラグがオンされ、通常の空燃比フィードバック制御が停止され、リッチ制御が再開される。このように、OSAフラグのオンオフにはヒステリシス特性があり、吸蔵酸素量OSAの減少時にOSA=A1となった時にフラグオン、吸蔵酸素量OSAの増加時にOSA=A2となった時にフラグオフされる。このようなリッチ制御の実行停止を繰り返すうちに、時刻t3でリッチフラグがオフとなる。すると同時にOSAフラグもオフされ、通常の空燃比フィードバック制御が実行される。一方、吸蔵酸素量OSAの計測はリッチフラグがオフのときにも実行されている。時刻t3の後、吸蔵酸素量OSAの値は徐々に増加し、やがて最大酸素量A3に達してその値に保持される。[出力変動パラメータ検出ルーチン]次に、図10を用いて、出力変動パラメータXを検出するためのルーチンを説明する。このルーチンはECU20により所定の演算周期τ毎に繰り返し実行される。まずステップS101では、検出を行うのに適した所定の前提条件が成立しているか否かが判断される。この前提条件は、例えば次の各条件が成立したときに成立する。1エンジンの暖機が終了している。ECU20は、水温センサ図示せずで検出された水温が所定値例えば75°C以上であるとき暖機終了と判断する。2触媒前センサ17および触媒後センサ18が活性化している。ECU20は、両センサのインピーダンスがそれぞれ所定の活性温度相当の値になっているとき、両センサが活性化していると判断する。3上流触媒11および下流触媒19が活性化している。ECU20は、エンジン運転状態に基づき推定した上流触媒11および下流触媒19の温度がそれぞれ所定の活性温度相当の値になっているとき、両触媒が活性化したと判断する。4エンジンが定常運転中である。ECU20は、エンジンの回転数Neと負荷KLの所定時間内の変動幅が所定値以内のとき、エンジンが定常運転中と判断する。5通常の空燃比フィードバック制御の実行中である。前提条件が成立していない場合にはルーチンが終了される。他方、前提条件が成立している場合には、ステップS102において、今回のタイミングにおける触媒前センサ出力A/Fnが取得される。なお触媒前センサ出力A/Fnは触媒前センサ17の出力電圧Vfを空燃比に換算した値である。次に、ステップS103において、今回の演算時期における出力差ΔA/Fnが前式1より算出される。次に、ステップS104において、出力差ΔA/Fnが積算され、すなわち今回のタイミングにおける積算出力差ΣΔA/Fnが次式7より算出される。次に、ステップS105において、1エンジンサイクルが終了したか否かが判断される。終了してなければルーチンが終了され、終了した場合にはステップS106に進む。ステップS106では、今回の1エンジンサイクル終了時点における最終的な積算出力差ΣΔA/FNがサンプル数Nで除して平均化され、平均出力差Rmが算出される。そしてステップS107において、平均出力差Rmが積算され、すなわち今回のエンジンサイクル終了時における積算平均出力差ΣRmが次式8より算出される。次に、ステップS108において、Mエンジンサイクル但しMは2以上の整数が終了したか否かが判断される。終了してなければルーチンが終了され、終了した場合にはステップS109に進む。ステップS109では、Mエンジンサイクル終了時点における最終的な積算平均出力差ΣRMがサイクル数Mで除して平均化され、出力変動パラメータXが算出される。この算出された出力変動パラメータXが最終的な検出値としての出力変動パラメータXとされる。[吸蔵酸素量計測ルーチン]次に、図11を用いて、吸蔵酸素量OSAを計測するためのルーチンを説明する。このルーチンもECU20により所定の演算周期τ毎に繰り返し実行される。ステップS201では、リッチ制御が実行されているか否かが判断される。リッチ制御が実行されている場合、ステップS202に進んで、前式5により、今回の演算時期における演算周期毎の吸蔵酸素量dOSAnが算出される。次いでステップS203において、今回の演算時期における吸蔵酸素量OSAnが次式9により算出される。nは今回値、n-1は前回値を表す。式9により、前回の吸蔵酸素量OSAn1に今回の演算周期毎の吸蔵酸素量dOSAnが積算されて今回の吸蔵酸素量OSAnが算出されることが分かる。次いでステップS204において最大値処理が実行される。すなわち、ステップS203で算出された今回の吸蔵酸素量OSAnが前述の最大酸素量A3以下であるときは、今回の吸蔵酸素量OSAnが最終的な吸蔵酸素量OSAの計測値とされる。他方、ステップS203で算出された今回の吸蔵酸素量OSAnが前述の最大酸素量A3を超えているときは、最大酸素量A3が最終的な吸蔵酸素量OSAの計測値とされる。一方、ステップS201でリッチ制御が実行されてないと判断された場合、ステップS205に進んで、F/C制御が実行されているか否かが判断される。F/C制御が実行されている場合、ステップS206に進んで、前式6により、今回の演算時期における演算周期毎の吸蔵酸素量dOSAnが算出される。その後はステップS203,S204が前記同様に実行される。一方、ステップS205でF/C制御が実行されてないと判断された場合、ステップS207に進んで、通常の空燃比フィードバック制御が実行されていると実質的に判断され、前式4により、今回の演算時期における演算周期毎の吸蔵酸素量dOSAnが算出される。その後はステップS203,S204が前記同様に実行される。[OSAフラグ処理]次に、図12を用いて、OSAフラグ処理に関するルーチンを説明する。このルーチンもECU20により所定の演算周期τ毎に繰り返し実行される。まずステップS301では、リッチフラグがオンか否かが判断される。オンでなければステップS304に進んでOSAフラグがオフされる。他方、リッチフラグがオンの場合、ステップS302に進んで、前回の演算時期におけるOSAフラグがオンか否かが判断される。オンの場合、リッチ制御が実行中であり、吸蔵酸素量OSAの計測値が減少中であることを意味する。この場合、ステップS303に進んで、吸蔵酸素量OSAの計測値が下限しきい値A1以下か否か、すなわち実質的に吸蔵酸素量OSAの計測値が下限しきい値A1に達したか否かが判断される。吸蔵酸素量OSAの計測値が下限しきい値A1以下の場合、ステップS304に進んでOSAフラグがオフされる。また吸蔵酸素量OSAの計測値が下限しきい値A1より大きい場合、ステップS306に進んでOSAフラグがオンされる。他方、ステップS302において、前回の演算時期におけるOSAフラグがオンでないオフであると判断された場合、リッチ制御が停止中であり、吸蔵酸素量OSAの計測値が増加中であることを意味する。この場合、ステップS305に進んで、吸蔵酸素量OSAの計測値が上限しきい値A2以上か否か、すなわち実質的に吸蔵酸素量OSAの計測値が上限しきい値A2に達したか否かが判断される。吸蔵酸素量OSAの計測値が上限しきい値A2以上の場合、ステップS306に進んでOSAフラグがオンされる。他方、吸蔵酸素量OSAの計測値が上限しきい値A2未満の場合、ステップS304に進んでOSAフラグがオフされる。[リッチ制御ルーチン]次に、図13を用いて、リッチ制御に関するルーチンを説明する。このルーチンもECU20により所定の演算周期τ毎に繰り返し実行される。まずステップS401では、リッチ制御を行うのに適した所定の前提条件が成立しているか否かが判断される。この前提条件は、例えば、前述のステップS101における条件1~3が成立したときに成立する。前提条件が成立していない場合にはルーチンが終了される。他方、前提条件が成立している場合には、ステップS402において、図10のルーチンにより検出された出力変動パラメータXの値が所定のばらつき判定値X1以上であるか否かが判断される。ばらつき判定値X1は、リッチ制御を行わないとNOx排出量が許容レベルを超えてしまうような比較的大きな気筒間空燃比ばらつき度合いに対応した値とされ、例えばインバランス割合で30相当とされる。なお、出力変動パラメータXの検出値を所定の異常判定値と比較して気筒間空燃比ばらつき異常を検出する場合には、ばらつき判定値X1を異常判定値と等しくすることもできる。出力変動パラメータXの検出値がばらつき判定値X1以上である場合、ステップS403に進み、リッチフラグがオンであるか否か、すなわちエンジン運転状態がリッチ化領域内にあるか否かが判断される。リッチフラグがオンの場合、ステップS404に進み、OSAフラグがオンであるか否か、すなわち上流触媒11の吸蔵酸素量OSAがHCを処理するのに十分であるか否かが判断される。OSAフラグがオンの場合、ステップS405に進んでリッチ制御が実行される。他方、ステップS402で出力変動パラメータXの検出値がばらつき判定値X1未満の場合、ステップS403でリッチフラグがオフの場合、およびステップS404でOSAフラグがオフの場合のいずれも、ステップS406に進んで、リッチ制御が停止される。これにより、ストイキを目標空燃比とする通常の空燃比フィードバック制御が実行される。本実施形態には次のような利点もある。本実施形態は、気筒間空燃比ばらつき異常に起因して出力変動パラメータXの値が大きくなった場合ばらつき異常時のみならず、異常は生じていないがエンジン運転状態の過渡的変化等によりたまたま出力変動パラメータXの値が大きくなった場合正常時にも、リッチ制御を実行停止してHC排出量の増加を抑制できる利点がある。つまり本実施形態は、気筒間空燃比ばらつき異常が発生していない正常時にも有効である。正常時の例としては他に、適合値が実際のエンジン運転状態に不適切となりリッチ制御時に過剰にリッチ化されてしまう場合が挙げられる。[他の実施形態]次に、他の実施形態を説明する。なお上記実施形態と同様の部分については説明を省略し、以下相違点を中心に説明する。まず第1の変形例を説明する。この第1の変形例では、リッチ制御の実行中、計測された吸蔵酸素量OSAに応じてリッチ化度合いが変更される。すなわち、上記実施形態では、リッチ制御中の目標空燃比A/Ftrを負荷KLと回転数Neと出力変動パラメータXに応じて可変設定した。これに対し、第1の変形例では、リッチ制御中の目標空燃比A/Ftrを、上記3要素に加え、吸蔵酸素量OSAに応じても可変設定する。図14には吸蔵酸素量OSAとリッチ補正量αの関係を示す。吸蔵酸素量OSAが大きいほど大きなリッチ補正量αが設定され、目標空燃比A/Ftrの値が小さくなり式2参照、リッチ化度合いが大きくされる。この場合、図9を参照して、例えば最初にリッチ制御が開始される時刻t2の直後においては、吸蔵酸素量OSAの計測値が大きいので、目標空燃比A/Ftrの値が小さくなり、リッチ化度合いが大きくされる。この際には上流触媒11にまだ吸蔵酸素が十分残っているので、リッチ化度合いを大きくしてもHC排出の問題は生じない。この後、リッチ制御を継続し、吸蔵酸素量OSAの計測値が徐々に減少するにつれ、目標空燃比A/Ftrの値が徐々に小さくされ、リッチ化度合いも徐々に小さくされる。すなわち上流触媒11の吸蔵酸素量の減少につれリッチ化度合いが減少されていく。よって、上流触媒11のHC処理能力の低下に合わせてリッチ化度合いを減少し、HC排出量の増加を一層抑制できる。なお、この第1の変形例は、リッチ制御の第2の例すなわちリッチ制御時に燃料噴射量をリッチ化する場合にも適用可能である。次に第2の変形例を説明する。この第2の変形例では、ばらつき判定値X1以上の出力変動パラメータXが検出されたとき、その原因となった気筒すなわち異常気筒を特定する。そして、触媒前センサ17に対する異常気筒からの排気ガスのガス当たり強度に応じて、リッチ制御を停止する吸蔵酸素量の値すなわち下限しきい値A1を変更する。多気筒エンジンの場合、気筒に応じて、触媒前センサ17に対する排気ガスのガス当たり強度が異なる。気筒間のガス当たり強度の相違は主に触媒前センサ17の設置位置や、センサ上流側の排気通路構造に起因する。このガス当たり強度の相違に起因して、適切な下限しきい値A1の値は、どの気筒が異常気筒かによって異なる。よって異常気筒に応じて適切な下限しきい値A1の値を設定するのがこの第2の変形例である。気筒毎のガス当たり強度の相違は予め実験的に把握でき、また気筒番号とガス当たり強度との対応関係はECU20に予め情報として入力しておくことができる。図15には、空燃比リッチずれを起こしている異常気筒がガス当たり強度の強い気筒である場合の吸蔵酸素量OSAの変化を示す。なお図は図9Eの時刻t2~t21の部分を拡大して示す。実線は吸蔵酸素量OSAの計測値を示し、破線は吸蔵酸素量OSAの真値を示す。異常気筒がガス当たり強度の強い気筒である場合、吸蔵酸素量OSAの計測値に対し、吸蔵酸素量OSAの真値は大きくなる傾向にある。その理由は次の通りである。すなわち、触媒前センサ17が異常気筒からのリッチガスを顕著に受け、その影響で出力変動パラメータXの値が相対的に大きくなり、リッチ制御におけるリッチ化度合いが大きくなる図7参照。しかしトータルガスの真の空燃比は、触媒前センサ17で検出される空燃比ほどリッチではない。よってこの検出誤差の影響で、吸蔵酸素量OSAの真値は、吸蔵酸素量OSAの計測値より多くなる傾向にある。すると計測値が、基準の下限しきい値A1に達した時点では、まだ真値が下限しきい値A1に達しておらず、上流触媒11はまだ十分に吸蔵酸素を放出しきっていない。そこで、下限しきい値を基準値A1からより小さい値A1’に変更する。この値A1’は、計測値が当該値A1’に達した時点で真値が基準値A1に達するような値である。こうすることにより、真の吸蔵酸素量OSAが基準値A1に達するまでリッチ制御を継続することができ、リッチ制御が予定よりも早めに停止されてしまうことを防止できる。次に、図16には、空燃比リッチずれを起こしている異常気筒がガス当たり強度の弱い気筒である場合を示す。この場合、吸蔵酸素量OSAの計測値に対し、吸蔵酸素量OSAの真値は小さくなる傾向にある。その理由は次の通りである。すなわち、触媒前センサ17が異常気筒からのリッチガスの影響を受け辛いので、出力変動パラメータXの値が相対的に小さくなり、リッチ制御におけるリッチ化度合いが小さくなる図7参照。しかしトータルガスの真の空燃比は、触媒前センサ17で検出される空燃比よりリッチである。よってこの検出誤差の影響で、吸蔵酸素量OSAの真値は、吸蔵酸素量OSAの計測値より少なくなる傾向にある。すると仮に、計測値が基準の下限しきい値A1に達するまでリッチ制御を継続したとすると、その時点では真値が下限しきい値A1を下回ってしまう。そこで、下限しきい値を基準値A1からより大きい値A1に変更する。この値A1は、計測値が当該値A1に達した時点で真値が基準値A1に達するような値である。こうすることにより、真の吸蔵酸素量OSAが基準値A1に達した後もリッチ制御を継続してしまうことを防止し、リッチ制御が予定よりも長く継続されてしまうことを防止できる。そしてこれによるHC排出量増加も防止できる。図17には、本実施形態における気筒毎の下限しきい値の値を示す。2および3気筒のガス当たり強度は中であり、これらが異常気筒であるときには基準の下限しきい値A1が設定される。これに対し、1気筒のガス当たり強度は強であり、これが異常気筒であるときには基準値より小さい下限しきい値A1’が設定される。逆に、4気筒のガス当たり強度は弱であり、これが異常気筒であるときには基準値より大きい下限しきい値A1が設定される。次に、異常気筒の特定方法を説明する。この特定方法については様々な方法があるが、そのうち好ましい一例を以下に説明する。本実施形態では、気筒毎に燃料噴射量を強制的に増量または減量したときの出力変動パラメータXの変化に基づき異常気筒を特定する。気筒間空燃比ばらつきが発生すると、図3に示したように、そのばらつき度合いに応じて出力変動パラメータXの大きさが変化するのは前述したとおりである。よってこの特性を利用して異常気筒を特定する。以下その原理を図18を参照しつつ説明する。例えば図18Aに示すように、1気筒の燃料噴射量のみがストイキ相当量に対し40の割合でリッチ側にずれており即ちインバランス割合が40、他の2,3,4気筒では燃料噴射量がストイキ相当量となっている即ちインバランス割合が0場合を想定する。このとき、通常の空燃比フィードバック制御をある程度の時間実行すると、やがて図18Bに示すように、トータルの燃料噴射量がストイキ相当量となるように1気筒では30のインバランス割合、他の2,3,4気筒ではそれぞれ-10のインバランス割合となる。このときにもやはり各気筒でストイキ相当量に対しまたは-の噴射量ずれが生じている。よって1エンジンサイクル間で比較的大きな排気空燃比の変動が生じ、出力変動パラメータXの値は大きい。この図18Bの状態から、例えば図18Cに示すように、1気筒の燃料噴射量をストイキ相当量の40だけ強制的に減量する。こうすると1気筒は-10のインバランス割合となり、他の2,3,4気筒のインバランス割合と等しくなる。この状態から、1気筒の燃料噴射量減量状態を維持しつつ、通常の空燃比フィードバック制御をある程度の時間実行すると、やがて図18Dに示すように、各気筒の燃料噴射量が10ずつ補正され、各気筒の燃料噴射量がストイキ相当量になる即ち各気筒のインバランス割合は0。よって1エンジンサイクル間での排気空燃比の変動は小さくなり、出力変動パラメータXの値は小さくなる。このことから、燃料噴射量を強制的に所定量減量したときに出力変動パラメータXが所定値以上低下した気筒を異常気筒特にリッチずれ異常気筒と特定することができる。一方、図18Bの状態から、例えば図18Eに示すように、正常な2気筒において燃料噴射量をストイキ相当量の40だけ強制的に減量したとする。こうすると各気筒のインバランス割合は1気筒では変わらず30、2気筒では-50、3,4気筒では変わらずー10となる。この状態から、2気筒の燃料噴射量減量状態を維持しつつ、通常の空燃比フィードバック制御をある程度の時間実行すると、やがて図18Fに示すように、トータルの燃料噴射量がストイキ相当量となるように1気筒では40、2気筒では-40、3,4気筒では0となる。この場合、1エンジンサイクル間での排気空燃比の変動は大きいままであり、出力変動パラメータXの値も大きいままである。このことから、燃料噴射量を強制的に所定量減量したときに出力変動パラメータXが所定値以上低下しなかった気筒は異常気筒ではなく、正常気筒であると特定することができる。図示しないが、逆のパターンで、例えば図18Aの例のうち1気筒のみが異常でその燃料噴射量が-40少なくなっている即ちインバランス割合が-40場合を想定する。すると、気筒毎に燃料噴射量を強制的に増量した場合に、出力変動パラメータXが所定値以上低下した気筒は異常気筒特にリーンずれ異常気筒であり、出力変動パラメータXが所定値以上低下しなかった気筒は正常気筒であると特定することができる。従って、気筒毎に燃料噴射量を強制的に増量または減量したときの増量または減量前後の出力変動パラメータXの変化量を検出し、この変化量が所定値以上である気筒は異常気筒、所定値未満である気筒は正常気筒というように異常気筒が特定される。図19を用いて、下限しきい値設定に関するルーチンを説明する。このルーチンもECU20により実行される。まずステップS501では、図10のルーチンにより検出された出力変動パラメータXの値がばらつき判定値X1以上であるか否かが判断される。ばらつき判定値X1未満の場合、ルーチンが終了される。他方、ばらつき判定値X1以上である場合、ステップS502に進み、前述の如き燃料噴射量の強制増量または減量を伴う異常気筒特定処理が実行される。ここで異常気筒とは、出力変動パラメータXの検出値がばらつき判定値X1以上となる原因となった気筒をいう。次にステップS503において、特定された異常気筒が1気筒であるか否かが判断される。1気筒である場合、ステップS504に進んで、下限しきい値として、基準値A1より小さいA1’が設定される。他方、ステップS503において、特定された異常気筒が1気筒でないと判断された場合、ステップS505に進んで、特定された異常気筒が4気筒であるか否かが判断される。4気筒である場合、ステップS506に進んで、下限しきい値として、基準値A1より大きいA1が設定される。他方、ステップS505において、特定された異常気筒が4気筒でないと判断された場合、特定された異常気筒は2気筒および3気筒のいずれかであるから、ステップS507に進んで、下限しきい値として基準値A1が設定される。なお、リッチ制御を再開する吸蔵酸素量の上限しきい値A2も、触媒前センサ17に対する異常気筒からの排気ガスのガス当たり強度に応じて変更可能である。以上、本発明の好適な実施形態を詳細に述べたが、本発明の実施形態は他にも様々なものが考えられる。上記の数値はあくまで例示であり、他の値に変更可能である。本発明の実施形態は前述の実施形態のみに限らず、特許請求の範囲によって規定される本発明の思想に包含されるあらゆる変形例や応用例、均等物が本発明に含まれる。従って本発明は、限定的に解釈されるべきではなく、本発明の思想の範囲内に帰属する他の任意の技術にも適用することが可能である。"