code beautifying, extended filtering discarded, better adjust epsilon

This commit is contained in:
Wolfgang Hottgenroth 2019-11-14 14:41:20 +01:00
parent 2dd586d7e4
commit 5ef114b634
4 changed files with 20 additions and 13 deletions

View File

@ -1 +1 @@
0.95 0.97

View File

@ -88,24 +88,26 @@ int main (void) {
double lastF = 0; double lastF = 0;
bool settled = false; bool settled = false;
uint8_t ledTick = 0; uint8_t ledTick = 0;
while (1) { while (1) {
uint32_t diff = ringbufferGet(); uint32_t period = ringbufferGet();
double f = 1.0 / (((double) diff) / 1000000.0); double fRaw = 1.0 / (((double) period) / 1000000.0);
double fRaw = f;
int valid = settled ? 1 : 0; int valid = settled ? 1 : 0;
double gradient = f - lastF; double gradient = fRaw - lastF;
double fSmoothed = fRaw;
if (settled && (fabs(gradient) > epsilon)) { if (settled && (fabs(gradient) > epsilon)) {
logmsg(LOG_INFO, "Current f=%f, last f=%f, gradient %f too large, invalid\n", f, lastF, gradient); logmsg(LOG_INFO, "Current f=%f, last f=%f, gradient %f too large, invalid\n", fRaw, lastF, gradient);
skipped++; skipped++;
f = lastF; fSmoothed = lastF;
valid = 0; valid = 0;
} else {
lastF = fRaw;
} }
lastF = f;
// printf("%f, %d\n", f, valid);
if (settled) { if (settled) {
influxAddFrequency(fRaw, f, gradient, valid); influxAddFrequency(period, fRaw, fSmoothed, gradient, valid);
} }
ledTick++; ledTick++;

View File

@ -91,7 +91,7 @@ static void influxSendRequest() {
led(E_BLUE, false); led(E_BLUE, false);
} }
void influxAddFrequency(double fRaw, double fSmoothed, double gradient, void influxAddFrequency(uint32_t period, double fRaw, double fSmoothed, double gradient,
int valid) { int valid) {
static uint32_t entries = 0; static uint32_t entries = 0;
static uint32_t totalEntries = 0; static uint32_t totalEntries = 0;
@ -100,7 +100,12 @@ void influxAddFrequency(double fRaw, double fSmoothed, double gradient,
clock_gettime(CLOCK_REALTIME, &t); clock_gettime(CLOCK_REALTIME, &t);
uint64_t tt = (((uint64_t)t.tv_sec) * 1000) + (((uint64_t)t.tv_nsec) / 1000000); uint64_t tt = (((uint64_t)t.tv_sec) * 1000) + (((uint64_t)t.tv_nsec) / 1000000);
int c = sprintf(tmpBuf, "mainsfrequency,host=%s,valid=%d,location=%s freq=%f,gradient=%f,freqRaw=%f %llu\n", influxTag, valid, location, fSmoothed, gradient, fRaw, tt); int c = sprintf(tmpBuf, "mainsfrequency,host=%s,valid=%d,location=%s "
"period=%u,freq=%f,freqSmoothed=%f,gradient=%f,freqRaw=%f "
"%llu\n",
influxTag, valid, location,
period, fSmoothed, fSmoothed, gradient, fRaw,
tt);
if ((bufferNextEntry + c + 10) > (influxBuffer + BUFSIZE)) { if ((bufferNextEntry + c + 10) > (influxBuffer + BUFSIZE)) {
influxSendRequest(); influxSendRequest();

View File

@ -3,7 +3,7 @@
#include <libconfig.h> #include <libconfig.h>
void influxAddFrequency(double fRaw, double fSmoothed, double gradient, int valid); void influxAddFrequency(uint32_t period, double fRaw, double fSmoothed, double gradient, int valid);
void influxInit(config_t *pCfg); void influxInit(config_t *pCfg);
#endif // _INFLUX_H_ #endif // _INFLUX_H_