Zurück zur Wissensdatenbank

Wie OpenSpiro VO2 berechnet (und worauf du achten musst)

Tiefer Einblick für VO2-Analyzer-Nerds: Haldane-Transformation, Wet- vs. Dry-Basis-Bookkeeping, warum OpenSpiro pro Gerät einen anderen Rechenweg nimmt — und welche Sensor-Realitäten deine Werte mehr beeinflussen als jede Formel.

Eine VO2-Zahl auf dem Bildschirm sieht trügerisch einfach aus: 3.200 mL/min, 45 mL/kg/min, fertig. In Wahrheit hängt dieser eine Wert an einer Kette von Konventionen und Annahmen, die je nach Gerät, Sensor und Umgebungsbedingungen variieren. Ein falscher Schritt in der Kette und dein VO2 driftet um 20–50 %, ohne dass irgendetwas offensichtlich kaputt aussieht. Dieser Artikel erklärt, was OpenSpiro tatsächlich tut, warum es das pro Analyzer unterschiedlich tut, und welche praktischen Realitäten am Ende über vertrauenswürdige Werte entscheiden.

Die Grundgleichung: Haldane-Massenbilanz

VO2 wird nicht direkt gemessen. Was Gas-Analyzer wirklich messen: wieviel Luft aus dir herausgekommen ist (Volumen), und welcher Anteil davon O2 und CO2 war. Um daraus "Milliliter Sauerstoffverbrauch pro Minute" zu machen, musst du wissen, wieviel Luft hineingegangen ist — und dafür gibt es die Haldane-Transformation.

Stickstoff ist metabolisch inert: der Körper produziert ihn weder noch verbraucht er ihn. Der ausgeatmete N2-Fluss entspricht also dem eingeatmeten N2-Fluss. Mit den exspiratorischen Gasfraktionen (FEO2, FECO2) und den bekannten Inspirationswerten (FIO2 ≈ 0,2095, FICO2 ≈ 0,0004) lässt sich das Inspirationsvolumen aus dem Exspirationsvolumen ableiten:

Haldane-Verhältnis = FEN2 / FIN2 = (1 − FEO2 − FECO2) / (1 − FIO2 − FICO2)
VO2  = VE × (FIO2 × Haldane − FEO2)
VCO2 = VE × (FECO2 − FICO2 × Haldane)

Auf dem Papier einfach. Die Probleme fangen bei der Frage an, was VE und die Gasfraktionen physikalisch tatsächlich bedeuten.

STPD, wet vs. dry: das Bookkeeping-Problem

Volumen ist nicht gleich Volumen. Luft bei Körpertemperatur, vollständig wassergesättigt (BTPS), nimmt mehr Raum ein als dieselben Moleküle bei 0 °C, 1013 hPa, trocken (STPD). Damit Stoffwechselraten zwischen Laboren und Bedingungen vergleichbar sind, korrigiert jeder Analyzer Volumen auf STPD. Die Standardkorrektur:

STPD = (P_amb / 1013,25) × (273,15 / T_K) × (1 − PH2O / P_amb)

Die ersten beiden Terme rechnen Temperatur und Druck um. Der letzte Term zieht den Wasserdampf ab — was nur sinnvoll ist, wenn man trockene Moleküle zählen will. Ob der Term anzuwenden ist, hängt davon ab, ob deine O2- und CO2-Sensoren feuchtes oder trockenes Gas sehen:

  • Trocken-Basis-Sensoren (z.B. paramagnetische O2-Zellen mit Sample-Trocknung): die Sensor-FEO2 ist bereits der Anteil im trockenen exspiratorischen Gas. Wende die volle STPD-Korrektur inklusive Wasserdampf-Term an und nutze die Lehrbuch-Haldane-Formel oben.
  • Wet-Basis-Sensoren (die meisten galvanischen O2-Zellen, NDIR-CO2-Sensoren ohne Trocknung): der Sensor liefert den Anteil im feuchten exspiratorischen Gas, in dem Wasserdampf noch Raum einnimmt. Jetzt muss das Bookkeeping konsistent bleiben: alles auf Wet-Basis halten. Das FIO2 der inspirierten Umgebungsluft ist 0,2095 × (1 − PH2O_amb/P_amb), der Haldane-Nenner enthält Wasserdampf explizit, und die STPD-Korrektur am Volumen lässt den Wasserdampf-Term weg (er ist auf der Gas-Seite schon berücksichtigt).

