controller 10 is shown in the block diagram of fig1 as a conventional microcomputer including : microprocessor unit 12 , input ports ( not shown ) output ports 16 , read - only memory 18 , for storing the control program ; random access memory 20 for temporary data storage which may also be used for counters or timers ; keep - alive memory 22 , for storing learned values ; and a conventional data bus . controller 10 is shown receiving various signals from sensors coupled to engine 28 including ; measurement of inducted mass airflow ( maf ) from mass airflow sensor 32 ; engine coolant temperature ( t ) from temperature sensor 40 ; and indication of engine speed ( rpm ) from tachometer 42 . in this example , engine 28 is a v - type engine having first and second banks ( not shown ) coupled to respective first and second exhaust manifolds ( 57 , 56 ). output signal fego1 from conventional exhaust gas oxygen sensor 45 , positioned upstream of first catalytic converter 51 , is compared to a reference value associated with stoichiometry in comparator 48 for providing output signal fego1s . signal fego1s is a two - state signal which is a predetermined high voltage when exhaust gases are rich of stoichiometry and a predetermined low voltage when exhaust gases are lean of stoichiometry . both signal fego1 and signal fego1s are coupled to controller 10 . output signal fego2 from conventional exhaust gas oxygen sensor 44 , positioned upstream of second catalytic converter 50 , is compared to a reference value associated with stoichiometry in comparator 46 for providing output signal fego2s . signal fego2s is a two - state signal which is a predetermined high voltage when exhaust gases are rich of stoichiometry and a predetermined low voltage when exhaust gases are lean of stoichiometry . both signal fego2 and signal fego2s are coupled to controller 10 . another conventional exhaust gas oxygen sensor ( 53 ) is shown coupled to exhaust manifold 57 downstream of catalytic converter 51 and provides signal rego1 to controller 10 which is related to oxygen content in the exhaust gases . output signal rego1 is also compared to a reference value associated with stoichiometry in comparator 55 for providing two - state output signal rego1s to controller 10 . signal rego1s is preselected high voltage when exhaust gases downstream of catalytic converter 51 are rich of stoichiometry and a low preselected voltage when such exhaust gases are lean of stoichiometry . yet another conventional exhaust gas oxygen sensor ( 52 ) is shown coupled to exhaust manifold 56 downstream of catalytic converter 50 and provides signal rego2 to controller 10 which is related to oxygen content in the exhaust gases . output signal rego2 is also compared to a reference value associated with stoichiometry in comparator 54 for providing two - state output signal rego2s to controller 10 . signal rego2s is preselected high voltage when exhaust gases downstream of catalytic converter 50 are rich of stoichiometry and a low preselected voltage when such exhaust gases are lean of stoichiometry . referring now to fig1 intake manifold 58 of engine 28 is shown coupled to throttle body 60 having primary throttle plate 62 positioned therein . throttle body 60 is also shown having fuel injector 76 coupled thereto for delivering liquid fuel in proportion to the pulse width of signal fpw from controller 10 . fuel is delivered to fuel injector 76 by a conventional fuel system including fuel tank 80 , fuel pump 82 , and fuel rail 84 . referring now to fig2 a flowchart of a routine performed by controller 10 to generate fuel trim signal ft1 for the first bank of engine 28 is now described . a determination is first made whether closed - loop air / fuel control is to be commenced ( step 104 ) by monitoring engine operation conditions such as temperature . when closed - loop control commences , signal rego1s is read from comparator 55 ( step 108 ) and subsequently processed in a proportional plus integral controller as described below . referring first to step 126 , signal rego1s is multiplied by gain constant gi and the resulting product added to products previously accumulated ( gi * rego1s i - 1 ) in step 128 . stated another way , signal rego1s is integrated each sample period ( i ) in steps determined by gain constant gi . during step 132 , signal rego1s is also multiplied by proportional gain gp . the integral value from step 128 is added to the proportional value from step 132 during addition step 134 to generate fuel trim signal ft1 . referring now to fig3 a flowchart of a routine performed by controller 10 to generate fuel trim signal ft2 for the second bank of engine 28 is now described . a determination is first made whether closed - loop air / fuel control is to be commenced ( step 204 ) by monitoring engine operation conditions such as temperature . when closed - loop control commences , signal rego2s is read from comparator 54 ( step 208 ) and subsequently processed in a proportional plus integral controller as described below . referring first to step 226 , signal rego2s is multiplied by gain constant gi and the resulting product added to products previously accumulated ( gi * rego2s i - 1 ) in step 228 . stated another way , signal rego2s is integrated each sample period ( i ) in steps determined by gain constant gi . during step 232 , signal rego2s is also multiplied by proportional gain gp . the integral value from step 228 is added to the proportional value from step 232 during addition step 234 to generate fuel trim signal ft2 . the routine executed by controller 10 to generate the desired quantity of liquid fuel delivered to the first bank of engine 28 and trimming this desired fuel quantity by a feedback variable related both to sensor 45 and fuel trim signal ft1 is now described with reference to fig4 . during step 258 , an open - loop fuel quantity is first determined by dividing measurement of inducted mass airflow ( maf ) by desired air / fuel ratio afd which is typically the stoichiometric value for gasoline combustion . this open - loop fuel charge is then adjusted , in this example divided , by feedback variable fv1 . after determination that closed - loop control is desired ( step 260 ) by monitoring engine operating conditions such as temperature ( t ), signal fego1s is read during step 262 . during step 266 , fuel trim signal ft1 is transferred from the routine previously described with reference to fig2 and added to signal fego1s to generate trim signal ts1 . during steps 270 - 278 , a conventional proportional plus integral feedback routine is executed with trimmed signal ts1 as the input . trim signal ts1 is first multiplied by integral gain value ki ( step 270 ), and the resulting product added to the previously accumulated products ( step 272 ). that is , trim signal ts1 is integrated in steps determined by gain constant ki each sample period ( i ) during step 272 . a product of proportional gain kp times trimmed signal ts1 ( step 276 ) is then added to the integration of ki * ts1 during step 278 to generate feedback variable fv1 . the routine executed by controller 10 to generate the desired quantity of liquid fuel delivered to the second bank of engine 28 and trimming this desired fuel quantity by a feedback variable related both to sensor 44 and fuel trim signal ft2 is now described with reference to fig5 . during step 358 , an open - loop fuel quantity is first determined by dividing measurement of inducted mass airflow ( maf ) by desired air / fuel ratio afd which is typically the stoichiometric value for gasoline combustion . this open - loop fuel charge is then adjusted , in this example divided , by feedback variable fv2 . after determination that closed - loop control is desired ( step 360 ) by monitoring engine operating conditions such as temperature ( t ), signal fego2s is read during step 362 . during step 366 , fuel trim signal ft2 is transferred from the routine previously described with reference to fig3 and added to signal fego2s to generate trim signal ts2 . during steps 370 - 378 , a conventional proportional plus integral feedback routine is executed with trimmed signal ts2 as the input . trim signal ts2 is first multiplied by integral gain value ki ( step 370 ), and the resulting product added to the previously accumulated products ( step 372 ). that is , trim signal ts2 is integrated in steps determined by gain constant ki each sample period ( i ) during step 372 . a product of proportional gain kp times trimmed signal ts2 ( step 376 ) is then added to the integration of ki * ts2 during step 378 to generate feedback variable fv2 . an example of testing converter efficiency of the first engine bank is now described with particular reference to the flowchart shown in fig6 . during step 498 , initial engine conditions are checked before entering the test cycle described below . more specifically , engine temperature ( t ) should be within a predetermine range , a predetermined time should have elapsed since the engine was started , and the closed - loop air / fuel control should have been operable for preselected time . during steps 500 , 504 , and 506 , the inducted airflow range in which engine 28 operating is determined . these ranges are described as range ( i ), range ( j ) . . . , range ( n ) for this example wherein &# 34 ; n &# 34 ; inducted airflow ranges are used to advantage . transitions between states of signal fego1s are counted to generate count signal cf1 i , assuming that engine operation is within airflow range ( i ). this count is compared to maximum count cf1 max during step 512 . while engine operation remains within airflow range ( i ), a test period of predetermined duration is generated by incrementing count cf1 i each transition of signal fego1s until count cf1 i is equal to maximum count cf1 max ( step 516 ). during this test period ( i ), count cr1 i is incremented each transition of signal rego1s ( step 518 ). stated another way , count cr1 i is incremented each transition of signal rego1s until count cr1 i = cr1 imax . when engine operation is within airflow range ( j ) as shown in step 504 , predetermined period ( j ), count cf1 j , and count cr1 j are determined in steps 522 , 526 , and 528 in a manner similar to that described above for airflow range ( i ) with respect to steps 512 , 516 , and 518 . each transition in signal fego1s , count cf1 j is incremented until it reaches maximum count cf1 jmax ( step 522 ). predetermined test period ( j ) is thereby defined . during test period ( j ), count cr1 j is incremented each transition of signal rego1s ( step 528 ). the above described operation occurs for each airflow range . for example , when engine 28 is operating within airflow range ( n ) as shown in step 506 , test period ( n ), count cf1 n , and count cr1 n are generated as shown in steps 532 , 536 , and 538 . during step 550 , a determination is made as to whether engine 28 has operated in all airflow ranges ( i . . . n ) for the respective test periods ( i . . . n ). stated another way , step 550 determines when each count of transitions in signal fego1s ( cf1 i , cf1 j , . . . cf1 n ) have reached their respective maximum values ( cf1 imax , cf1 jmax , . . . cf1 nmax ). each count ( cf1 i . . . cf1 n ) of transitions in signal fego1s for respective test periods ( i . . . n ) are summed in step 554 to generate total count cf1 t . for reasons described above , the same total count cf1 t may be obtained by summing each maximum count ( cf1 imax . . . cf1 nmax ) for respective test periods ( i . . . n ) total count cr1 t is generated in step 556 by summing each count ( cr1 i . . . cr1 n ) for respective test periods ( i . . . n ). a ratio of total count cr1 t to total count cf1 t is then calculated during step 560 and all counts subsequently reset in step 562 . the total efficiency routine is called in step 564 . an example of testing converter efficiency of the second engine bank is now described with particular reference to the flowchart shown in fig7 . during step 598 , initial engine conditions are checked before entering the test cycle described below . more specifically , engine temperature ( t ) should be within a predetermine range , a predetermined time should have elapsed since the engine was started , and the closed - loop air / fuel control should have been operable for preselected time . during steps 600 , 604 , and 606 , the inducted airflow range in which engine 28 operating is determined . these ranges are described as range ( i ), range ( j ) . . . , range ( n ) for this example wherein &# 34 ; n &# 34 ; inducted airflow ranges are used to advantage . assuming engine operation is within airflow range ( i ), transitions between states of signal fego2s are counted to generate count signal cf2 i . this count is compared to maximum count cf2 max during step 612 . while engine operation remains within airflow range ( i ), a test period of predetermined duration is generated by incrementing count cf2 i each transition of signal fego2s until count cf2 i is equal to maximum count cf2 max ( step 616 ). during this test period ( i ), count cr2 i is incremented each transition of signal rego2s ( step 618 ). stated another way , count cr2 i is incremented each transition of signal rego2s until count cr2 i = cr2 imax . when engine operation is within airflow range ( j ) as shown in step 604 , predetermined period ( j ), count cf2 j , and count cr2 j are determined in steps 622 , 626 , and 628 in a manner similar to that described above for airflow range ( i ) with respect to steps 612 , 616 , and 618 . each transition in signal fego2s , count cf2 j is incremented until it reaches maximum count cf2 jmax ( step 622 ). predetermined test period ( j ) is thereby defined . during test period ( j ), count cr2 j is increment each transition of signal rego2s ( step 628 ). the above described operation occurs for each airflow range . for example , when engine 28 is operating within airflow range ( n ) as shown in step 606 , test period ( n ), count cf2 n , and count cr2 n are generated as shown in steps 632 , 636 , and 638 . during step 650 , a determination is made as to whether engine 28 has operated in all airflow ranges ( i . . . n ) for the respective test periods ( i . . . n ). stated another way , step 650 determines when each count of transitions in signal fego2s ( cf2 i , cf2 j , . . . cf2 n ) have reached their respective maximum values ( cf2 imax , cf2 jmax , . . . cf2 nmax ). each count ( cf2 i . . . cf2 n ) of transitions in signal fego2s for respective test periods ( i . . . n ) are summed in step 654 to generate total count cf2 t . for reasons described above , the same total count cf2 t may be obtained by summing each maximum count ( cf2 imax . . . cf2 nmax ) for respective test periods ( i . . . n ) total count cr2 t is generated in step 656 by summing each count ( cr2 i . . . cr2 n ) for respective test periods ( i . . . n ). a ratio of total count cr2 t to total count cf2 t is then calculated during step 660 and all counts subsequently reset in step 662 . the total efficiency routine is called in step 664 . the actual ratios calculated in step 560 and 660 may are used to provide a measurement of converter efficiencies . due to the advantages described previously herein , this indication of converter efficiency is accurate over a wider range of converter efficiencies than heretofore possible . the total efficiency routine for determining when combined catalytic converter efficiency has degraded below a predetermined level is now described with particular reference to fig8 . when ratio1 is greater than a first predetermined threshold ( thresh1 ) or ratio2 is greater than the first predetermined threshold ( thresh1 ) ( step 800 ) then a flag is set indicating that the combined catalytic converter efficiency has degraded below a predetermined level ( step 801 ). if not , when ratio1 is greater than a second predetermined threshold ( thresh2 ) and ratio2 is greater than a third predetermined threshold ( thresh3 ) ( step 802 ) then a flag is set indicating that the combined catalytic converter efficiency has degraded below a predetermined level ( step 801 ). if not , when ratio2 is greater than the second predetermined threshold ( thresh2 ) and ratio1 is greater than the third predetermined threshold ( thresh3 ) ( step 804 ) then a flag is set indicating that the combined catalytic converter efficiency has degraded below a predetermined level ( step 801 ). fig9 shows an example of a curve described by the routine in fig8 . when the combined plot of first and second bank switch ratios ( ratio1 and ratio2 ) fall within the cross - hatched region , the combined catalytic converter efficiency is within acceptable limits . when the combined plot of first and second bank switch ratios ( ratio1 and ratio2 ) fall outside the cross - hatched region , the flag is set indicating that the combined catalytic converter efficiency has degraded below a predetermined level . an example of operation has been presented wherein the routine described in fig8 represents a piece - wise linear curve separating acceptable and unacceptable combinations of first and second bank switch ratios . alternatively , the routine described in fig8 could be reconfigured by one of ordinary skill in the art to represent any possible two - dimensional curve . the curve could be determined by experimental testing , theoretical models , any combination of the two , or any other method known to those skilled in the art and suggested by this disclosure . also , the method could be reconfigured so that a function of ratio1 and ratio2 ( for example , an elliptical function described by the function f below ) could be compared to a single predetermined number . ## equ1 ## although one example of an embodiment which practices the invention has been described herein , there are numerous other examples which could also be described . for example , the invention may be used to advantage with carbureted engines , proportional exhaust gas oxygen sensors , and engines having an in - line configuration rather than a v - configuration . the invention is therefore to be defined only in accordance with the following claims .