This commit is contained in:
rusefi 2018-08-19 11:27:59 -04:00
parent e2c1cc91ad
commit 52ab8424e7
3 changed files with 51 additions and 29 deletions

View File

@ -78,8 +78,14 @@ float interpolate3d(float x, float xBin[], int xBinSize, float y, float yBin[],
if (needInterpolationLogging())
printf("Y is smaller than smallest cell in table: %d\r\n", yIndex);
#endif /* DEBUG_INTERPOLATION */
// no interpolation should be fine here.
return map[xIndex][0];
if (xIndex == xBinSize - 1)
return map[xIndex][0];
float key1 = xBin[xIndex];
float key2 = xBin[xIndex + 1];
float value1 = map[xIndex][0];
float value2 = map[xIndex + 1][0];
return interpolateMsg("out3d", key1, value1, key2, value2, x);
}
if (xIndex == xBinSize - 1 && yIndex == yBinSize - 1) {
@ -95,8 +101,14 @@ float interpolate3d(float x, float xBin[], int xBinSize, float y, float yBin[],
if (needInterpolationLogging())
printf("TODO BETTER LOGGING x overflow %d\r\n", yIndex);
#endif /* DEBUG_INTERPOLATION */
// todo: implement better handling - y interpolation
return map[xBinSize - 1][yIndex];
// here yIndex is less than yBinSize - 1, we've checked that condition already
float key1 = yBin[yIndex];
float key2 = yBin[yIndex + 1];
float value1 = map[xIndex][yIndex];
float value2 = map[xIndex][yIndex + 1];
return interpolateMsg("out3d", key1, value1, key2, value2, y);
}
if (yIndex == yBinSize - 1) {
@ -104,8 +116,14 @@ float interpolate3d(float x, float xBin[], int xBinSize, float y, float yBin[],
if (needInterpolationLogging())
printf("Y is larger than largest cell in table: %d\r\n", yIndex);
#endif /* DEBUG_INTERPOLATION */
// todo: implement better handling - x interpolation
return map[xIndex][yBinSize - 1];
// here xIndex is less than xBinSize - 1, we've checked that condition already
float key1 = xBin[xIndex];
float key2 = xBin[xIndex + 1];
float value1 = map[xIndex][yIndex];
float value2 = map[xIndex + 1][yIndex];
return interpolateMsg("out3d", key1, value1, key2, value2, x);
}
/*

View File

@ -733,5 +733,5 @@ int getRusEfiVersion(void) {
if (initBootloader() != 0)
return 123;
#endif /* EFI_BOOTLOADER_INCLUDE_CODE */
return 20180808;
return 20180819;
}

View File

@ -61,50 +61,54 @@ static void newTestToComfirmInterpolation() {
assertEqualsM("middle cell ", 54.25, getValue(/*rpm*/250, 2.5));
// issue #604: interpolation outside of the table
assertEqualsM("800 @ 2.1 ",200, getValue(/*rpm*/800, 2.1));
assertEqualsM("800 @ 2.3 ",200, getValue(/*rpm*/800, 2.3));
assertEqualsM("800 @ 3.3 ",500, getValue(/*rpm*/800, 3.3));
// X above the range
assertEqualsM("800 @ 2.1 ",230, getValue(/*rpm*/800, 2.1));
assertEqualsM("800 @ 2.3 ",290, getValue(/*rpm*/800, 2.3));
assertEqualsM("800 @ 3.3 ",530, getValue(/*rpm*/800, 3.3));
// X below the range
assertEqualsM("-810 @ 2.1 ",2.1, getValue(/*rpm*/-810, 2.1));
assertEqualsM("-820 @ 2.3 ",2.3, getValue(/*rpm*/-820, 2.3));
// Y above the range
assertEqualsM("310 @ 12.1 ", 330, getValue(/*rpm*/310, 12.1));
assertEqualsM("320 @ 12.3 ", 360, getValue(/*rpm*/320, 12.3));
// Y below the range
assertEqualsM("310 @ -12.1 ", 3.1, getValue(/*rpm*/310, -12.1));
assertEqualsM("320 @ -12.3 ", 3.2, getValue(/*rpm*/320, -12.3));
}
void testInterpolate3d(void) {
printf("*************************************************** testInterpolate3d\r\n");
float dwell;
printf("*** no interpolation here 1\r\n");
dwell = getValue(100, 2);
assertEquals(2, dwell);
assertEquals(2, getValue(100, 2));
printf("*** no interpolation here 2\r\n");
dwell = getValue(200, 4);
assertEquals(5, dwell);
assertEquals(5, getValue(200, 4));
printf("*** rpm interpolated value expected1\r\n");
dwell = getValue(150, 2);
assertEquals(2.5, dwell);
assertEquals(2.5, getValue(150, 2));
printf("*** rpm interpolated value expected2\r\n");
dwell = getValue(250, 3);
assertEquals(102, dwell);
assertEquals(102, getValue(250, 3));
printf("*** both rpm and maf interpolated value expected\r\n");
dwell = getValue(335.3, 3.551);
assertEquals(361, dwell);
assertEquals(361, getValue(335.3, 3.551));
printf("*** both rpm and maf interpolated value expected 2\r\n");
dwell = getValue(410.01, 2.012);
assertEquals(203.6, dwell);
assertEquals(203.6, getValue(410.01, 2.012));
printf("*** both rpm and maf interpolated value expected 3\r\n");
dwell = getValue(1000000, 1000);
assertEquals(600, dwell);
assertEquals(600, getValue(1000000, 1000));
printf("*** both rpm and maf interpolated value expected 4\r\n");
dwell = getValue(410.01, -1);
assertEquals(4, dwell);
dwell = getValue(-1, -1);
assertEquals(1, dwell);
assertEquals(4, getValue(410.01, -1));
assertEquals(1, getValue(-1, -1));
newTestToComfirmInterpolation();