Beide Konventionen sind isoliert physikalisch korrekt. Mischst du sie — eine Lehrbuch-Trockenbasis-Formel auf einen Wet-Sensor angewendet — bläst du VO2 je nach Bedingungen um etwa 5–20 % auf. Genau dieser Bug war der Grund für die VO2-Korrektur bei Calibre Bio in OpenSpiro 0.1.1-alpha.11.

Warum OpenSpiro pro Gerät ein anderes Modell nutzt

Verschiedene Analyzer liefern verschiedene Signale. Es gibt keine universelle Formel, die für jedes Gerät korrektes VO2 produziert — was korrekt ist, hängt davon ab, welche Gase getrocknet werden, ob VO2 schon im Gerät berechnet wird, und welche Umweltdaten verfügbar sind. OpenSpiro erkennt deshalb das verbundene Gerät und wählt automatisch ein Berechnungsmodell. Das aktive Modell ist als Badge neben dem Session-Timer sichtbar und wird mit jeder gespeicherten Session mit eingetragen.

Drei Modelle gibt es derzeit:

Calibre Bio: Wet-Basis-Haldane

Die Gas-Sensoren der Calibre sind nicht getrocknet — die Werte enthalten Wasserdampf. OpenSpiro hält jede Größe konsistent auf Wet-Basis und matcht damit die Berechnung der offiziellen Calibre Android-App bit-genau:

SVP(T)    = 6,1 · exp(17,27 T / (T + 237,3))    // hPa, Magnus
H2O_exh   = SVP(T_exh) · RH_exh / P_amb         // expirierter Wasserdampfanteil
H2O_amb   = SVP(T_amb) · RH_amb / P_amb         // Umgebungs-Wasserdampfanteil
FIO2_wet  = (1 − H2O_amb) · 0,2095              // inspiriertes O2, feucht-korrigiert
FICO2_wet = (1 − H2O_amb) · 0,0004
Haldane   = (1 − FEO2 − FECO2 − H2O_exh)
          / (1 − FIO2_wet − FICO2_wet − H2O_amb)
STPD_num  = (P_amb / (T_exh + 273,15)) · 0,2695  // partieller STPD ohne Feuchte-Term

VO2  = | FIO2_wet · Haldane − FEO2 | · V · STPD_num
VCO2 = ( FECO2 − FICO2_wet ) · V · STPD_num

Bit-identisch zur Calibre-App, Atemzug für Atemzug. Der Preis: man kann darauf keine Lehrbuch-Trockenbasis-Formeln stapeln — die würden die Feuchte doppelt einrechnen.

VO2 Master: Device-Trusted

Der VO2 Master berechnet VO2 und VCO2 intern und streamt die fertigen Werte über BLE. OpenSpiro übernimmt die VO2/VCO2-Werte des Geräts unverändert und berechnet nur die abgeleiteten Größen — RER, Fett/KH-Anteil, Kalorien. Die geräteeigene Kalibrierung und Annahmen fließen direkt mit ein. Vermutest du eine systematische Abweichung, kalibriere das Gerät nach Hersteller-Vorgabe — OpenSpiro hinterfragt die Werte nicht.

Generic (Fallback)

Wird ein Gerät als Stoffwechsel-Analyzer erkannt, ist aber noch nicht in unserer Modell-Tabelle, fällt OpenSpiro auf die Wet-Basis-Formel zurück. Das ist ein vernünftiger Default für jeden galvanischen / elektrochemischen O2-Sensor, der feuchte Werte liefert — und damit für den Großteil des Markts. Sobald wir eine neue Geräte-Familie explizit unterstützen, schrumpft dieser Fallback.

