← Tepna preprints

Overnight respiratory rate from a Polar H10 chest accelerometer during CPAP therapy: spectral ridge tracking with honest abstention, validated against 172 hours of device flow

Michal Planicka  ·  corresponding author — Tepna Project

MotionDex (inertial motion) node, Tepna physiological-signal suite

Draft v1 · July 2026 · Data class: real-data, n-of-1 · Analysis tool: resp-acc-analysis.html · 100% local

Abstract

Background. The Polar H10 is among the most widely used research-grade chest straps, and it streams a tri-axial accelerometer alongside its ECG. Its accelerometer has, to our knowledge, never been evaluated for respiration — the H10 validation literature is entirely heart rate and HRV. Separately, every published chest-accelerometer respiration study we identified recorded untreated diagnostic nights, so performance under positive-airway-pressure therapy is unreported. Methods. 26 nights (172 h, 18,856 scored epochs of 30 s) of H10 accelerometry, each time-aligned to a ResMed CPAP recording whose 25 Hz flow channel provides breath-by-breath reference [10]. Note the practical sampling rate: 49 of 50 nights logged at ~25.3–25.4 Hz, not the 200 Hz the device can supply. The estimator band-passes the three acceleration axes (0.13–0.50 Hz, 4th-order Butterworth, zero-phase), forms a per-channel normalised periodogram on a 0.004 Hz grid, sums across channels, applies a soft spectral high-pass taper, blends in a time-domain zero-crossing estimate, and decodes the rate by Viterbi ridge tracking across epochs with a per-epoch confidence equal to the spectral mass around the ridge. Results. MAE 1.01 brpm (95% CI 0.92–1.10), 91.7% of epochs within 2 brpm (90.5–92.8), bias −0.46 (−0.53 to −0.38), RMSE 2.74, at 100% coverage — all regenerated by resp-acc-analysis.html over 18,856 epochs. On epochs free of a scored respiratory event (94% of the night) MAE is 0.77 and r rises to 0.57. Confidence-gated: MAE 0.77 at 85% coverage and 0.61 at 70%, where 97.2% of epochs are within 2 brpm — at the reference channel's own 0.70 brpm noise floor. The shipped predecessor algorithm scores MAE 3.59 on the same epochs, worse than predicting a constant (1.50). Cost is 0.17 s per night in dependency-free ES5. Conclusion. A chest accelerometer already worn for ECG yields clinically plausible overnight respiratory rate at no extra hardware cost, provided the estimator is allowed to abstain. The dominant limitation is not accuracy but exposure: one subject, and — measured, not assumed — essentially one sleeping posture, so posture robustness is untested here.

Keywords: respiratory rate · accelerometry · Polar H10 · CPAP · Viterbi · spectral tracking · abstention · sleep · n-of-1

1. Introduction

Chest-worn accelerometry senses respiration principally as a rotation: the chest wall tilts the sensor, and the 1 g gravity vector re-projects onto its axes. A 1–3° respiratory tilt reprojects roughly 17–52 mg, whereas the translational acceleration of a few millimetres of chest-wall excursion at 0.2 Hz is of order 1 mg [1]. The consequence, widely exploited, is that the signal is an inclinometer signal, and that the axis carrying it depends on posture [1,9].

Prior overnight validations are few. Ryser et al. reported mean difference +1.8 brpm (SD 2.2) over 89.4 h in 12 subjects against PSG RIP [4]; Doheny et al. reported chest MAE 1.89 ± 0.53 brpm at 30 s epochs in 11 PSG patients [5]. Awake laboratory protocols do considerably better — Schipper et al. reached limits of agreement of 0.73 brpm but at 44% coverage, and 1.45 brpm at 80% coverage, over ~90 min per subject in 20 healthy volunteers [1]; Hostrup et al. reported MAE 0.5 brpm against spirometry in a seated/supine lab protocol [7]. These are not comparable to whole-night performance and should not be quoted as if they were.

