I was wondering about .01*100. That didn't make sense.
I was wondering about .01*100. That didn't make sense.
yeah, just noticed a bracket error too, made an edit to my post.
For those following along...
BOTH METHODS WORK
Pick a method and go with it.
WOW THANK YOU! That made a world of difference! I don't know why smoke didn't ever provide this feedback the 162 times I asked for help before. I received that formula when I was experiencing issues and another member PM'd me that one. I will delete all other GMVE formulas I have and use this one instead.
I am going to continue looking at the logs and comparing. Right off the hop (looking at the chart view averages) both methods seems to more or less agree with each other. However, it appears using Dynamic Air is superior because...
As I noted before (over the last year+) GMVE seems to amplify the differences in error. Meaning maybe the dynamic air method shows -2%, GMVE will show -4% and so on.
Also at idle, GMVE is all over the place!
I think both of these can be attributed to the fact that Dynamic Air is filtered to calm the excessive static sensor noise...which is another reason why I feel this is the better option.
Here is what I see at idle...one thing to note is that I had to change my view from +/-10% to +/-20% to fit the data, and even then GMVE is still swinging off the charts.
idle.jpg
And when we look at the idle area on the 3D graph, you can GMVE makes the red A LOT more red and the green A LOT more green
chart.jpg
And if we plot on a real histogram we can see again a tighter data grouping using dynamic air and more defined bell curve (-6/+15 compared to -11/+16)
histo.jpg
As far as polling interval...I have a secret weapon! LOL
fast poll.jpg
A standard approach will give you standard results.
My Tuning Software:
VVE Assistant [update for v1.5]
MAF Assistant
EOIT Assistant
Yes, GMVE does bounce around. I filter mine with .average(200). Makes the formula real ugly.
Not sure if you ever seen my GMVE formula builder spreadsheet.
When I get time I'll add your method to it.
2013 OBM A6 CTS-V Coupe
Mods: Headers back Billy Boat Exhaust, GripTec 2.65, 8.6 PowerBond Lower, LSX Innovations Solid Isolator, ID850's, NGK TR7IX's, Accel 9070CK Wires, Spectre CAI, SRI Ported Throttle Body, SRI Catch Can, NGK AFRM, 160* T-Stat, 0fx2gv Brick, Hard Line Delete W/3/4" Lines, FB 101 FMIC, Pierberg CWA50, Stoptech Drilled/Slotted Rotors, EBC Redstuff, Cut Stock Springs, Flat Bottom Steering Wheel
2006 Black Raven STS-V (Traded In)
Fully Modded: 459RWHP@5888rpm/451lbft@4696rpm
Nathan, maybe you and Daniel should work together and make an even better VVE tool? Hmmmm...
See good things come from discussion and working together![]()
2010 Vette Stock Bottom LS3 - LS2 APS Twin Turbo Kit, Trick Flow Heads and Custom Cam - 12psi - 714rwhp and 820rwtq / 100hp Nitrous Shot starting at 3000 rpms - 948rwhp and 1044rwtq still on 93
2011 Vette Cam Only Internal Mod in stock LS3 -- YSI @ 18psi - 811rwhp on 93 / 926rwhp on E60 & 1008rwhp with a 50 shot of nitrous all through a 6L80
~Greg Huggins~
Remote Tuning Available at ghugginstuning@gmail.com
Mobile Tuning Available for North Georgia and WNC
One step ahead of you Greg. Not sure if he's seen my private message yet. Just been having a play with numpy. I think that will get the coefficients generated.
Knew you could figure it out...
2010 Vette Stock Bottom LS3 - LS2 APS Twin Turbo Kit, Trick Flow Heads and Custom Cam - 12psi - 714rwhp and 820rwtq / 100hp Nitrous Shot starting at 3000 rpms - 948rwhp and 1044rwtq still on 93
2011 Vette Cam Only Internal Mod in stock LS3 -- YSI @ 18psi - 811rwhp on 93 / 926rwhp on E60 & 1008rwhp with a 50 shot of nitrous all through a 6L80
~Greg Huggins~
Remote Tuning Available at ghugginstuning@gmail.com
Mobile Tuning Available for North Georgia and WNC
Can confirm numpy and scipy in a python script will do it. Grabbed zone 6 of my VE table, added some random percentage, copied the new values to my script, hit run and also hit calc coefficients on the VE editor. They both generate the same coefficients!!!HP must be using the same algo to curve fit. My first crack at python... And help from chatGPT
Screenshot 2023-08-19 160154.png
Here is the test code for zone 6:
Code:import numpy as np from scipy.optimize import curve_fit # Given data MAP = [10, 15, 20, 25, 30, 35, 40, 45] RPM = [1000, 1250, 1500, 1750] measurement = [ [717.6177678, 822.4499492, 921.87393, 1015.88971], [838.2188358, 974.5, 1071.25, 1116.065835], [943.6033685, 1138.300813, 1232.688901, 1201.025425], [1033.771366, 1229.996465, 1316.895406, 1270.768479], [1108.722828, 1304.953927, 1384.363723, 1325.294998], [1168.457755, 1363.173201, 1435.093851, 1364.604982], [1212.976146, 1324.5, 1385.5, 1388.69843], [1242.278002, 1299.451983, 1351.217763, 1397.575343], ] # Define the model function def model_func(data, constant, coefficient_a, coefficient_b, coefficient_c, coefficient_d, coefficient_e): MAP, RPM = data return constant + coefficient_a * MAP + coefficient_b * MAP**2 + coefficient_c * MAP * RPM + coefficient_d * RPM + coefficient_e * RPM**2 # Reshape data for curve fitting X = np.array(np.meshgrid(MAP, RPM)).T.reshape(-1, 2).T Y = np.array(measurement).flatten() # Perform curve fitting initial_guess = [1, 1, 1, 1, 1, 1] # Initial guess for coefficients params, _ = curve_fit(model_func, X, Y, p0=initial_guess) constant, coefficient_a, coefficient_b, coefficient_c, coefficient_d, coefficient_e = params print("Constant:", constant) print("Coefficient[a]:", coefficient_a) print("Coefficient[b]:", coefficient_b) print("Coefficient[c]:", coefficient_c) print("Coefficient[d]:", coefficient_d) print("Coefficient[e]:", coefficient_e)
Last edited by hjtrbo; 08-19-2023 at 08:14 PM. Reason: added info
Wow really nice work!
plotted.png
2010 Vette Stock Bottom LS3 - LS2 APS Twin Turbo Kit, Trick Flow Heads and Custom Cam - 12psi - 714rwhp and 820rwtq / 100hp Nitrous Shot starting at 3000 rpms - 948rwhp and 1044rwtq still on 93
2011 Vette Cam Only Internal Mod in stock LS3 -- YSI @ 18psi - 811rwhp on 93 / 926rwhp on E60 & 1008rwhp with a 50 shot of nitrous all through a 6L80
~Greg Huggins~
Remote Tuning Available at ghugginstuning@gmail.com
Mobile Tuning Available for North Georgia and WNC
Dynamic Airflow calculation method used in Gen4 and Gen5 is described in this patent:
https://patents.google.com/patent/US20050060084A1/en
But it's still partial. Patent only describes Current and Next airmass, but controller calculates further Next2 airmass. And there is a lot of safety limits applied to predicted airmass.
Hmmm... How did you put your hands on this treasure?
2011 Cadillac Escalade L94 w/LS3 valves and valve springs
Thank you for this. I remember filling out this spreadsheet a couple years ago...I thought that is where I got my original formula from...maybe I got an older version that had some bugs, or I had some copy and paste issues. Anyway...long story longer...I filled out just and use the suggested in 200ms average and that definitely calmed down the peaks. Again, a million thanks!
A standard approach will give you standard results.
My Tuning Software:
VVE Assistant [update for v1.5]
MAF Assistant
EOIT Assistant
I think he means how was all that data obtained? I'm interested, too.
I had some thoughts about all this concerning points of logic. What's a better tune SD, MAF, or hybrid? It's along the lines of when tuning CL use the narrowbands to tune. Tuning the system in the same configuration as final running conditions yields the most accurate results. In SD tune VE, MAF do MAF, but hybrid do SD and MAF separately? I'm coming around 180 on this hybrid tuning idea. It does make more sense. Tune MAF/VE hybrid in hybrid mode. We're tuning the entire system.
So Cringer I have to give you credit you're really onto something, and I apologize for my skepticism. You correctly determined that to understand this particular GM MAF/MAP hybrid control scheme one needs to pay attention to Dynamic Airflow. The patent that verlon posted reinforces the Dynamic Airflow method.
Still, I have problems with the implementation. How to determine steady state and how to determine how much each airflow model is corrected?
1) For the first part of determining steady state conditions I haven't seen any quantifiable yes/no. Seems more like qualification, a 'feel' thing, which has no place in an accurate model. That was until verlon provided a patent document that contains a wealth of information. It shows how steady state is determined.
What I propose is a modification to the dynair filter. This will allow more accurate determination of what the control scheme considers steady state, therefore will provide more accurate results.
This is very much pseudocode. Maybe someone who's more competent with VCM Scanner can translate it to math filter format. Whether or not this matches what's being described in the patent needs verification:
- where k = current time, k-1 = current time - polling rate. So MAF(k) = MAF reading now and MAF(k-1) = MAF reading .250 seconds ago, for example.Code:Poll [DynAir] if {abs([MAF(k)]-[MAF(k-1)])/[MAF(k-1)] <= [ECM 13432]} && {abs([MAP(k)]-[MAP(k-1)])/[MAP(k-1)] <= [ECM 13432]}
- ECM 13432 = Dynamic Airflow Current Gain (0.1)
All it's saying is things are steady state while both MAF and MAP have each changed 10% or less. Assumptions are made about k-1 timestep being the polling rate and gain being ECM 13432.
Here's my scribbles on how I came up with it.
quick notes.png
Hope this helps.
Last edited by SiriusC1024; 08-19-2023 at 11:09 PM.
Wouldn't it be better to set it up with less than 10%? In other words something like 5% or less or would that be too aggressive at least for the MAF - probably right for the map? I only ask because I know transients come into play when the rpm's are changing 50 or more. I found this out years ago playing with transient settings on a big cammed motor where I had it "thumping" pretty good and before I realized it I was idling at a 13.9 afr because transients had kicked in as I had them set pretty aggressive as it was a big blower motor. Or just use the time function and let things be?
2010 Vette Stock Bottom LS3 - LS2 APS Twin Turbo Kit, Trick Flow Heads and Custom Cam - 12psi - 714rwhp and 820rwtq / 100hp Nitrous Shot starting at 3000 rpms - 948rwhp and 1044rwtq still on 93
2011 Vette Cam Only Internal Mod in stock LS3 -- YSI @ 18psi - 811rwhp on 93 / 926rwhp on E60 & 1008rwhp with a 50 shot of nitrous all through a 6L80
~Greg Huggins~
Remote Tuning Available at ghugginstuning@gmail.com
Mobile Tuning Available for North Georgia and WNC
If I am correct about the assignment of the gain constant being ECM 13432 then all you'd have to do is change those from 0.1 to 0.05 to make it 5%. So that would be a tuning technique to employ with larger cams and running MAF/MAP hybrid if necessary.
But, again assumming ECM 13432, one could theoretically alter the allowance between MAP and MAF for various engine loads. Tighten it up for idle but allow more at other ranges. Just have to modify the filter to account for differences in that table.
You're probably right though. A higher polling rate/smaller time interval should clear things up. Actually, what the smaller time interval is doing is allowing a smaller window for mismatch between MAF and MAP. With transients there's lag between the two sensors. So, I think the formula should be valid in all conditions. Wouldn't even need a TPS or RPM filter.
Question is what is the actual polling rate of the ECU. How often is the control loop updated? That would be the determining factor.
Try it out and see how it goes.
p.s. Can someone post up a .csv log with map, maf, vve, dynair tracked? I want to demonstrate the filter graphically.
Last edited by SiriusC1024; 08-19-2023 at 11:53 PM.
So am so glad this is finally starting to click!
I think it is important note a few things here.
1) A lot of people people seem to really get hung on the fact that "we don't know if MAF or VVE is informing DynAir at any given moment, therefore we cannot use DynAir."
The fact is, it doesn't matter at all. All we need to know is two things to uncover the true actual airflow:
-Dynamic air
-Fuel trims
On Gen5's there is a PID called Flow Factor that does reveal the weighting between MAF and VVE. This would be nice to have for curiosity sake, but truth is, we don't need it. However, a few days ago I saw this GRG video where Kyle used DynAir in combination with the Flow Factor to come up with a more complex way to tune with DynAir.
2) This entire method is predicated on the fact that DynAir and only DynAir controls IPW. If this can be disproved, then this method is seriously flawed. MAF and VVE only indirectly influence DynAir. It would be totally different if the ECM hopped between MAF, VVE, DynAir at any moment to control IPW. However, DynAir is always present, always updated and always maintained and ready to render an opinion on air flow and is the only controlling factor over the final IPW.
Here is an analogy:
Suppose there are 3 students in math class:
Victor: good at multiplication
Mike: good at division
Dan: who is a cheater and steals answers from Victor and Mike
On the day of the math test whenever Dan sees a multiplication question, he copies Victor's answer. When there is a division question he steals the answer from Mike. When there is a more complex question involving powers (x^2) or square roots, with addition and subtraction, all 3 students are confused. However, Dan must make a decision, so he plays it safe by looking at both Mike and Victor's answer and coming up with something in the middle.
At the end of the class all 3 students hand in their math tests for grading. The teacher grades Dan's paper first. But rather than giving a final letter grade, she marks each answer as a percent to target (10% low, 17% high, etc) of the correct answer. Then the teacher hands the 3 tests to a tutor and says to grade the remaining two tests...but not with an answer key. The tutor must look at Dan's test with the % style grading and figure out the correct answers with info given by Dan and the teacher. Now armed with the correct answers, the tutor can now apply the correct grades to Victor and Mike's tests.
Example:
Test Question #1) 5 * 11 = ?
Victor: 56
Mike: 33
Dan: 56
Grade:
Dan: 1.7857% high
So the tutor find the answer to question #1 is 55.
Victor receives the same grade of 1.7857% high while Mike receives a 33% low.
Question #2) What is the cube root of 9?
Dan*: 1756
Mike: 4
Victor: 2
*Turns out Dan was day dreaming looking out the window at hot babes walking by and did not copy an answer from either Mike or Victor! However, he still must submit an answer. So he panics and looks at the window again and sees a bus with a serial number drive by and he decides to write down that number.
Grade:
585% % too high
So the tutor finds the answer to question #2 is 3.
Victor receives a 33% low while Mike receives a 33% high.
In this situation:
Dan = Dynamic Air
Victor = VVE
Mike = MAF
Teacher = Fuel trims
Tutor = tuner
And the lesson here is, as you can see with question #2, it literally does not matter how Dynamic Air is informed, MAF, VVE, random number...so long as we know the fuel trims to apply back to it.
A standard approach will give you standard results.
My Tuning Software:
VVE Assistant [update for v1.5]
MAF Assistant
EOIT Assistant