I have been looking for misfires in my car recently. VEMS has some capability to detect these based on timing how long the crank takes to get between the teeth specified in the h[1] table.
I was using these timings divided by RPM to give an indication of whether a cylinder fired correctly - one should be greater than the others, and that's the problem cylinder. Let's call these timings "delta_RPM".
This approach was OK, but it was difficult to see if deviations from the expected result were caused by small accelerations from low RPM (there is more time between trigger teeth for things to happen at low RPM, so the data is always noisier) or genuine misfires.
But it occured to me that this approach could be better, so I came up with the following:
1. Work out the median of all the cylinder delta_RPMs over a small time window (say 0.1 seconds).
2. Work out abs(delta_RPM - median) for all delta_RPMs
3. Work out the median of the above, and it gives a single number representing the median absolute deviation (MAD).
If the MAD is greater than a threshold then a misfire occured. It is now much less sensitive to low RPM false alarms.
To find out which cylinder misfired, find the one with the largest deviation from the list created in step 2.
Could this be added to Megatune? I think it would be a really useful feature.
It could even be included in VEMS itself since it's a simple algorithm that doesn't require complicated maths.