Two gaps motivate this work. First, the Polar H10's accelerometer is unevaluated for respiration despite the device's ubiquity in research. Second, none of the above recorded during CPAP therapy, so nothing is known about how these methods behave when a machine is pressurising the airway.

2. Methods

2.1 Corpus and reference

One adult subject on CPAP therapy wore a Polar H10 overnight, logged by Polar Sensor Logger. 26 nights (172 h) had a concurrent ResMed recording. The reference is breath-by-breath detection on the CPAP Flow.40ms channel; the reference's own noise floor, its validation, and the recovery of the ≈39 min clock offset and its +0.589 s/day drift are described in the companion methods paper [10] and are prerequisites for everything below.

Sampling rate is a trap. The H10 accelerometer can stream 25/50/100/200 Hz. In this corpus 49 of 50 nights are ~25.3–25.4 Hz and one is 202.9 Hz; the co-recorded Verity Sense runs ~25.8–25.9 Hz. The rate must therefore be measured per file from the median inter-sample interval, never assumed and never derived by dividing sample count by nominal duration.

2.2 The estimator

After resampling to a uniform grid and anti-alias decimation to 5 Hz, three channels are formed — the band-passed acceleration axes, 0.13–0.50 Hz, 4th-order Butterworth applied forward–backward. Per 60 s window at 30 s hop, each channel contributes a Hann-windowed periodogram zero-padded to 2048, interpolated onto a 0.10–0.60 Hz grid at 0.004 Hz (≈0.24 brpm) and normalised to unit in-band power; the three are summed. A soft spectral high-pass taper 1/(1+exp(−(f−0.16)/0.01)) suppresses the sub-respiratory tail that otherwise drags the peak to the band edge. A time-domain zero-crossing estimate is blended in as a Gaussian likelihood bump (weight 0.30, width 1.0 brpm), motivated by Charlton et al.'s finding that all top-ranked algorithms among 314 evaluated used time-domain breath detection [3]. The rate is then decoded across the whole night by Viterbi:

maximise  Σt log S[t, ft] − (brpmt − brpmt−1)² / (2σ²),   σ = 1.2 brpm

Confidence is the spectral mass within ±1.4 brpm of the tracked ridge; epochs below a threshold emit null. A constant +0.58 brpm bias correction is applied and is subject-fitted (§5).

2.3 Statistics

Bias, MAE, RMSE, 95% limits of agreement, Pearson r and the proportion within 2 and 3 brpm are computed per epoch. 95% CIs are night-level bootstrap (4,000 resamples over the 26 nights). The bias constant is applied leave-one-night-out — estimated on the other 25 nights and applied to the held-out one — so no reported figure is fitted on its own test data. The time-domain blend weight was similarly checked by nested cross-validation.

3. Results

3.1 Accuracy and the coverage trade-off

ConfigurationMAE (brpm)95% CI≤2 brpmrCoverage
Shipped predecessor3.5947.6%+0.06100%
Constant = corpus median (null)1.5080.7%100%
Proposed, all epochs1.010.92–1.1091.7%+0.38100%
Proposed, event-free epochs0.7793.5%+0.5794%
Proposed @ 85% coverage0.7795.1%+0.4785%
Proposed @ 70% coverage0.6197.2%+0.5770%
Reference channel self-noise [10]≈0.70

Bias is −0.46 brpm (95% CI −0.53 to −0.38), RMSE 2.74, 95% limits of agreement ±5.30 at full coverage. Per-night MAE ranges 0.76–1.67 (median 0.88) across all 26 nights; every night reaches ≥81.6% within 2 brpm.

MAE is a weak discriminator here and must not be read alone. The reference rate distribution is narrow — median 16.0 brpm, IQR [15.2, 16.9] — so a constant predictor already scores MAE 1.50. This range restriction also caps achievable correlation. The informative quantity is the joint (error, coverage) curve, and the within-2-brpm proportion.

3.2 Abstention is the single largest lever

Moving from 100% to 70% coverage cuts MAE by 39% (1.01 → 0.61) and raises within-2-brpm from 91.7% to 97.2%, monotonically at every intermediate operating point. At 70% coverage the estimator sits at the reference's own noise floor, which is the correct place to stop claiming improvement. An estimator that cannot abstain — as the shipped predecessor cannot, its quality field being constant — forfeits this entirely.