Sensor-Realitäten (was deine Werte wirklich verschiebt)

Die Mathematik ist der einfache Teil. Sensor-Verhalten, Raumbedingungen und der Sitz der Maske erzeugen weit mehr Varianz als die Wahl der Formel. Ein paar praktische Realitäten:

Sensor-Drift. Galvanische O2-Zellen verlieren langsam Signal, weil ihr Elektrolyt aufgebraucht wird (typische Lebensdauer 1–2 Jahre regulärer Nutzung). NDIR-CO2-Sensoren driften mit Temperatur und Umgebungsdruck. Wenn dein Analyzer Kalibrierung unterstützt, mach sie vor jeder Session — sonst rechne mit einem langsamen Aufwärts-Bias des VO2 über die Sensor-Lebenszeit.

Sensor-Technologien. Es lohnt sich zu wissen, was im gekauften Gerät steckt:

  • O2 — Galvanische Zellen (günstig, drift-anfällig, in den meisten Portables verbaut), paramagnetisch (Lab-Grade, teuer), Zirkonia (schnell, läuft heiß), optisch / Lumineszenz-Quenching (driftfrei, schnelle Antwort, keine Verschleißteile — zunehmend in modernen Lab-Geräten und neueren Portables).
  • CO2 — NDIR (Standard für Portables; schnell, geringer Drift), Severinghaus-Elektroden (nur Lab).
  • Flow — Pneumotachograph (widerstandsbasiert, kalibrierungsempfindlich), Differenzdruck (in Portables verbreitet, sehr sensitiv auf Luftzug), Ultraschall (teuer aber praktisch driftfrei).

Jede Technologie macht Trade-offs zwischen Antwortzeit, Drift und Absolutgenauigkeit. Die Werte auf deinem Bildschirm spiegeln, was im Gerät steckt — Software kann schlechte Sensordaten nicht reparieren.

Luftzug und Luftbewegung. Portable Analyzer sehen Volumen- und Druckänderungen auf Atemzug-Skala. Mach Sessions in einem geschlossenen Innenraum ohne Lüfter oder offene Fenster. Direkter Luftzug auf die Maske erzeugt Phantom-Flow am Sensor und zieht Umgebungsluft am Maskendichtsitz vorbei in das exspiratorische Gas — VO2 driftet dann schon bei mäßigem Cross-Breeze um 5–15 % nach oben. Kompakte portable Analyzer wie die Calibre Bio sind besonders betroffen, weil ihre Flow-Sensoren winzige Druckdifferenzen lesen. Wenn du Luft auf deinem Gesicht spürst, kann die Berechnung das nicht mehr ausgleichen.

Feuchtigkeit und Wasserdampf. Ausgeatmete Luft ist bei ~37 °C, ~100 % RH vollständig gesättigt. Umgebungsluft ist meist trockener (20–60 % RH). Wasserdampf nimmt "Platz" weg und verdünnt die gemessenen O2- und CO2-Anteile. Wird die Korrektur falsch gemacht, schwankt VO2 um 5–20 %. Pro-Geräte-Mathematik handhabt das konsistent — siehe den Calibre-Bio-Block oben.

Fehlende Sensoren. Nicht jeder Analyzer misst jede Größe. Der VO2 Master z.B. liefert nur Umgebungstemperatur und -feuchte, keine exspiratorischen Gasbedingungen; OpenSpiro substituiert dafür physiologische Schätzungen (33,5 °C, 95 % RH), weil exspiratorisches Gas im Wesentlichen körperwarm und gesättigt ist, egal was kommt. Die Calibre misst beides. Fehlt ein Sensor, fällt die Berechnung auf den besten verfügbaren Substituten zurück.

