Interpolation zum Berechnen der Feuchte

This commit is contained in:
rxf
2024-08-22 12:45:24 +02:00
parent 8de24db46d
commit e66633186b
5 changed files with 97 additions and 2 deletions

44
src/interpolation.cpp Normal file
View File

@@ -0,0 +1,44 @@
// Berechnung der Feuchte über die Sättigungsfeuchte und die Temperatur
//
// Die gemessene Temperatur ist (empirisch ernittelt) um 3.2°C zu hoch, deshalb ist die gemessene
// Feuchte immer deutlich zu niedrig. Mit Hilfe der Sättigungs-Tabelle wird nun die absolute Feuchte bei der
// wahren Temperatur (Tmess - 3.2°C) ermittelt und dann die relative Feuchte berechnet.
#include <math.h>
#include "interpolation.h"
// Berechnung des Dampgehaltes bei der gemessenen Temperatur über Interpolation in der dampftabelle
//
// dampfgehalt = d[t] + ((d[t+1] - d[t]) / 1) * (temp - t)
// mit t = int(temp)-indexOffset
// d[t] = dampftabelle[t]
// temp: gemessene Temperatur
// return: Dampfgehalt in g/m3
float getDampfgehalt(float temp)
{
int index = (int)temp - indexOffset;
if (index < 0)
{
index = 0;
}
if (index > sizeof(dampftabelle) / sizeof(dampftabelle[0]))
{
index = sizeof(dampftabelle) / sizeof(dampftabelle[0]) - 1;
}
float d1 = dampftabelle[index];
float d2 = dampftabelle[index + 1];
return d1 + ((d2 - d1) / 1) * (temp - (index + indexOffset));
}
// Berechnung der relativen Feuchte
//
// temp: gemessene Temperatur
// hum: gemessene relative Feuchte
// return: relative Feuchte
int getRelativeFeuchte(float temp, float hum)
{
float dampfmess = getDampfgehalt(temp);
float dampfecht = getDampfgehalt(temp - tempOffset);
return round((dampfmess * hum / dampfecht) + humOffset);
}