C#或C ++中用于计算心率变异性窗口10

时间:2018-10-26 14:22:39

标签: c# uwp bluetooth

我正在尝试从Polar设备获取心率变异性。

我正在运行Windows Universal sample BLE以连接到设备并获得HRV。看起来像this。 (该设备实际上是Polar h10)。

如您所见,我可以得到心率,但这并不能给我带来HRV。 首先,我希望当我选择HeartRate特征时,也可以选择心率变异性。但是不是真的! (那真是太好了:)

"180d"    /* Heart Rate */    

"2a37": "Heart Rate Measurement",
"2a38": "Body Sensor Location"
// This is where it should show Heart Rate Variability //

我进行了足够的搜索以找到一些C#中的HRV示例,但没有任何示例。

即使在Github上,也大多数是Java中的android示例,而其他示例是Python和Matlab。

令人惊讶的是,java中的代码没有显示任何有关如何获取HRV的计算方法,这很奇怪。

有人可以帮助我找到C#,C ++中的示例吗?或者只是帮助我找到任何显示HRV计算的代码示例?

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案。我遵循了GrooverFromHolland的答案。

这是他的答案:

如果您可以阅读通知中的心跳信号,则还有rr-interval。 rr间隔表示为2个字节(uint16)。您需要使用rr-interval来计算应用中的心率变异性。

要获取rr-interval,您必须从收到的第一个字节中读取标志。您从右到左将标志读为二进制。

位0 = 0:心率值格式设置为UINT8。单位:BPM(1字节)。 位0 = 1:心率值格式设置为UINT16。单位:BPM(2个字节)。

位1和2:传感器接触状态位。这些与此无关。

位3 = 0:能量消耗字段不存在。 位3 = 1:存在能源消耗字段。格式= uint16。单位:千克焦耳。

位4 = 0:不存在RR间隔值。 位4 = 1:存在一个或多个RR间隔值。格式= uint16。单位1/1024秒。

第5、6和7位:保留供将来使用。

例如,如果您的第一个字节= 16 = 0x10 = 0b00010000,则字节2 =是心率。

字节3和4是rr-interval。 字节5和6(如果存在)rr-interval。

要计算心率变异性,您必须在一段时间内采样rr-interval值,并采用这些间隔的标准差。要计算标准偏差:

1. Work out the Mean (the simple average of the numbers)
2. Then for each number: subtract the Mean and square the result
3. Then work out the mean of those squared differences.
4. Take the square root of that and we are done!

如何在代码中执行此操作,我留给您决定,或者您可以在Google中进行搜索。

注意:

SIG规范中的字节对是最低有效字节在先,因此对于Windows中的uint16表示形式,请先交换字节对的字节! rr-interval不是毫秒,而是1/1024秒。这是为了防止丢失无符号除法中的小数。

(有人请对问题撤消-1)