2017-05-16 30 views
0

私はBluetoothチェストストラップから心拍数データを収集するiOSフィットネスアプリを持っています。私は最近、Apple Watchエクステンションを追加し、胸のストラップの代わりに時計の心拍センサーに触れました。残念ながら、私はそれが基本的に役に立たないほど不正確であることを発見しました。ここでは赤い線胸部ストラップから収集されたデータを示し、青い線は、Appleウォッチから収集されたデータを示し、3マイルのハイキングの例です:Appleからの心拍数データが​​きわめて不正確

watch versus chest strap chart

私はチェストストラップデータを伝えることができますこの2つの方程式の方が正確です。なぜなら、標高データに重ね合わせると、高い心拍数が上のセクションに非常によく一致するからです。 (また、アップルウォッチのように、私の心拍数が60から120、または110から160に飛ぶとは思わないでしょう...)

ここにあります私は時計のデータを収集するために使用しているコードです。より正確なデータを取得するためにこれを設定する別の方法がありますか、それともこのハードウェアで得られるのと同じくらいですか?

- (void)startWorkoutSession { 
    if (self.workoutSession) { 
     return; 
    } 

    // configure a HealthKit workout 
    HKWorkoutConfiguration *configuration = [[HKWorkoutConfiguration alloc] init]; 
    configuration.activityType = HKWorkoutActivityTypeHiking; 
    configuration.locationType = HKWorkoutSessionLocationTypeOutdoor; 

    // start the workout 
    NSError *error = nil; 
    self.workoutSession = [[HKWorkoutSession alloc] initWithConfiguration:configuration error:&error]; 
    if (!self.workoutSession) { 
     //NSLog(@"*** Unable to create the workout session: %@ ***", error.localizedDescription); 
     NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys: 
      @"createWorkoutSession", @"error", 
      error.localizedDescription, @"description", 
     nil]; 
     [self.iosApp sendMessage:data replyHandler:nil errorHandler:^(NSError * _Nonnull error) { 
      // maybe show a local alert here? 
     }]; 
     return; 
    } 
    self.workoutSession.delegate = self; 
    [self.healthStore startWorkoutSession:self.workoutSession]; 

    // update the controls view and show the tracking view 
    self.controls.status = StatusStarted; 
    if (![self.activeController isEqual:self.tracking]) { 
     [self.tracking becomeCurrentPage]; 
    } 
} 

- (void)workoutSession:(HKWorkoutSession *)workoutSession didChangeToState:(HKWorkoutSessionState)toState fromState:(HKWorkoutSessionState)fromState date:(NSDate *)date { 
    // required method 
    if (toState == HKWorkoutSessionStateRunning) { 
     [self requestHeartRate:date]; 
    } 
} 

- (void)requestHeartRate:(NSDate *)date { 
    __weak typeof(self) weakSelf = self; 
    NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:date endDate:nil options:HKQueryOptionNone]; 
    HKSampleType *heartRateType = [HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]; 
    HKAnchoredObjectQuery *query = [[HKAnchoredObjectQuery alloc] initWithType:heartRateType predicate:predicate anchor:0 limit:0 resultsHandler:^(HKAnchoredObjectQuery *query, NSArray<HKSample *> *samples, NSArray<HKDeletedObject *> *deletedObjects, HKQueryAnchor *anchor, NSError *error) { 
     if ((!error)&&(samples.count > 0)) { 
      [weakSelf receiveHeartRate:(HKQuantitySample *)[samples objectAtIndex:0]]; 
     } else { 
      NSLog(@"error with initial heart rate query: %@", error); 
     } 
    }]; 
    [query setUpdateHandler:^(HKAnchoredObjectQuery *query, NSArray<HKSample *> *samples, NSArray<HKDeletedObject *> *deletedObjects, HKQueryAnchor *anchor, NSError *error) { 
     if ((!error)&&(samples.count > 0)) { 
      [weakSelf receiveHeartRate:(HKQuantitySample *)[samples objectAtIndex:0]]; 
     } else { 
      NSLog(@"error with updated heart rate query: %@", error); 
     } 
    }]; 
    [self.healthStore executeQuery:query]; 
} 

- (void)receiveHeartRate:(HKQuantitySample *)sample { 
    HKQuantity *quantity = sample.quantity; 
    int value = (int)[quantity doubleValueForUnit:[HKUnit unitFromString:@"count/min"]]; 
    //NSLog(@"got heart rate %i", value); 

    // display the heart rate in the tracking view 
    [self.tracking updateHeartRate:value]; 
} 

更新:

私はAppleの時計から期待すべき精度の指標としてthis comparison chartを見ていました。今はアップルウォッチと別のウォッチベースの(手首)センサーを比較していることに気付きました。だからおそらくそのチャートは、両方の手首ベースのモデルが同様に不正確であることを示しているに過ぎません。

ウェブで「Apple watch heart rate accuracy」を検索し、それがどれほど正確であるかについての多くのストーリーを見つけることができますが、誰も私が見ているような結果を表示していません。

+0

私はこのテストのためにかなり窮屈な腕時計を持っていました。 – arlomedia

+0

手首ベースの心臓モニターは、常に胸に装着されたモデルよりも精度が低くなります。 Appleだけが生データをより良くすることができますが、生の値を直接使用するのではなく、最後のN回の測定の平均を使用してみることもできます。 –

+0

@TomHarrington、素晴らしいアイデア。私はテストデータで5分のローリング平均を試しましたが、悲しいことに、表示された値は1分に25-50bpmだけ離れていました。期間が短いと、生の時計データと基本的に一致するデータが得られました。私は、このようなデータが正しいよりもしばしば間違っているのではなく、偶発的なアウトライヤーをクリーンアップする方が良いと考えています。 – arlomedia

答えて

1

アップルウォッチの心拍数の報告頻度と精度を高めるためにアプリケーションが行うことができるのは、正確なHKWorkoutActivityTypeのトレーニングセッションを記録することです。あなたがすでにこれをやっているように見えるので、あなたは測定の正確さについてアップルとfile a radarする必要があります。

1

Apple Watch 2に関する私の経験は同じです。それは非常に不正確です:私は5分間階段を登っているときに90の直後に70を示すか、低強度の運動では読めないほど高い読みを報告します。しかし、最も迷惑なことは、定期的に歩行中でも心拍数を失うことです!

おそらく世代4または5まで待機していたはずです。まだAW2はPolar HRMの代替手段ではありません。 Appleが心拍数測定の一貫した正確さを提供できないことは残念です。

関連する問題