Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Track beat to beat heart rate apple watch through HRV

I'm looking into ways of getting the beat-to-beat intervals of separate heartbeat intervals.

I'm wearing an Apple Watch and am currently able to export

<Record type=“HKQuantityTypeIdentifierHeartRateVariabilitySDNN” sourceName=“Apple Watch” sourceVersion=“4.0” device=“&lt;&lt;HKDevice: 0x1c489da10&gt;, name:Apple Watch, manufacturer:Apple, model:Watch, hardware:Watch3,4, software:4.0&gt;” unit=“ms” creationDate=“2017-10-31 13:41:54 +0000" startDate=“2017-10-31 13:40:43 +0000” endDate=“2017-10-31 13:41:54 +0000" value=“92.7156”>
  <HeartRateVariabilityMetadataList>
   <InstantaneousBeatsPerMinute bpm=“69" time=“13:40:45.22”/>
   <InstantaneousBeatsPerMinute bpm=“74" time=“13:40:46.02”/>
   <InstantaneousBeatsPerMinute bpm=“71" time=“13:40:46.87”/>
   <InstantaneousBeatsPerMinute bpm=“64" time=“13:40:47.81”/>
   <InstantaneousBeatsPerMinute bpm=“54" time=“13:40:48.92”/>
   <InstantaneousBeatsPerMinute bpm=“57" time=“13:40:49.97”/>
   <InstantaneousBeatsPerMinute bpm=“65" time=“13:40:50.90”/>
   <InstantaneousBeatsPerMinute bpm=“63" time=“13:40:51.86”/>
   <InstantaneousBeatsPerMinute bpm=“60" time=“13:40:52.86”/>
   <InstantaneousBeatsPerMinute bpm=“57" time=“13:40:53.92”/>
   <InstantaneousBeatsPerMinute bpm=“57" time=“13:40:54.98”/>
   <InstantaneousBeatsPerMinute bpm=“61" time=“13:40:55.97”/>
   <InstantaneousBeatsPerMinute bpm=“70" time=“13:40:56.83”/>
   <InstantaneousBeatsPerMinute bpm=“72" time=“13:40:57.66”/>
   <InstantaneousBeatsPerMinute bpm=“69" time=“13:40:58.54”/>
   <InstantaneousBeatsPerMinute bpm=“58" time=“13:40:59.58”/>
   <InstantaneousBeatsPerMinute bpm=“58" time=“13:41:02.75”/>
   <InstantaneousBeatsPerMinute bpm=“63" time=“13:41:03.70”/>
   <InstantaneousBeatsPerMinute bpm=“70" time=“13:41:04.56”/>
   <InstantaneousBeatsPerMinute bpm=“70" time=“13:41:05.41”/>
   <InstantaneousBeatsPerMinute bpm=“69" time=“13:41:13.15”/>
   <InstantaneousBeatsPerMinute bpm=“71" time=“13:41:13.99”/>
   <InstantaneousBeatsPerMinute bpm=“63" time=“13:41:21.11”/>
   <InstantaneousBeatsPerMinute bpm=“69" time=“13:41:21.98”/>
   <InstantaneousBeatsPerMinute bpm=“73" time=“13:41:22.79”/>
   <InstantaneousBeatsPerMinute bpm=“65" time=“13:41:35.27”/>
   <InstantaneousBeatsPerMinute bpm=“67" time=“13:41:36.17”/>
   <InstantaneousBeatsPerMinute bpm=“71" time=“13:41:37.01”/>
   <InstantaneousBeatsPerMinute bpm=“77" time=“13:41:37.79”/>
   <InstantaneousBeatsPerMinute bpm=“79" time=“13:41:38.55”/>
  </HeartRateVariabilityMetadataList>
 </Record>

However, when I'm getting a sample of the heartRateVariabilitySDNN, I'm getting only 2 values back.

This is the code I'm using to get the sample

  let healthStore = HKHealthStore()

    var typeHeart = HKQuantityType.quantityType(forIdentifier: .heartRateVariabilitySDNN)
    var startDate = Date() - 7 * 24 * 60 * 60 // start date is a week
    var predicate: NSPredicate? = HKQuery.predicateForSamples(withStart: startDate, end: Date(), options: HKQueryOptions.strictEndDate)

    let sampleType = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRateVariabilitySDNN)

    let sortDescriptor = NSSortDescriptor(key:HKSampleSortIdentifierStartDate, ascending: false)

    let sampleQuery = HKSampleQuery(sampleType: sampleType!, predicate: predicate, limit: 30, sortDescriptors: [sortDescriptor])
    { (sampleQuery, results, error ) -> Void in
        if(error == nil) {
            print(results)
        }
    }

This all that it's outputting:

Optional([92.3536 ms D7627860-F87C-4316-9943-522BC1D6734B "Apple Watch" (4.0), "Watch3,4" (4.0)"Apple Watch"  (2017-10-31 13:48:19 +0000 - 2017-10-31 13:53:30 +0000), 92.7156 ms EB0DBCB1-164A-4D50-9103-270F3F9FBCD1 "Apple Watch" (4.0), "Watch3,4" (4.0)"Apple Watch"  (2017-10-31 13:40:43 +0000 - 2017-10-31 13:41:54 +0000)])

Which are basically 2 values: 92.7ms and 92.3ms. These are the averages of 2 workouts during the 'breath' application on the Watch.

Does anyone know how I can get to the InstantaneousBeatsPerMinute and/or HRV meta data?

Edit: There seem to be something interesting going on where the outputted value looks very much like a print statement of the Record type in the XML.

like image 401
bdv Avatar asked Oct 31 '17 16:10

bdv


People also ask

Is Apple Watch good for tracking HRV?

Some medical professionals contend measuring HRV through the skin with smartwatches and other similar trackers isn't as accurate as dedicated medical equipment. But there have been studies that show Apple Watch is as reliable as products like the Polar's heart rate monitors for measuring HRV.

What is a good HRV heart rate variability?

A good HRV score is relative for each person. HRV is a highly sensitive metric and responds uniquely for everyone. As a rule of thumb, values below 50 ms are classified as unhealthy, 50–100 ms signal compromised health, and above 100 ms are healthy.

Does Apple Watch track HRV during sleep?

If you use an Apple Watch Series 1 or later model to track your sleep with SleepWatch, SleepWatch will automatically track your Average Sleeping Heart Rate Variability (HRV) result if enough HRV samples were collected during your sleep.


2 Answers

After filing an technical support incident (TSI) at Apple about this, they said that it's currently not possible to do this.

Thank you for contacting Apple Developer Technical Support (DTS). Our engineers have reviewed your request and have concluded that there is no supported way to achieve the desired functionality given the currently shipping system configurations.

If you would like for Apple to consider adding support for such features in the future, please submit an enhancement request via the Bug Reporter tool at https://developer.apple.com/bug-reporting/.

If you'd like to see this functionality, please file a bug report!

like image 132
bdv Avatar answered Oct 28 '22 11:10

bdv


In iOS 13 Apple released new Heartbeat Series API. You can find more details here:

https://developer.apple.com/documentation/healthkit/samples/reading_and_writing_healthkit_series_data https://developer.apple.com/documentation/healthkit/hkheartbeatseriessample https://developer.apple.com/documentation/healthkit/hkheartbeatseriesquery

And this related WWDC video session is very useful for understanding this new API: https://developer.apple.com/videos/play/wwdc2019/218

like image 34
lazarev Avatar answered Oct 28 '22 09:10

lazarev