Masken und Totraum. Die Maske zwischen Gesicht und Analyzer fügt Totraum hinzu — Luft, die rückgeatmet statt erneuert wird. Standard-Mundstücke fügen ~30 mL hinzu; Vollgesichtsmasken 100–250 mL. Mehr Totraum bläht das scheinbare CO2 bei niedriger Ventilation auf und drückt VO2 leicht. Eine gut sitzende Maske ist wichtiger als der Totraum — Lecks sind schlimmer, weil Umgebungsluft unbemerkt eindringt und O2/CO2-Anteile Richtung atmosphärischer Werte zieht, was VO2 in einer Weise aufbläht, die keine Berechnung korrigieren kann.

Kalibrierung — zwei Arten. Span/Zero an Gas-Sensoren — die meisten Geräte kalibrieren beim Start automatisch gegen Umgebungsluft und fixieren die Referenz auf "20,93 % O2, 0,04 % CO2". Wenn die Umgebungsluft das tatsächlich nicht ist, sind deine Werte verschoben. Volumen-Kalibrierung — der Flow-Sensor braucht eine 3-Liter-Kalibrierungspumpe oder eine werkseitige Charakterisierung. Volumen-Fehler skaliert direkt auf VO2: 5 % Volumen-Fehler werden 5 % VO2-Fehler. Ohne saubere Kalibrierung rechne mit einer Tag-zu-Tag-Variabilität von ±5 %. Trends über Wochen sind weiterhin aussagekräftig; absolute Einzel-Session-Zahlen weniger.

Eine Anmerkung zur RER-Glättung

OpenSpiro repliziert bewusst nicht das 300-Atemzüge-Sliding-Window-Smoothing der offiziellen Calibre-App und auch nicht deren 0,85-Bayesian-Prior. Wir halten das für einen Designfehler: 300 Atemzüge entsprechen ungefähr 20–25 Minuten Belastungs-Atemfrequenz, weit länger als die metabolische RER-Dynamik, die der Wert eigentlich abbilden soll. Bei einem Stufentest lagt das angezeigte RER dann minutenlang dem echten Wert hinterher — lang genug, um die Lactate-Threshold-Inflektion komplett zu verfehlen. Der 0,85-Prior verzerrt zusätzlich jede frühe Session-Anzeige Richtung dieses Werts, unabhängig davon, was der Proband tatsächlich tut.

OpenSpiro nutzt stattdessen einen Median(5) + EMA-Smoother (~30 Sekunden, 5–10 Atemzüge), der transientes Detail erhält und gleichzeitig Single-Breath-Sensorrauschen unterdrückt. Single-Breath-RER kann dadurch bei hochintensiver Belastung kurzzeitig über 1,0 zeigen — das ist erwartet und physiologisch real, kein Artefakt.

Warum die Transparenz wichtig ist

Jede gespeicherte Session in OpenSpiro hält fest, welches Berechnungsmodell ihre Werte produziert hat, und CSV-/JSON-Exporte taggen Modell und OpenSpiro-Version. Wenn du eine Zahl je verteidigen musst — gegenüber einem Trainer, einem Sportwissenschaftler oder deinem zukünftigen Ich in drei Jahren — ist die Mathematik vollständig nachvollziehbar. Die komplette Pro-Geräte-Formel-Referenz steckt in der App im Help-Tab.

Quellen & weiterführende Literatur

  1. New methods for calculating metabolic rate with special reference to protein metabolism — Weir JB de V, J Physiol 1949
  2. Calculation of substrate oxidation rates in vivo from gaseous exchange — Frayn KN, J Appl Physiol 1983
  3. A new method for detecting anaerobic threshold by gas exchange — Beaver, Wasserman, Whipp, J Appl Physiol 1986
  4. Improved Magnus form approximation of saturation vapor pressure — Alduchov & Eskridge, J Appl Meteorol 1996
  5. Standardisation of spirometry — Miller, Hankinson, Brusasco et al., Eur Respir J 2005