I'm pretty sure this is the smoothing factor table applied to the front O2 sensor current reading just before using the value to perform the Front O2 Sensor Scaling table lookup.
Attachment:
O2sensorSmoothing.png
Here's the table def in RomRaider Editor format. This applies to CAL IDs A2WC522N & A2WC522S.
Code:
<table type="3D" name="AF Sensor 1 Current Smoothing Factor" category="ALPHA" storagetype="float" endian="big" sizex="4" sizey="4" storageaddress="0xCD7CC">
<!-- min: 0.05 max: 0.9 average: 0.609375 -->
<scaling units="factor" expression="x" to_byte="x" format="0.00" fineincrement="0.01" coarseincrement="0.1" />
<table type="X Axis" name="Mass Air Flow" storagetype="float" storageaddress="0xCD7AC">
<!-- 20 to 44 -->
<scaling units="g/s" expression="x" to_byte="x" format="0" fineincrement="1" coarseincrement="5" />
</table>
<table type="Y Axis" name="Engine Load" storagetype="float" storageaddress="0xCD7BC">
<!-- 0.6 to 1.2 -->
<scaling units="g/rev" expression="x" to_byte="x" format="0.00" fineincrement="1" coarseincrement="5" />
</table>
<description>
</description>
</table>
Edit:
Here's how smoothing works in the 32bit ECU.
There are 4 parameters passed to the smoothing function:
- current reading
- previous smoothed reading
- a minimum limit
- and the factor for the smoothing (in this example, from the table)
The processing begins by subtracting the 'current reading' from the 'previous smoothed reading' to get a 'reading difference'.
Then the raw smoothing factor is subtracted from 1 to get the 'smoothing multiplier'.
The 'reading difference' is multiplied by the 'smoothing multiplier' to get a 'reduced reading difference'.
The 'reduced reading difference' is then added to the 'current reading' to get a 'current smoothed reading'.
Then the 'current smoothed reading' is subtracted from the 'current reading' and if the |result| is less than the 'minimum limit' then the 'current smoothed reading' is thrown out and the 'current reading' is used unmodified in the next iteration of the routine.
So ultimately what the smoothing table represents is the fraction of the difference between readings that will be used to modify the 'current reading' to create the new reading.
If the smoothing factor is 1 then there is no change to the current reading at all, effectively unsmoothed.
If the smoothing factor is 0 then all of the difference in readings is applied to the current reading.
If you wish to view the factor as a percentage then:
1 = 0% smoothing affect
0 = 100% smoothing affect
So the table above has 95% in the lower left and 10% in the upper right.
An alternate scaling for the factor represented as % is:
Code:
<scaling units="Applied Smoothing (%)" expression="(1-x)*100" to_byte="1-(x/100)" format="0" fineincrement="1" coarseincrement="10" />
Note that with a 'minimum limit' value other than 0, a certain difference in readings is required before smoothing takes affect. In the case with this table the limit is 0.
Also note, the smaller the factor (or higher the %) causes the reading to change at a much slower rate.