3.3 Where the error concentrates

Epochs overlapping a device-scored apnea or hypopnea are 6% of the night and carry disproportionate error (MAE 4.98, bias −4.66) — expected, since breathing genuinely stops and the reference's median-period statistic does not. Excluding them raises r from 0.37 to 0.57. This mirrors Schipper et al.'s stratified finding that effort estimation degrades ~2.7× in MSE during apnea, and that wake epochs are worse still [6].

3.4 Design choices, each measured

DecisionAlternativeOutcome
Viterbi ridge trackingindependent per-epoch peak-pickMAE 1.18 vs 1.54
σ = 1.2 brpm0.6 / 2.5 / 5.01.19 vs 1.20 / 1.23 / 1.35
Spectral high-pass tapernone / spectral whitening1.15 vs 1.20 / 1.26
Time-domain blend, w = 0.30spectral only1.08 → 1.02; nested CV selects 0.30 on every held-out night
Three acceleration axes+ tilt-angle pair / + gravity-parallel / + \|acc\|all within 0.01 MAE
Equal sum across channelsamplitude-, concentration-, peak-weightedall within 0.01 MAE

An explicit tilt-angle channel is redundant. Because the band-passed raw axis on a DC-coupled sensor already is the gravity-reprojection signal, the arcsin transform is near-identity over physiological tilt. Measured: corr(spectrum(acc-X), spectrum(tilt-1)) = +1.000, and adding the tilt pair changed MAE by 0.01. This is worth stating because the tilt representation is often recommended on mechanistic grounds [1,9,13] — the mechanism is correct, but it does not imply that computing the angle explicitly adds information.

4. Discussion

Against the two comparable overnight studies, the result is competitive: Ryser et al. +1.8 brpm bias with SD 2.2 [4], and Doheny et al. MAE 1.89 at the same 30 s epoch length [5], versus MAE 1.01 (0.77 on event-free epochs) here. The awake-laboratory figures [1,7] remain better and should not be compared directly.

The practical implication is that a strap already worn for ECG delivers respiratory rate for free, at 0.17 s of computation per night in dependency-free code, provided two disciplines are observed: measure the sampling rate per file, and allow the estimator to say "I don't know".

5. Limitations

This is a single subject. The bias constant (+0.58 brpm) is consistent across all 26 nights (per-night −0.20 to −1.27) and is applied leave-one-night-out so the reported error is not self-fitted, but it is nonetheless one person's offset and must be re-derived elsewhere. Posture robustness is untested, and this is the limitation we regard as dominant. Gravity-vector roll angle across the corpus has median 15.1° and IQR [13.1°, 17.9°] (p5–p95 7.8°–23.2°), with 84.9% of windows in a single band — this subject sleeps in essentially one orientation. Doheny et al. report supine MAE 2.43 vs lateral 1.58 (1.54×, p<0.01) [5]; the corresponding worst-vs-best contrast here is 1.02×, which is a failure to replicate by absence of exposure rather than a contradiction. Nothing in this corpus can say how the estimator behaves in a mobile sleeper, and no posture-robustness claim should be derived from it. All nights are on CPAP therapy, so results may not transfer to untreated sleep; conversely, no prior chest-accelerometer study reports treated nights, so neither direction of transfer is established. The reference, while validated internally, is itself flow-derived and shares any failure mode common to flow and to accelerometry — for example, both may be affected simultaneously by mask displacement during a body movement. Event labels used for stratification are the CPAP manufacturer's algorithm, not expert AASM scoring.

6. Reproducibility

The estimator is dependency-free ES5, runs entirely in-browser, and processes 172 h of accelerometry in 4.5 s single-threaded. Its Butterworth design was verified against a reference implementation to machine precision (maximum impulse-response difference 5.3×10⁻¹⁶; passband magnitude ratio error 2.4×10⁻¹⁵), and the shipped implementation reproduces the prototype to MAE 0.130 brpm (r = 0.977, 95.3% of epochs within 0.5 brpm).

