This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Fusion2016/code/toni/BarometerSensorReader.h
FrankE deb21fc550 fixed baraomter issue (skip first few readings due to sensor errors)
added new eval using shortest-path + plotting
removed compiler warnings for clean-code
fixed some minor issues
added new TeX code and new graphics
2016-02-07 13:30:04 +01:00

71 lines
1.5 KiB
C++
Executable File

#pragma once
//#include "circular.h"
#include "BarometerObservation.h"
#include "../reader/SensorReader.h"
#include <sstream>
#include <Indoor/math/MovingAVG.h>
#include <Indoor/math/MovingMedian.h>
//circular_buffer<double> measurementHistory(1000);
class BarometerSensorReader{
private:
// NOTE: median or avg?
MovingMedian<float> avg;
MovingMedian<float> avgStart;
// avg: lower size, median: bigger still fine
static constexpr int avgSize = 10;
static constexpr int startAvgSize = 10;
// skip the first 1-2 seconds and let the sensor settle itself
uint64_t skipTS = 0;
public:
BarometerSensorReader(): avg(avgSize), avgStart(startAvgSize) {
;
}
BarometerObservation* readBarometer(const SensorEntry& se) {
// skip the first few 1.5 seconds
if (skipTS == 0) {skipTS = se.ts;}
if (se.ts - skipTS < 3000) {return nullptr;}
std::string tmp = se.data;
BarometerObservation* obs = new BarometerObservation();
const float cur = std::stof(tmp);
// get the next hPa reading and average it
avg.add(cur);
// average the first few readings as reference
if (avgStart.getNumUsed() < startAvgSize) {
avgStart.add(cur);
}
// current average relative to the start-average
obs->hpa = avg.get() - avgStart.get();
// done
return obs;
}
// //TODO
// void readVerticalAcceleration(const SensorEntry& se){
// //Problem: Koordinatensystem LinearAcceleraton ist relativ zum Telefon und nicht zum
// //Weltkoordinatensystem. Brauchen die Beschleunigung nach Oben in Weltkoordinaten.
// }
};