From 3f39352d954ef146969527f580d7c7214334acde Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Mon, 30 Jun 2014 21:09:39 +0200 Subject: [PATCH 1/2] Reduced the size of averaging buffer and introduced a raw (unfiltered) value. Averaged value is same as before, but one byte saved per class instance. Unfiltered value is used for writing into telemetry log. --- radio/src/logs.cpp | 6 +++++- radio/src/telemetry/frsky.cpp | 24 ++++++++++++++++++++---- radio/src/telemetry/frsky.h | 7 ++++--- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/radio/src/logs.cpp b/radio/src/logs.cpp index 3f79eb3a9..cf347ecae 100644 --- a/radio/src/logs.cpp +++ b/radio/src/logs.cpp @@ -200,13 +200,17 @@ void writeLogs() #if defined(FRSKY) #if defined(CPUARM) - f_printf(&g_oLogFile, "%d,%d,", frskyData.swr.value, frskyData.rssi[0].value); + f_printf(&g_oLogFile, "%d,%d,", frskyData.swr.raw, frskyData.rssi[0].raw); #else f_printf(&g_oLogFile, "%d,%d,%d,", frskyStreaming, frskyData.rssi[0].value, frskyData.rssi[1].value); #endif for (uint8_t i=0; ivalue = value; } else { - unsigned int sum = 0; + //calculate the average from values[], raw, value + unsigned int sum = values[0]; for (int i=0; ivalue = sum/TELEMETRY_AVERAGE_COUNT; + values[TELEMETRY_AVERAGE_COUNT-1] = raw; + sum += raw + value; + this->value = sum/(TELEMETRY_AVERAGE_COUNT+2); } + raw = value; #else if (this->value == 0) { this->value = value; @@ -573,6 +575,20 @@ void telemetryReset() frskyData.hub.current = 55; frskyData.hub.maxCurrent = 65; + + // //test of averaging + // FrskyValueWithMin testVal; + // testVal.value = 0; + // testVal.set(10); + // TRACE("testVal after first set: %d", (int)testVal.value); + // for(int n=2; n<10; ++n) { + // testVal.set(n*10); + // TRACE("in %d, testVal: %d", n*10, (int)testVal.value); + // } + // for(int n=2; n<10; ++n) { + // testVal.set(100); + // TRACE("in %d, testVal: %d", 100, (int)testVal.value); + // } #endif } diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index 163147a78..f6e12f56d 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -70,12 +70,13 @@ extern uint8_t telemetryState; #endif #if defined(CPUARM) -#define TELEMETRY_AVERAGE_COUNT 4 +#define TELEMETRY_AVERAGE_COUNT 2 //we actually average two more readings! class FrskyValueWithMin { public: - uint8_t value; - uint8_t min; + uint8_t value; //fitered value (average of last TELEMETRY_AVERAGE_COUNT+2 values) + uint8_t min; uint8_t values[TELEMETRY_AVERAGE_COUNT]; + uint8_t raw; //raw value (unfiltered) void set(uint8_t value); }; #else From 66848156a827a4016069ea5b330aea7b13a629fb Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Tue, 1 Jul 2014 15:32:17 +0200 Subject: [PATCH 2/2] Removed test code --- radio/src/telemetry/frsky.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index 72d95e39b..c92c63275 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -575,20 +575,6 @@ void telemetryReset() frskyData.hub.current = 55; frskyData.hub.maxCurrent = 65; - - // //test of averaging - // FrskyValueWithMin testVal; - // testVal.value = 0; - // testVal.set(10); - // TRACE("testVal after first set: %d", (int)testVal.value); - // for(int n=2; n<10; ++n) { - // testVal.set(n*10); - // TRACE("in %d, testVal: %d", n*10, (int)testVal.value); - // } - // for(int n=2; n<10; ++n) { - // testVal.set(100); - // TRACE("in %d, testVal: %d", 100, (int)testVal.value); - // } #endif }