OxyDex (oximetry) · PulseDex / ECGDex (cardiac) nodes, Tepna physiological-signal suite
Problem. How do you state a consumer sensor's measurement uncertainty (σ) when you own no laboratory-calibrated reference? Approach. A three-rung recipe that needs no certified instrument: (1) repeatability — random scatter from repeated reads, estimated with no reference; (2) transfer-standard agreement — promote the best device on hand (a chest-strap ECG) to a working reference and report Bland–Altman bias, 95% limits of agreement and the accuracy root-mean-square (Arms), recovering the test device's random σ by variance subtraction; (3) the three-cornered hat — with three devices measuring the same quantity at once, solve each one's individual variance with none assumed canonical. Data. The pulse-oximeter heart-rate channel (Wellue O2Ring) against a Polar H10 ECG strap, co-recorded over twenty-six overnight sessions (291,561 paired 1-Hz seconds), plus a Polar Verity Sense armband as the third corner; the analysis tool folder-ingests a night's raw captures and derives every corner from raw signal. Results. The O2Ring pulse carries a negligible mean bias (−0.20 bpm) but a second-by-second random σ of ≈3.2 bpm on the clean nights (one motion-corrupted night, 06-12, reached 9.9 bpm), Arms 3.3 bpm. With all three corners reduced from raw signal — H10 HR from raw ECG (Pan-Tompkins QRS), Verity HR from raw PPG (PPGDSP), O2Ring native pulse — a fused-weight artifact-robust three-cornered hat over the full twenty-six-night folder corpus (291,561 s, production SQI-gated Verity) returns σ 2.41 / 1.28 / 1.42 bpm (O2Ring / H10 / Verity), each an across-night 95% bootstrap CI. The plain hat's variance decomposition has breakdown point zero — a single transient artifact detonates it (a spurious-QRS burst on one night, 06-12, inflated the raw per-window σH10 to ≈9.6 bpm) — so each per-second pairwise difference is weighted by a per-corner beat-confidence (window-relative beat-density × signal-quality, self-calibrating and arrhythmia-safe) under a gentle cross-sensor consensus floor; the burst is then down-weighted in place and 06-12 stays in the corpus as a clean ≈2.6-bpm H10 corner rather than being discarded. The raw-ECG H10 corner is the quietest (1.28, resolving positive in 21/26 nights), confirming it as the gold leg; the O2Ring pulse is the noisiest (2.41) and the raw-PPG Verity sits between (1.42). (An earlier deep hat over six hand-selected clean windows had instead put Verity noisiest at 3.50 — a small-sample artifact of one motion-contaminated Verity window; the twenty-six-night corpus, with a cleaner production PPGDSP Verity derivation and more O2Ring motion nights, redistributes the coupled variance and settles the ordering.) None is assumed canonical; the ranking reflects error structure, not fidelity (the O2Ring's firmware emits an internally-smoothed integer pulse, visible as diagonal Bland–Altman banding, that deflates its variance). The ECG-derived H10 matches Polar's onboard RR to −0.04 bpm, confirming the reference leg. Channel limit. Only the HR channel is testable — the ECG and PPG references carry no SpO₂, so the O2Ring's oxygen-saturation trueness cannot be established here. Capture lesson. The Verity Sense's onboard HR/PPI streams were empty (all-zero / header-only), yet its HR was fully recoverable from the raw photodiode signal at SQI ≈ 1.0 — raw-signal logging, not the device's firmware estimate, is what made the third corner possible. This is a single-subject methods pilot — it demonstrates the apparatus, not a population accuracy claim.
Keywords: measurement uncertainty · metrology without a standard · three-cornered hat · Gray–Allan variance · Bland–Altman · pulse oximetry · heart rate · raw PPG / ECG · QRS detection · consumer wearables
Every gadget that reports your heart rate is a little bit wrong. The usual way to measure how wrong is to compare it against a lab-grade “truth” instrument — but ordinary people don't own one. So how do you put a real error number on a fitness ring without a reference? This paper uses three tricks that need no certified equipment: (1) measure the same thing repeatedly and look at the scatter (that gives precision); (2) borrow the best device you do own — a chest-strap ECG — as a stand-in reference; and (3) the clever one: wear three devices at once and use a bit of algebra (borrowed from atomic-clock testing) to solve for each device's own error with none of them assumed perfect.
What we found, on one person across several nights: the O2Ring's average heart rate is essentially correct (off by a third of a beat), but any single second can be wrong by ~4 beats — fine for an overnight summary, not for instant readings. The most useful surprise was about capture, not accuracy: one armband's built-in heart-rate output was completely empty (its firmware never locked on), yet the raw light-sensor signal it recorded was perfect — we reconstructed a clean heart rate from it ourselves. Lesson: always log the raw waveform, not just the device's own number. This is a real-data methods demonstration on one subject — it shows the recipe works, not a population accuracy rating for these products.
A number reported by a sensor is only as useful as the uncertainty attached to it. The textbook way to obtain that uncertainty is to compare against a reference traceable to a national standard — a calibrated instrument the consumer device manufacturer, but rarely the end user, can access. This note asks the practical question that arises when no such reference is on the bench: given two or three imperfect devices, what can be said rigorously about each one's σ? The answer separates cleanly into two quantities that are routinely conflated. Precision (repeatability) is random scatter and needs no reference at all — only a stable thing to measure repeatedly. Trueness (bias) is systematic offset and fundamentally requires a comparison. We treat them separately and add a third tool — the three-cornered hat from frequency metrology — that recovers each device's own variance when three measure the same quantity simultaneously, assuming none is perfect.
Three devices were worn together: a Polar H10 chest strap (single-lead ECG, the clinical reference for inter-beat timing), a Wellue O2Ring ring oximeter (SpO₂ + photoplethysmographic pulse rate at 1 Hz), and a Polar Verity Sense arm-band (PPG heart rate). Each device exposes both a firmware-computed heart rate and, via Polar Sensor Logger, its raw waveform (H10 raw ECG at ~130 Hz; Verity raw PPG at ~176 Hz). Where the analysis benefits — and wherever a device's firmware HR failed — we work from the raw signal with the suite's own detectors (ECGDSP Pan-Tompkins QRS; PPGDSP optical beat detection) rather than the vendor's estimate. The H10 is the most precise heart-rate source (an electrical R-wave is sharper than any optical pulse), so it serves as the transfer standard for the two optical devices.
The devices share no clock and no timezone, but each stamps local civil time. Under the suite's time model every record is stored as UTC-normalized floating wall-clock milliseconds (tMs = Date.UTC(y,mo−1,d,h,mi,s)), so two devices that record the same wall-clock second produce the same tMs by construction — alignment is then exact-second intersection with no zone negotiation. H10 R-R intervals are converted to instantaneous heart rate (60000/RR) and averaged into 1-Hz buckets; the O2Ring pulse is natively 1 Hz. We keep only seconds present in both streams, discarding the O2Ring's -- contact-loss rows and any out-of-range (<30 or >220 bpm) sample.
(1) Repeatability σ. Short-term precision with no reference: the 1-Hz residual after a 7-point rolling median, summarized by a robust SD (1.4826·MAD). On the H10 this is a genuine precision figure; on the O2Ring it is degenerate because the device's reported pulse is internally smoothed (successive seconds are frequently identical), so the O2Ring's precision is read instead from its scatter against the H10.
(2) Transfer-standard agreement. With the H10 promoted to a working reference, the per-second difference d = O2Ring − H10 gives the mean bias d̄, the SD of differences s_d, the 95% limits of agreement d̄ ± 1.96·s_d, and the accuracy root-mean-square Arms = √(d̄² + s_d²) — the single number used to grade pulse devices. Because the reference is itself slightly noisy, the test device's random uncertainty is recovered by variance subtraction:
(3) Three-cornered hat (Gray–Allan). With three devices A, B, C measuring the same true HR, and pairwise difference variances V_AB, V_AC, V_BC, each device's own variance follows with none assumed canonical:
Shared physiological variation cancels in the differences, leaving device error; a negative output flags correlated errors that break the independence assumption. The estimator is implemented in the tool and runs on every window where all three usable streams coexist — here, the H10 ECG, the raw-recovered Verity PPG, and the O2Ring pulse.
(3′) The fused-weight, artifact-robust hat. The variance decomposition above is a difference-of-variances, and an ordinary variance has breakdown point zero: a single transient artifact — one device's detector mis-firing for a few dozen seconds — detonates the whole estimate. This is not hypothetical here. On the night of 06-12 a spurious-QRS burst in the raw-ECG derivation inflated the raw per-window σH10 from ≈1.5 to ≈9.6 bpm, an artifact large enough to reorder the corners on its own. Rather than discard the night (throwing away ~15,000 good seconds to remove a few bad ones), the tool solves a confidence-weighted variance for each pairwise difference. Every corner emits a per-second beat-confidence c = density_trust × quality_trust ∈ [0,1]: density_trust is a window-relative Hampel score on the local beat rate (a burst of fabricated beats spikes the density far above the record's own median), quality_trust is the detector's own signal-quality index (a burst also depresses SQI). Both cues must fire for c to fall (min-combined), which is what keeps it arrhythmia-safe — genuine ectopy or AF is high-variability but clean, so its density is irregular yet its SQI stays high and it is preserved. Each difference series is then weighted by the product of its two corners' confidences under a gentle cross-sensor consensus floor (a Tukey biweight, C=30 bpm, that only trims a second where all three devices grossly disagree). The estimator is self-calibrating (every threshold is a within-record median/MAD, no corpus-tuned constant), O(n), and reduces exactly to the plain hat when every c=1. Under it the 06-12 burst is down-weighted in place: the night stays in the corpus and contributes a clean σH10 ≈ 2.6 bpm instead of ≈9.6.
sigma-no-reference-analysis.html.
| Night | Paired s | Bias | SD | 95% LoA | Arms | Pearson r | σ ref-free |
|---|---|---|---|---|---|---|---|
| 06-10 | 17,125 | −0.11 | 3.29 | ±6.5 | 3.30 | 0.59 | 3.19 |
| 06-11 | 20,203 | −0.11 | 3.63 | ±7.1 | 3.64 | 0.61 | 3.54 |
| 06-12 ⚑ | 15,415 | −1.31 | 9.87 | ±19.3 | 9.96 | 0.38 | 9.83 |
| 06-14 | 9,606 | −0.01 | 2.60 | ±5.1 | 2.60 | 0.57 | 2.47 |
| 06-15 | 14,930 | −0.32 | 3.57 | ±7.0 | 3.58 | 0.71 | 3.47 |
| 06-16 | 7,588 | +0.01 | 2.91 | ±5.7 | 2.91 | 0.52 | 2.79 |
| 06-18 † | 1,829 | +0.03 | 2.24 | ±4.4 | 2.24 | 0.78 | 2.08 |
| 06-24 | 14,367 | −0.06 | 3.61 | ±7.1 | 3.61 | 0.72 | 3.52 |
| 06-27 | 14,507 | −0.36 | 3.62 | ±7.1 | 3.64 | 0.68 | 3.52 |
| 06-28 | 6,563 | +0.21 | 3.03 | ±5.9 | 3.04 | 0.65 | 2.92 |
| Pooled (clean, 25 nt) | 276,146 | −0.13 | 3.28 | ±6.4 | 3.28 | — | 3.17 |
| Pooled (all, 26 nt) | 291,561 | −0.20 | 3.92 | ±7.7 | 3.93 | 0.74 | 3.84 |
The O2Ring's pulse rate is essentially unbiased against ECG — the pooled clean offset is −0.13 bpm, well inside a single quantization step. Its random uncertainty, however, is substantial: a reference-free σ of ≈3.2 bpm on clean nights, i.e. a typical second's pulse can be wrong by several beats even when the average is right. The accuracy figure Arms ≈ 3.3 bpm sits at the boundary of the ±5 bpm / 10% tolerance commonly cited for wrist/ring HR. Including the one motion-corrupted night (06-12) inflates every pooled scatter statistic — σ rises to 3.8 bpm and the LoA widen to ±7.7 — which is exactly why a per-night quality flag, not a single grand pool, is the honest summary.
The H10's own short-term repeatability is 0.82 bpm — small enough that subtracting it changes the recovered O2Ring σ by under 0.15 bpm (3.28 → 3.17), which both justifies treating the strap as a transfer standard and shows the result is insensitive to that assumption.
O from x = (O+H)/2, y = O−H and the locus is the line y = −2x + 2O) — rather than the formless scatter a continuously-valued device leaves. Second, successive seconds are frequently identical, so the device's own second-to-second variance is small because the firmware averages real beat-to-beat variation away, not because it tracks the instantaneous rate better. This is why a same-device self-residual is a degenerate precision proxy for the O2Ring (we read its precision from the scatter against the H10 instead) and — decisively — why the three-cornered hat in §3.2 places the O2Ring's σ below the 130 Hz ECG's: smoothness deflates variance. That ranking is error structure, not sensor fidelity.The Verity Sense was meant to be the third corner, and its onboard outputs nearly defeated it: across every night the heart-rate stream is all-zero and the pulse-interval export is a header with no rows — the band's firmware never locked a pulse. But Polar Sensor Logger also recorded the raw photodiode signal, and the embedded algorithm's failure does not mean the signal is gone. Running the raw PPG through the suite's own optical pipeline (PPGDSP: 0.5–8 Hz band-pass, channel selection, systolic-foot detection, per-beat SQI) recovers a clean heart rate where the firmware reported nothing. We did the same for the reference leg: rather than trust Polar's onboard R-R, we re-derived the H10 heart rate from its raw ECG with the suite's Pan-Tompkins detector (ECGDSP).
| Source | Onboard usable | Raw-recovered (PPGDSP) | Mean SQI | Clean beats |
|---|---|---|---|---|
| Verity HR stream (all nights) | 0 samples | — | — | — |
| Verity PPI stream (06-16) | 0 beats (header only) | — | — | — |
| Verity raw PPG (06-16/17) | n/a | full HR series, ~176 Hz | 0.95–1.00 | 96–100% |
The first window came on the night of 06-16: the Verity raw PPG runs ~6 hours and an H10 ECG recording begins at 01:06, while the O2Ring records throughout — so for ~2 hours (01:06–03:04, 7,057 paired seconds) all three devices observe the same heart at once. With the three streams aligned on the shared floating tMs grid, the three-cornered hat recovers each device's own σ with none assumed canonical. The tool runs this as multi-window machinery (an array of windows, each solved by the same kernel; see §5), reporting a per-device σ distribution — median, a 95% CI, the window count and the total simultaneous seconds — rather than a bare point. The analysis tool folder-ingests a whole night's raw captures — auto-detecting the O2Ring, H10 and Verity files, deriving each corner in parallel (Web Workers) and applying a decorrelation quality gate that excludes a night whose Verity extraction failed — and solves the three-cornered hat across the full twenty-six-night corpus: of 58 indexed nights, 31 are trio-eligible and 26 resolve a clean across-night hat (291,561 simultaneous seconds, each retained window ≥1,000 s and SQI-gated), reported in Table 3 as a per-device σ distribution — median, a 95% bootstrap CI over the nights, the night count and the total simultaneous seconds. (An earlier deep hat over six hand-selected clean windows, 63,231 s, was reported previously and is retained only as a historical note in §3.2 below; the folder-ingest corpus supersedes it.) Each retained night is solved by the fused-weight robust hat (§2.3.3′), so a night with a transient single-corner artifact is kept and down-weighted in place rather than discarded: 06-12 — whose spurious-QRS burst would have detonated the plain hat to σH10 ≈ 9.6 — remains in the corpus and contributes a clean σH10 ≈ 2.6. The five non-solved nights of the 31 eligible are excluded for structural, not artifact, reasons — three for insufficient three-way overlap (06-13, 06-17, 06-19, each < 100 s after intersection) and two for a missing Verity HR (06-30, 07-05) — and are surfaced, not hidden. The H10↔O2Ring leg is still carried as a built-in control, and any negative TCH variance (five nights, where H10's variance resolved below zero under the correlated-error test) is surfaced rather than clamped.
| Device / pair | σ — 26-night hat [95% CI] | bias | SD | 95% LoA | Arms | r |
|---|---|---|---|---|---|---|
| O2Ring (pulse) | 2.41 [2.18–2.61] | — device σ, reference-free — | ||||
| H10 (ECG-derived) | 1.28 [0.96–1.65] | — device σ, reference-free — | ||||
| Verity Sense (PPG) | 1.42 [0.96–1.88] | — device σ, reference-free — | ||||
| H10 − O2Ring (control) | — | +0.20 | 3.92 | ±7.7 | 3.93 | — |
| H10 − Verity | — | +0.02 | 3.62 | ±7.1 | 3.62 | — |
| Verity − O2Ring | — | +0.18 | 3.63 | ±7.1 | 3.64 | — |
The H10↔O2Ring leg doubles as the hat's built-in control leg: per night it holds bias≈0 with an SD of ≈2–4 bpm (the O2Ring's own noise), so a night whose whole alignment drifts far outside that band is flagged as mis-aligned rather than trusted. A within-night transient — 06-12's spurious-QRS burst — is a different failure, and the fused-weight hat now handles it directly: the burst seconds are down-weighted by their collapsed beat-confidence, so the night is retained and its σH10 lands at ≈2.6 (it detonated to ≈9.6 under the plain hat) rather than the whole night being thrown away. The twenty-six-night fused hat ranks σ as H10 (1.28) < Verity (1.42) < O2Ring (2.41) bpm: the raw-ECG H10 is the quietest corner and the O2Ring pulse the noisiest, with Verity's CI overlapping the H10's (the two are statistically close). Historically, an earlier deep hat over six hand-selected clean windows (63,231 s) had instead ranked O2Ring (1.83) ≈ H10 (2.04) < Verity (3.50) — but that reflected a single bad Verity window (σ 6.2 bpm on 06-16/17) dominating a tiny sample; the full corpus, with a cleaner production SQI-gated PPGDSP Verity derivation and more O2Ring motion nights, settles the ordering and shows that the apparent Verity noisiness — not the O2Ring's quiet — was the small-sample artefact. The robust fact is the gold leg: the raw-ECG H10 is the tightest corner. Its hat σ (1.28 bpm) is not in tension with the ≈0.8 bpm repeatability quoted in §2.3/§3.1 — the two measure different quantities: §2.3's 0.8 bpm is the H10's short-term precision (the 1-Hz residual left after a rolling median, i.e. tracking jitter once slow trend is removed), whereas the three-cornered-hat 1.28 bpm is the H10's total reference-free variance over the overlap, which additionally absorbs 1-Hz bucketing and the beat-to-beat granularity of an instantaneous ECG HR against the smoothed peers. A sanity check anchors the reference: the ECG-derived H10 HR matches Polar's onboard R-R to a −0.04 bpm bias (SD 2.27, r 0.85, n 7,224) — two independent QRS algorithms on the same heart agree, so the H10 leg is sound whichever way it is computed.
The recipe answers the opening question concretely. Without any certified instrument we can state that the O2Ring's pulse rate is unbiased to within a beat and carries a random uncertainty near 3.2 bpm at rest — a number good enough to trust an overnight average while distrusting any single second, and good enough to flag a night where motion has destroyed the signal. The separation of precision from trueness is what makes this defensible: repeatability needed no reference; bias needed one, and a chest-strap ECG — itself uncertified but an order of magnitude more precise — is a sound stand-in whose residual noise we measured and subtracted. The three-cornered hat then removed even that mild assumption where all three devices co-recorded, putting a number on each device with none held canonical — solved by folder-ingesting each night's raw captures across a twenty-six-night corpus (291,561 s) with a fused-weight robust hat that down-weights transient artifacts in place: the raw-ECG H10 is the quietest corner (1.28 bpm, the gold leg), the O2Ring pulse the noisiest (2.41), and the raw-PPG Verity between (1.42), its CI overlapping the H10's. An earlier six-window deep hat had instead put Verity noisiest (3.50) — a small-sample artefact of one bad Verity window that the full corpus corrects, a reminder that a σ ranking from too few windows is provisional. The sharpest practical lesson was unexpected: the third device's firmware produced nothing, yet its raw signal was pristine — so the right thing to log is the waveform, and the right thing to run on it is a detector you control.
tools/o2ring-finger-validate-batch.mjs), the ring's firmware HR is statistically indistinguishable from the chest ECG (−0.027 bpm, 0.6 σ). The mechanism behind the −0.299 has since been isolated: it is the shape of the interval distribution, dominated by its variability. Regressing the per-block gap on each block's own R-R statistics over 1,670 real 300-beat blocks gives gap ≈ 0.2989 − 8.7175·CV + 0.2121·skew (R² = 0.601, residual SD 0.309 bpm against a raw 0.489), with r(gap, CV) = −0.719 and r(gap, skew) = +0.690 while heart-rate level itself is negligible (r = −0.134). Real overnight R-R has mean CV 0.0522 and mean skew −0.671; substituting those returns −0.298 against the measured −0.299. That also accounts for the synthetic series quoted above — smooth, pause-injected and trended runs give +0.03, +0.54 and −0.03 because each carries a different CV and skew, not because the effect is capricious. The gap is therefore a property of the interval distribution the two statistics are applied to, and of nothing about either device — which is precisely why it cannot be attributed to one. No per-device HR bias may be read off cross-node epoch HR until the nodes agree on one statistic. So the hat's blindness to bias is not merely structural here: there is at present no validated bias figure for any corner to be blind to. Nor can this corpus test the assumption its σ rests on: because the chest-ECG is one of the three corners, the hat's σECG² is algebraically identical to the covariance of the other two corners' reference-relative errors (verified numerically to 7×10⁻¹⁴ on the committed corpus), so an independence or accuracy check run against that reference returns its own input and has exactly zero power — any "excess correlation" reported that way would be fabricated. A hat cannot be validated using one of its own corners as the reference; it requires a genuinely external Nth device, chosen so the truth leg is not mechanistically twinned with a corner (the ResMed oximeter's 1 Hz pulse is the candidate here, though it shares photoplethysmography with the O2Ring). The σ values reported above are therefore precision estimates, not accuracy statements. (x) σ here is a σ at one window length, and that parameter is not stated anywhere above. The hat is fed 291,561 simultaneous seconds over twenty-six nights — a median of roughly 11,200 s per night — but window length is treated throughout as a consequence of what the recordings happened to contain, not as an analysis choice. It is one. Re-running this same fused-weight estimator on an independent seventeen-night corpus (the same three devices, box-captured, host-axis corrected) while varying only how many simultaneous seconds reach the hat gives a monotonic rise in every corner: σVerity 2.36 → 3.51 (+49 %), σO2Ring 2.34 → 2.99 (+28 %), σH10 1.41 → 1.78 (+26 %) from a one-hour window to a whole night (tools/tch-window-sensitivity.mjs). The mechanism is not mysterious — a longer window admits more of the restless margins of the night, where the corners disagree most — but the consequence is that two analysts with the same devices, the same nights and the same estimator can publish σ differing by half again, and neither is wrong. The figures above should therefore be read as σ at ≈11.2 ks per night, and are not directly comparable to a σ derived from shorter or longer windows. Two honest caveats were attached to this caveat, and one of them was false. It read: "the sensitivity has not been characterised on this paper's own corpus, whose raw capture is no longer available to re-derive." The raw capture is available — it is the phone-captured tree these nights were logged into, still on disk, with all three streams present for every night named in this section. The claim was never checked; it was inferred. It has now been characterised on this paper's own nights (2026-08-15, 24 three-way-eligible nights re-folded by tools/trio-batch.mjs, swept by tools/tch-window-sensitivity.mjs), and the result both vindicates and corrects the surviving caveat:
| corner | full committed corpus (52 nights, 2026-08-15) | this paper's own nights (24 nights) | as published, box corpus (17 nights) |
|---|---|---|---|
| O2Ring | 2.18 → 2.84 (+30 %) | 1.98 → 2.57 (+30 %) | 2.34 → 2.99 (+28 %) |
| H10 | 0.78 → 1.13 (+45 %) | 0.61 → 0.92 (+51 %) | 1.41 → 1.78 (+26 %) |
| Verity | 0.58 → 0.72 (+24 %) | 0.45 → 0.47 (+4 %) | 2.36 → 3.51 (+49 %) |
The caveat that the magnitude may not transfer was right, and the dependence replicates everywhere: every corner's σ is larger over a whole night than over an hour, on all three corpora. Beyond that, the corpus has now grown enough to correct the reading this section carried on 2026-08-15, and the correction is a lesson about sample size rather than about the devices. That reading called the per-corner magnitudes a reorder — Verity largest on the box corpus (+49 %) and smallest here (+4 %), H10 the reverse. Re-run across the full committed corpus — 52 nights and 903,265 simultaneous seconds, a 3.1× larger sample than the 26 nights and 291,561 s behind this paper's headline — the Verity corner moves from +4 % to +24 %, i.e. most of that dramatic contrast was the 24-night subset, not a property of the capture path. What survives corpus expansion is narrower and more useful: the O2Ring corner transfers (+28 / +30 / +30 % across three independent corpora), the H10 corner genuinely does differ by capture path (+26 % on the box against +51 % and +45 % on the two phone-captured samples), and the Verity corner is simply unstable across samples (+49 / +4 / +24 %) — which is itself the finding, since it is the corner whose sensitivity a practitioner would most want to borrow. (xi) σ here is also a σ at one DSP generation — that parameter is not stated either, and it is not per-corner. The recipe derives every corner from raw signal, so each σ is a function of the code that produced the intervals, and that code moves: ppgdex-dsp.js changed 20 times in the three weeks after 2026-08-08, including a filtfilt running unpadded from zero state (a DC-sized transient at both record ends), the frequency domain computed over correctRR's substituted intervals, and a crystal axis running backward that was hiding real dropouts. Measured on one night (2026-08-04, 22.5 ks, H10 and O2Ring corners held byte-identical, only the PPG generation varied): σVerity 2.14 → 4.25 bpm. And because the hat is coupled, the same swap moved σH10 1.64 → 1.85 with the ECG code unchanged — so a per-corner σ from this estimator is a function of the generation of all three DSPs, not of its own. ⚠️ The generation behind this paper's headline 2.41 / 1.28 / 1.42 is not recorded anywhere, so unlike the corpus (26 nights) and the sample (291,561 s), which are stated, those figures are not presently re-derivable. A reference-free σ needs three things named to be reproducible — corpus and n, window length, and the generation of every corner's DSP — and this paper states the first only.
The second published statement — that the rise is monotonic in every corner — fails, and fails wider than first reported. On the full corpus two corners are non-monotonic, not one: Verity runs 0.58 → 0.54 → 0.56 → 0.67 → 0.73 → 0.67 → 0.67 → 0.72 across the sweep (peaking at 11.2 ks, the paper's own window length, then falling back), and the H10 dips 0.78 → 0.74 before rising to 1.13. Only the O2Ring is monotonic throughout. "Monotonic in every corner" describes the box corpus; it does not describe the phenomenon.
What this comparison is and is not. The sweep runs through the node-export path, not the raw-ingest fused-weight hat that produced this paper's headline σ (1.28 / 1.42 / 2.41 bpm) — the two paths were known not to agree in absolute terms (tools/tch-fused-corpus.mjs re-fit the published hat on node-exports and did not reproduce it). So the absolute σ in the table above must not be read as a restatement of the headline figures; only the relative window-length sensitivity is the comparable quantity, and only that is claimed above.
That blanket "the paths disagree" is now too coarse, and controlling window length is what sharpens it. Truncating the 52-night node-export sweep to this paper's own 11,214 s median window — rather than comparing a whole-night σ against an 11.2 ks σ, which is precisely the error limitation (x) exists to name — gives O2Ring 2.44 [2.28–2.77], H10 0.93 [0.68–1.13], Verity 0.72 [0.47–0.91] bpm against the published 2.41 / 1.28 / 1.42. The O2Ring corner reproduces across the two pipelines (2.44 vs 2.41, within 1.2 %, the published value sitting inside the CI); the H10 and Verity corners do not — each published value falls outside its interval, both in the direction of the node-export path reporting a quieter corner. So the path disagreement is not global: it falls on the two corners the node-export path summarises most aggressively, and it was partly masquerading as a path effect while being a window-length effect. ⚠️ It must not, however, be read as evidence about those two corners' own summarisation. The hat is linear in the pairwise variances — σ²H10 = ½(VHV + VHO − VVO) — and two of those three contain the Verity corner, so a change confined to one corner's processing moves all three recovered σ. Measured 2026-08-27 on one night (2026-08-04, 22.5 ks) with the H10 and O2Ring corners held byte-identical and only the PPG DSP generation varied: σVerity 2.14 → 4.25 and σH10 1.64 → 1.85, with the ECG code unchanged. “Corner X's σ moved, therefore corner X's processing differs” is therefore not a valid inference from this estimator, and the per-corner reconciliation owed below must hold the other two corners fixed to mean anything. A per-corner reconciliation of the two pipelines is owed and is not yet done; characterising the sensitivity through the raw-ingest path on these same nights remains possible and likewise not yet done. This is the same discipline this project already applies to clock rate, where a ppm figure may never be quoted without the span it was measured over.
sigma-no-reference-analysis.html and drop your capture folder — it auto-detects each night's O2Ring, H10 and Verity files, derives every corner from raw signal in parallel (Web Workers), and computes the three-cornered hat across all trio-eligible nights. Figures 1–2 and Tables 1–3 populate live; export sigma-no-reference-results.csv, -stats.json, -figures.png. 100% local — nothing is uploaded.*.csv (native pulse), the Polar H10 *_ECG.txt (raw ECG → Pan-Tompkins) and the Polar Verity Sense *_PPG.txt (raw PPG → PPGDSP). The headline corpus (58 indexed nights, 31 trio-eligible, 26 solved, 291,561 simultaneous s) is a single private capture set — its raw waveforms are multi-GB and not committed — recomputed in full by dropping the folder. Captured with Polar Sensor Logger (Polar devices) and the O2Ring exporter.PPGDSP.analyze (SQI-gated), H10 HR from raw ECG via ECGDSP Pan-Tompkins, and the O2Ring native pulse from its CSV; nothing is pre-derived or committed. A night whose ECG is contact-flat falls back to the H10 onboard R-R.parseTimestamp (Clock Contract) — ISO no-zone for Polar, HH:MM:SS DD/MM/YYYY (DMY) for O2Ring; all display via getUTC*, so results are viewer-timezone-independent.threeCorneredHat(V_AB,V_AC,V_BC) applied per window. The folder-ingest builds one window per eligible night: it intersects the three raw-derived streams on the floating tMs grid (keeping spans ≥1,000 s), the per-window kernel solves σ for each device, and an aggregator reports the median σ with a CI (across-night bootstrap at N≥3; within-window block bootstrap below that), N_windows, total simultaneous seconds, plus negative-variance and H10↔O2Ring control-leg checks. The full per-window distribution is written into sigma-no-reference-stats.json.SIGMA-WINDOW-DERIVATION.md.Unlike the simulation pilots, this paper runs on real captured data, so “power” means having enough co-recorded time — and enough simultaneous three-device time — rather than synthetic patients. Two different sample sizes matter: paired seconds set the precision of the bias/SD/Arms figures (their SE falls as ~1/√n_seconds, and one night already supplies >20,000), while co-recorded nights/sessions set how well we separate a stable device-σ from night-specific artifacts, and three-device overlap windows are the binding constraint on the three-cornered hat.
| Quantity | Minimum (acceptable) | Recommended | Diminishing returns |
|---|---|---|---|
| Bias / SD / Arms vs transfer standard | 1 clean night (~20k paired s) → SD to ≈±0.05 bpm | 5–7 clean nights — separates a stable σ from night artifacts; lets you flag (not average over) a bad night | > ~15 nights: per-night σ already stable; extra nights mainly characterize night-to-night spread, not the central σ |
| Three-cornered-hat per-device σ | achieved: 26 nights, 291,561 simultaneous s (each ≥1,000 s, SQI-gated) — tool reports an across-night 95% bootstrap CI | 5–10 overlap windows on different nights — tightens the across-window CI and probes the uncorrelated-error assumption further | once windows span varied HR/motion states; more identical resting windows add little |
| HR dynamic range probed | resting only (this run) | +1 exercise/recovery session — bounds high-slew error the rest data can't see | — |
| Subjects | 1 (methods demonstration) | ≥10–20 for any population accuracy statement | set by the claim, not by σ precision |
Practical reading for this dataset: the per-night HR-error σ is already well-determined (twenty-six nights, 292k paired seconds), so additional captures buy the most where we are currently thinnest — more simultaneous three-device windows (every session that logs Verity raw PPG alongside the H10 adds a corner), and at least one non-resting session to bound error during rapid heart-rate change. More resting single-device nights add the least. This directly shapes what to prioritize as further data is added: capture all three devices together, keep the raw waveforms, and include some movement.
CLAUDE.md (Clock Contract, capture provenance), Tepna suite; analysis apparatus sigma-no-reference-analysis.html; detectors ecgdex-dsp.js (ECGDSP) and ppgdex-dsp.js (PPGDSP); same-device RR↔ECG cross-derivation comparator in pulsedex-app.js.