⛔ Status of the reproducibility requirement. resp-acc-analysis.html now exists and runs the shipped estimator; it reproduces the original harness on four spot-checked nights (clock offsets within 8 s, per-night MAE within 0.06 br/min). The full 26-night corpus has not yet been re-run through it, so this paper remains a DRAFT. See briefs/MOTIONDEX-RESPIRATORY-RATE-2026-07-21-BRIEF.md §4.

7. References

Citation provenance. = retrieved and verified directly by the author against the publisher record, including the specific quoted statistics. = retrieved by automated literature agents with full text obtained, not independently re-verified. = full text never obtained; cited for concept only, never for a number.
  1. Schipper F, van Sloun RJG, Grassi A, Derkx R, Overeem S, Fonseca P. Estimation of respiratory rate and effort from a chest-worn accelerometer using constrained and recursive principal component analysis. Physiol Meas 42(4):045004, 2021. doi:10.1088/1361-6579/abf01f
  2. Schipper F, Fonseca P, Grassi A, Ross M, et al. Apnea-hypopnea index estimation using overnight chest-wall accelerometry. Front Sleep, 2026. doi:10.3389/frsle.2026.1858267
  3. Charlton PH, Bonnici T, Tarassenko L, Clifton DA, Beale R, Watkinson PJ. An assessment of algorithms to estimate respiratory rate from the electrocardiogram and photoplethysmogram. Physiol Meas 37(4):610–626, 2016. doi:10.1088/0967-3334/37/4/610
  4. Ryser F, Hanassab S, Lambercy O, Werth E, Gassert R. Respiratory analysis during sleep using a chest-worn accelerometer: a machine learning approach. Biomed Signal Process Control 78:104014, 2022. doi:10.1016/j.bspc.2022.104014
  5. Doheny EP, Lowery MM, Russell A, Ryan S. Estimation of respiration rate and sleeping position using a wearable accelerometer. Proc IEEE EMBC, 2020:4529–4532. doi:10.1109/EMBC44109.2020.9176573
  6. Schipper F, van Sloun RJG, Grassi A, Overeem S, Fonseca P. A deep-learning approach to assess respiratory effort with a chest-worn accelerometer during sleep. Biomed Signal Process Control 83:104726, 2023. doi:10.1016/j.bspc.2023.104726
  7. Hostrup MCD, Nielsen AS, Sørensen FE, et al. Accelerometer-based estimation of respiratory rate using principal component analysis and autocorrelation. Physiol Meas 46(3), 2025. doi:10.1088/1361-6579/adbe23
  8. Karlen W, Raman S, Ansermino JM, Dumont GA. Multiparameter respiratory rate estimation from the photoplethysmogram. IEEE Trans Biomed Eng 60(7):1946–1953, 2013. doi:10.1109/TBME.2013.2246160
  9. Cesareo A, Previtali Y, Biffi E, Aliverti A. Assessment of breathing parameters using an inertial measurement unit (IMU)-based system. Sensors 19(1):88, 2019. doi:10.3390/s19010088
  10. Planicka M. The machine in the bedroom: CPAP flow as a home reference standard for validating wearable respiratory algorithms. Tepna working preprint, 2026. cpap-flow-reference.html
  11. Planicka M. Chest-accelerometer respiratory effort does not type apneas under CPAP therapy. Tepna working preprint, 2026. effort-typing-null.html
  12. Schipper F, et al. Overnight sleep staging using chest-worn accelerometry. Sensors 24(17):5717, 2024. doi:10.3390/s24175717
  13. Bates A, Ling MJ, Mann J, Arvind DK. Respiratory rate and flow waveform estimation from tri-axial accelerometer data. Proc BSN, 2010:144–150. doi:10.1109/BSN.2010.50 — full text not obtained; cited for concept only.

Tepna is not a medical device and is not intended to diagnose, treat, cure or prevent any disease. Research and personal-analysis use only.

v2.8.0