Ryan, I take it you're not using EGO correction? You're probably right that most people don't have their dead time right. Likewise MAT (I suspect). But as long as they've got a reasonably consistent VE table, and reasonbly steady voltage, EGO feedback will pretty quickly home in on a suitable correction for the rest of the drive won't it?
Anyhow, I think it's particularly good idea you had to log PW-deadtime -- that'll be (the best guess at) the actual amount of fuel being delivered. But then I guess plotting that against MAPxRPM won't be all that much different from plotting VE against it, and Andy isn't so keen on that.
I've tried some common statistical methods on my usual data log, seeing what relationships can be found. I tried comparing two simple models:
- best fit plane: ve = p1*RPM + p2*MAP + p3
- best fit Whittle contour: ve = p1*MAPxRPM + p2*RPM + p3
p2 in the Whittle model gives us the equivalent of what dead time does, giving an RPM dependent ramp in VE for points along a Whittle contour (RPMxMAP=C). The reason I'm comparing it with a simple plane is that many people seem to describe these "well behaved" engines as "linear". Whether that truly means the VE map is something like a plane, I'm not sure. I should also point out that the Whittle code change is more powerful than the model above, because the model assumes a straight line, where the code does a curve lookup. Anyhow, comparing anova (analysis of variance) statistics of these two models looks promising:
- Code: Select all
> anova(mt) (Plane model)
Analysis of Variance Table
Response: y$Gve
Df Sum Sq Mean Sq F value Pr(>F)
y$RPM 1 117421 117421 14384 < 2.2e-16 ***
y$MAP 1 720004 720004 88203 < 2.2e-16 ***
Residuals 12942 105646 8
> anova(mw) (Whittle model)
Analysis of Variance Table
Response: y$Gve
Df Sum Sq Mean Sq F value Pr(>F)
y$xprod 1 746135 746135 99175 < 2.2e-16 ***
y$RPM 1 99569 99569 13235 < 2.2e-16 ***
Residuals 12942 97368 8
In brief, the slightly smaller residuals value tells us that for my particular engine, the cross product (RPMxMAP) with RPM models the VE table better than the best fit plane of RPM and MAP. Doing the actual regression gives the best fit equation: VE = 0.001984.MAPxRPM - 0.0055947.RPM + 47.94. The important thing here is the -0.0055947.RPM. If we added a simple RPM multiplier to the user interface, the curve lookup attends to the other values. Here is the effect it has on the RPMxMAP to VE fit:
- MAPxRPM vs VE, fitted VE vs VE
- sbs.png (4.88 KiB) Viewed 805 times
The way the code is at present, we are effectively using a thin curve drawn over the graph on the left to represent each value. If I add the constant RPM multiplier (and the user enters a good value for it!!) the curve represents the much smaller range of values on the right. I would be happy to add this small change to the code, but how does the user decide on an RPM multiplication factor? (and no, my injector dead time is not 5.5ms!).
Opinions? Happy to do similar work on other log files to see if there's a pattern.
Have fun,
Rob.