How TensionRadar works
Radar compares available heart measurements with your personal history. Its 0–100 score describes variation in those measurements. It cannot directly measure your emotions or identify why a reading changed.
Version scope: This page documents 1.2.1 (49), available on the US App Store , scoring model 4 and baseline estimator 3. App Store Connect confirms build 49 for this release. Older versions differ.
TensionRadar is a personal wellness tool. Its coefficients, bands, confidence labels and timing rules are product choices, not clinically validated measurements or diagnostic thresholds.
The measurements behind Radar
Radar considers the newest available valid SDNN or supported RMSSD reading in Apple Health. It uses that statistic’s own baseline. SDNN describes the spread of beat intervals; RMSSD describes successive interval differences. They are different statistics and are not interchangeable. See Shaffer and Ginsberg’s overview of HRV metrics for measurement background, not validation of this app’s score.
When both statistics have the same timestamp, the current implementation selects RMSSD. It does not search older readings for a more reassuring score. A separate beat-to-beat detail panel can describe another recording and timestamp; its RMSSD need not match the reading driving Radar.
Eligible heart rate near the HRV measurement can contribute to the score. The app selects the median explicitly sedentary heart-rate sample within five minutes on either side of that HRV timestamp, using only samples already received. For an even number of samples it selects the upper middle value. It compares this with the available resting-heart-rate value. Respiratory rate can add explanatory text but does not change the numeric score.
Sampling depends on the Watch, available Health data and system scheduling. Refresh requests available data; it does not force a new HRV measurement. A newer heart-rate tile does not make an older HRV reading new. Apple explains Watch heart-rate measurement and its limitations.
What “your usual” means
The default reference window is 30 days; Settings offers 7, 14, 30 or 60 days. Today is excluded so that the reading being evaluated does not redefine its own reference.
The reference uses individual measurements from five local-hour buckets: the reading’s hour and two neighboring hours on each side, wrapping midnight. At least five distinct historical days must contribute to that time window. This is a whole-hour match, not an exact rolling two-hour interval.
Each day has equal total weight, even if one day contains more measurements. The calculation uses natural-log HRV and keeps both within-day and between-day variation. The displayed usual value is the exponential of the weighted log mean. The usual range is that mean plus or minus one log standard deviation, converted back to milliseconds. This is a descriptive range, not a medical reference interval.
Known movement and measurements timestamped within recorded workouts or the following ten minutes are excluded. Conflicting values at the same timestamp are excluded; matching duplicates do not get extra weight. Missing motion metadata remains unclassified and can still enter the historical reference. Sleep and deliberate breathing are not fully separated from ordinary awake rest.
A new score requires a compatible, time-matched personal reference. Population defaults remain in legacy/internal data structures, but do not qualify for a new Radar score in this version. An expired reference (seven days since construction) or a timezone change requires renewed coverage; an overall reference without time-of-day coverage cannot satisfy the scoring gate.
How the score is calculated
Higher scores represent lower HRV relative to your reference and, when eligible, greater heart-rate elevation over resting. A score of 70 is not “70% stressed.”
Let x
be HRV, μ
the day-weighted mean of natural-log HRV, and σ
its standard deviation. The estimator floors σ
at 0.12. clamp
limits a value to 0–100.
z = (ln(x) − μ) / σHRV component = clamp(50 − 22 × z)HR component = clamp(25 + 2.2 × (paired HR − resting HR))Score = 0.70 × HRV component + 0.30 × HR component
Without eligible paired heart rate, a new assessment uses HRV alone. The weights do not drift as a reading ages. If only heart-rate evidence disappears for an already assessed, otherwise compatible reading, the existing blended assessment can be retained rather than increasing the score simply because data went missing.
Synthetic example: HRV of 50 ms with a usual value of 50 ms gives an HRV component of 50. Paired heart rate of 75 bpm and resting heart rate of 65 bpm give an HR component of 47. The combined score is 49.1, in the Steady band. These invented values illustrate arithmetic, not a health target.
The fixed bands are Serene below 20, Calm 20–under 40, Steady 40–under 60, Tense 60–under 80 and Overloaded 80–100. They are display categories, not diagnoses or recorded moods. The daily HRV calendar compares daily measurements with usual days; Journal check-ins are your own reports. Neither is a continuous record of emotional stress.
Medium/High confidence labels describe available evidence. Internally, qualifying personal HRV contributes 0.6 and eligible heart rate adds 0.3. Those numbers are not accuracy percentages or probabilities that a person feels stressed.
Activity, recovery and breathing
A current interpretation needs resting evidence both at measurement time and for the current context. The app uses motion metadata attached to Health measurements and recorded workout intervals; it is not a continuous movement detector. Elevated heart rate alone does not mean that you are moving.
Explicit motion observations last under ten minutes. A newer known observation replaces an older one; missing metadata does not erase still-valid evidence. At the same timestamp, conflicting activity evidence wins. A later sedentary heart-rate sample can support an earlier measurement only when its explicit stillness interval covers it, it is within five minutes, and no movement or workout conflicts. Generic stationary metadata does not provide the same retrospective interval.
Recorded workouts and the ten minutes immediately afterward are excluded from resting interpretation. Ten minutes is an exclusion rule, not proof of full physiological recovery. A workout-era measurement does not become a resting measurement just because time passes. Missing workout data also does not prove that no workout happened. Health’s privacy behavior can make inaccessible data look empty.
Known limitation: build 49 does not query mindfulness history to remove all guided-breathing samples from its baseline. It suppresses notifications while a TensionRadar breathing session is active, but that is not comprehensive breathing-sample filtering. Sleep, coached breathing, medications, illness, recording conditions and other influences can affect interpretation. Sitting in a moving vehicle may supply stationary, active or unknown metadata; the app does not promise to recognize the vehicle.
Latest reading, last reading and unavailable data
A newly current score requires HRV no more than 30 minutes old, sufficient personal history and eligible context. Refresh time, measurement time and context-evidence time are separate.
When current eligibility expires or movement occurs, the app keeps a previously accepted result visible as Last reading , with its original measurement age. The shared display rules are used by Radar, the Watch app and Radar/score widgets. The stored result may remain until replaced or invalidated; it does not describe your state now and does not trigger a current alert.
A measurement that qualifies at its own timestamp can be retained even if you move afterward. If there is no accepted result, the interface can show the latest raw HRV without a stress interpretation. With no HRV it shows a first-reading state. A refresh does not relabel historical data as fresh, and widget updates can lag because the system schedules them.
Builds before this retained-reading change may show “No Current Reading” more often. Compare timestamps in Health and the app, check access, and review the evidence explanation. A missing interpretation is not a confirmed calm state.
Why alerts need more evidence
Displaying a historical result and sending a current notification are separate decisions. For an HRV alert, the latest measurement must be under 20 minutes old, and both its combined score and HRV component must meet your threshold. The immediately preceding measurement of the same statistic must also qualify at rest, be within 30 minutes, and meet the threshold against its own time-matched reference. The app does not skip an intervening contrary or ineligible reading to create confirmation.
The workout-context check must be under five minutes old, current resting evidence must still be valid, and input confidence must be at least 0.5. The same or an older measurement cannot trigger repeated HRV alerts.
A separate resting-heart-rate path can alert without HRV confirmation. It needs at least three qualifying samples spanning at least ten minutes, with no gap over five minutes, every sample at least 20 bpm above resting, and the latest no more than five minutes old. Its heart-rate component must meet the selected threshold too; a 20 bpm elevation does not automatically satisfy every threshold.
Settings offers thresholds of 60, 70 or 80 (default 60), repeat spacing of 0, 15, 30 or 60 minutes (default 15), alert hours (default 8 AM–11 PM local time), and a delivery device (default iPhone). Choosing zero spacing still preserves duplicate suppression, context checks and confirmation. With escalation enabled, a qualifying Overloaded HRV reading can bypass longer spacing at least 30 minutes after a Tense HRV alert. This is separate from the ten-minute workout exclusion.
Morning summaries follow a separate, opportunistic iPhone path with same-day, fresh resting data; they do not require two high HRV scores and are not guaranteed daily. Notification permission, active-session suppression, routing acknowledgements, Focus and system delivery also matter. Watch-local tension alerts require explicit selection; an offline Watch does not automatically hand responsibility to the phone. Diagnostics records decisions locally. “Scheduled” means the system accepted a request, not that you saw it.
Limits and validation
A single measurement can be noisy, and a low HRV value does not establish an emotional state or its cause. Comparisons between products are affected by different statistics, timestamps, reference periods and exclusions. Agreement with another app is not proof of accuracy.
Automated regression checks exercise timestamp pairing, day weighting, activity exclusions, confirmation, retained-reading continuity and duplicate suppression. Focused native checks cover the revised homepage, reference links and folded/unfolded layouts. These check implementation behavior. They do not clinically validate the coefficients or bands, establish sensitivity/specificity, or demonstrate superiority to another product. Broader accessibility/device coverage and field checks of rest availability, recovery transitions and false alerts remain ongoing.
Local handling of health data and notification diagnostics is described in the privacy policy . For interpretation and missing-data questions, see support . Persistent symptoms should be discussed with a healthcare professional rather than inferred from a Radar score.
Method history and sources
- Build 42 development baseline: scoring model 4 / estimator 3; separate HRV statistics, time-matched day weighting, activity evidence and alert confirmation. This was a development checkpoint, not a public-release claim.
- 1.2.1 (49), publicly released: retains accepted readings with original ages, shares presentation semantics across app/widgets, adds accessible health references and clarifies product-defined scores. The homepage layout changed; the scoring coefficients remain model 4 / estimator 3.
Source reviewed: effc9ff
. The formula and thresholds above were checked against that released source, rather than the earlier website draft. Any future algorithm change requires a new version note.
Background references: HRV metrics and norms , Apple Watch heart-rate measurement , and HealthKit heart-rate motion context . These sources describe measurements and context; they do not endorse or validate TensionRadar’s proprietary score.