分析心率监测器的数据返回

时间:2012-05-02 20:59:09

标签: java android heartbeat

我试图读取心​​率监测器通过蓝牙传输的数据,但我真的不知道如何读取心率监测器返回的字节。

每个供应商可能都有自己的方式将数据包装成字节。但是,如何将这些字节转换为可读格式,以便我可以分析其中的变化? 像ASCII值或一些十六进制值。

我尝试了MyTrack应用程序的代码,但这对我没用。

MyTrack Parse Heart Rate Data

我正在尝试读取Android中的字节,截至目前我正在获取这些数据,但不知道哪个字段代表什么。

55 04 00 38 00 15 af    

14 b0 00 38 00 13 b1    

55 04 00 38 00 13 b1

55 04 00 38 00 12 b2 

3 个答案:

答案 0 :(得分:5)

希望您的心率监测器遵循此处定义的数据规范:

Heart Rate Measurement at Bluetooth.org

据我所知,这里是如何在该文件中应用信息:

  1. 取第一个十六进制字节55,然后将其转换为二进制:01010101。
  2. 由于蓝牙数据是little-endian,因此请将该序列的右端视为位0,将左端视为位7。
  3. 现在,您可以查看蓝牙消息的Flags字段的文档。 flags字段的第0位告诉您心率数据是8位还是16位。在您的情况下,位0为1,因此您有16位数据。
  4. 查看第一个示例中的下两个十六进制字节:04 00。
  5. 将其转换为十进制。现在这部分我不确定。如果我将04 00转换为十进制,我得到1024,所以我一定做错了。也许巧合的是,如果我将这些数字反转并将00 40转换为十进制,我得到64,这对于坐在他们电脑上的人来说可能是心率值(我现在是62)。也许有人可以评论如何解释这部分。
  6. 在我的情况下,使用Wahoo Blue HR,数据会像这样回来:

    14 46 59 03 58 03

    将14转换为二进制(00010100)并查看位0(0)告诉我心率是8位,所以我只需要第二个十六进制字节(46)。将其转换为十进制可以得到70。

    不幸的是,我不知道如何解释你的第二个样本。第一个十六进制字节14表示一个8位值,但这会使心率值B0或176 - 对于坐在他们计算机上的人来说不是一个可能的值。我也不希望单个设备在传输8位和16位值之间切换,但我想这是可能的。

    This SO question包含执行这些转化的代码,并且它为我工作。我只想在实现之前尝试理解文档。

答案 1 :(得分:1)

除非您能找到心率监测器传输规范的一些文档,否则您将需要分析数据并解密格式。实现此目的的一种方法是创建从心率监测器发送的数据的受控变化(例如在静止的人和慢跑的人之间交换),然后查找数据中的差异和模式。

至少,我希望数据包含时间和心率值,但是肯定会有其他字段,例如标题,数据包标识符和长度以及校验和值。

答案 2 :(得分:0)

我没有查看您的数据,但是我已经从ANT,ANT +解码了一些监视器,数据流包括拍子之间的时间(以毫秒为单位)以及最近三个拍子的HR。建议从一致的HR获取数据是最好的起点。然后请记住,您看到的数字可能会从三到四次跳动舍入。