Jump to content

Suggestion: New Mixture Map logic for improved results


Recommended Posts


Currently with mixture map you set a threshold so that samples within say 25% of the centre of a cell vertically and horizontally.
This pool of results are used to contribute towards an average value in the centre of the closest cell. 
However this means that you've got 25% variation of rpm and load, contributing to a static value in the centre - and you need to throw away 75% (?) of recorded values.

I have another idea that can let you use all of the data instead, and improve the results.

For simplicity's sake imagine a 4x4 grid, and our current load and rpm point is 25% of the way towards the lower RPM value and 25% of the way towards the lower Load value. 
If we interpolate these values, as per what the ECU does. 
Note: I have just titled the columns and rows with percentages to show what percentage of the each cell we are interpolating from.


We get a value of (25% * 25* 10) + ( 25% * 75% * 30) + (25% * 75% * 20) + (75% * 75 * 40)

= 0.625 + 6.075 + 3.75 + 22.5

= 32.95 is the table value that interpolation produces. 

Now lets say that you wanted to add 10% to this value.

If we just adjust the closest cell by 10%, as per current Mixture Map strategy. Then our bottom left cell changes to 44 so our table now looks like this:


If we do the interpolation again, but with the new value to represent running the car again after the update:

We get a value of (25% * 25* 10) + ( 25% * 75% * 30) + (25% * 75% * 20) + (75% * 75 * 44)

= 0.625 + 6.075 + 3.75 + 24.75

= 35.2 as the new overall value. Which is only makes 6.8% difference to the interpolated value, rather than the 10% we wanted.

On the other hand...

If PCLink De-interpolated the 10% that it wants to add.

Instead of adding 10% to the one cell, we split the 10% addition across the 4 cells based on the same percentage that the value was interpolated from initially. 


Top left cell: (10 * 1.1 * .25 * .25) = 0.6875
Bottom left cell: (30 * 1.1 * .25 * .75) = 6.1875
Top Right Cell:   (20 * 1.1 * .25 * .75) = 4.125
Bottom Right Cell: (40 * 1.1 * .75 * .75) = 24.75

= 35.75 is the table value that de-interpolation produces. 

We were trying to add 10% and this new value produced is 10.5%. So that's pretty good!  
(The 0.5% error comes from rounding to 3 decimal places in my example)

So it's accurate to the provided data in every instance. Which is especially relevant when it's applied 1000s of times across all of the cells. You dont need to throw away any of your recorded data, it all contributes to the cell values.

Mixture map is pretty good for roughing out a map initially but because of the inaccuracies of the "nearest cell" method I don't really use it that much anymore when trying to dial in a fuel map. You always overshoot or undershoot unless you set your cell tolerances impossibly tight and have millions of samples.

And, since this is all only done in PCLINK rather than the ECU, there's not really any worry about the overheads of the extra maths involved. It's worth having it chug away for a few minutes longer if you can get an awesome result on first or second iteration of Mixture map logging.

So - that's my Friday night suggestion. 
Thanks for reading if you got this far, haha.



Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...