2017-05-16 71 views
0

我有一个iOS健身应用程序,它从蓝牙胸带收集心率数据。我最近添加了Apple Watch扩展功能,并将其插入手表的心率传感器中,作为胸带的替代品。不幸的是,我发现它是不准确的,基本上是无用的。这里有一个3英里的徒步旅行,其中红线表示从胸带和蓝线收集的数据的例子显示了从Apple关注收集的数据:来自Apple Watch的心率数据非常不准确

watch versus chest strap chart

我可以告诉胸带数据这两者的准确性更高,因为当叠加在高程数据上时,较高的心率与上坡部分非常接近。 (另外,我不希望我的心跳速度从苹果手表所显示的从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]; 
} 

更新:

我是看着this comparison chart我应该从Apple关注期待精度的指示。现在我意识到,这只是将Apple Watch与另一款基于手表的(手腕)传感器进行比较。所以也许这张图表只是表明这两种腕式模型同样是不准确的。

这令人困惑,因为您可以在网上搜索“Apple Watch心率准确性”,并找到很多关于准确度的报道,但没有人会看到我看到的结果,我认为这很糟糕。

+0

顺便说一句,我为了这个测试把手表绑得很紧。 – arlomedia

+0

基于手腕的心脏监护仪总是比胸部佩戴的模型更不准确。只有Apple可以使原始数据更好,但是您可以尝试使用最近N次测量的运行平均值,而不是直接使用原始值。 –

+0

@汤姆哈灵顿,好主意。我在测试数据上尝试了多达5分钟的平均滚动时间,但令人遗憾的是,显示的数值仍然以每分钟25-50次的速度下降。较短的时间段会导致基本上与原始手表数据相匹配的数据。我认为这种方法会更好地清理偶尔出现的异常值,而不是像这样的数据往往是错误的而不是正确的。 – arlomedia

回答

1

您的应用程序可以做的唯一一件事就是增加Apple Watch的心率报告频率和准确性,并记录一次精确的HKWorkoutActivityType健身锻炼。由于它看起来像你已经在做这个,所以你应该在file a radar与苹果关于测量的准确性。

1

我对Apple Watch 2的使用经验是一样的。这是非常不准确的:当我爬楼梯5分钟时,90后显示70,或者在低强度运动中报告读数不可理解。但最令人讨厌的是,即使在行走时,它也会周期性地完全失去心率!

我应该等到第4代或第5代。仍然AW2是极地HRM的替代品。这是一个耻辱苹果不能提供一致的心率测量的准确性。

相关问题