C# 从极性H10(UWP)获取心率变异性

C# 从极性H10(UWP)获取心率变异性,c#,uwp,bluetooth-lowenergy,C#,Uwp,Bluetooth Lowenergy,我正在从github Windows运行BLE样本,并试图从Polar H10获取心率变异性 但是,它向我展示的唯一服务和特性如下: // first layer keys are serviceUuid's // second layer keys are characteristicUuid's // with their respective name/description as values { "1800" /* Generic Access */

我正在从github Windows运行BLE样本,并试图从Polar H10获取心率变异性

但是,它向我展示的唯一服务和特性如下:

// first layer keys are serviceUuid's
// second layer keys are characteristicUuid's
// with their respective name/description as values
{
    "1800"    /* Generic Access */                      : {
        "2a00": "Device Name",
        "2a01": "Appearance",
        "2a02": "Peripheral Privacy Flag",
        "2a03": "Reconnection Address",
        "2a04": "Peripheral Preferred Connection Parameters"
    },
    "1801"    /* Generic Attribute */                   : {
        "2a05": "Service Changed"
    },
    "180d"    /* Heart Rate */                          : {
        "2a37": "Heart Rate Measurement",
        "2a38": "Body Sensor Location"
    },
    "180a"    /* Device Information */                  : {
        "2a23": "System ID",
        "2a24": "Model Number String",
        "2a25": "Serial Number String",
        "2a26": "Firmware Revision String",
        "2a27": "Hardware Revision String",
        "2a28": "Software Revision String",
        "2a29": "Manufacturer Name String"
    },
    "180f"    /* Battery Service */                     : {
        "2a19": "Battery Level"
    },
    "6217ff4b-fb31-1140-ad5a-a45545d7ecf3" /* unknown */: {
        "6217ff4c-c8ec-b1fb-1380-3ad986708e2d": "unknown", /* read:true */ // value = 
         uInt16Array [3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        "6217ff4d-91bb-91d0-7e2a-7cd3bda8a1f3": "unknown" /* write:true, 
         indicate:true, descriptors:{ descriptorUuid: "2902" }*/
     {
         /* 6172 */
         this service has all the numbers which I have no idea about. 
         Example: 10905, 10906, and etc.  
     }
}
现在,我知道极性H10确实给你心率变异性。那为什么它不给我看呢

有人知道吗

编辑::


如果您可以在通知中读取心跳,那么还有rr间隔。 rr间隔由2个字节uint16表示。 您需要rr间期来计算应用程序中的心率变异性

要获得rr间隔,必须从接收到的第一个字节读取标志。 从右到左读取二进制标志

位0=0:心率值格式设置为UINT8。单位: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间隔。 如果存在rr间隔,字节5和6

要计算心率变异性,您必须对一段时间内的rr间期值进行采样,并取这些间期的标准偏差。 要计算标准偏差,请执行以下操作:

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!
如何在代码中做到这一点,我留给你,或者你可以谷歌它

注:

SIG规范中的字节对首先是最低有效字节, 因此,对于Windows中的uint16表示,首先交换字节对中的字节! rr间隔不是毫秒,而是1/1024秒。 这是为了防止在无符号除法中丢失十进制数。
如果您可以在通知中读取心跳,那么还有rr间隔。 rr间隔由2个字节uint16表示。 您需要rr间期来计算应用程序中的心率变异性

要获得rr间隔,必须从接收到的第一个字节读取标志。 从右到左读取二进制标志

位0=0:心率值格式设置为UINT8。单位: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间隔。 如果存在rr间隔,字节5和6

要计算心率变异性,您必须对一段时间内的rr间期值进行采样,并取这些间期的标准偏差。 要计算标准偏差,请执行以下操作:

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!
如何在代码中做到这一点,我留给你,或者你可以谷歌它

注:

SIG规范中的字节对首先是最低有效字节, 因此,对于Windows中的uint16表示,首先交换字节对中的字节! rr间隔不是毫秒,而是1/1024秒。 这是为了防止在无符号除法中丢失十进制数。
首先,我们需要知道您是否能够阅读特征00002a37-0000-1000-8000-00805f9b34f中的通知。是的。这个特性给我心率。首先,我们需要知道您是否能够阅读特性00002a37-0000-1000-8000-00805f9b34f中的通知。是的。这个特征给了我心率。我得到心跳的方式只是简单的整数。例如77,81,它每两秒改变一次。这是微软的蓝牙低能量样本C。如果你看这里的图片,心率用红色和黄色链接标记:忽略设备名称。我之前就在处理这个问题,基本上是一样的。如果您使用的是Windows universal samples/samples/BluetoothLE/cs/Scenario2_Client.xaml.cs,心跳信号将从原始字节数组中过滤出来,格式为ValueByPresentation和ParseHeartRateValue。接收到的字节数组中有更多的字节,此示例未使用这些字节。这就是为什么我在回答中解释了如何获取和解释接收到的字节数组。是的,这正是我正在使用的。[Windows universal samples/samples/BluetoothLE/cs/Scenario2_Client.xaml.cs]但我感到困惑。我必须对此代码进行哪些调整?我相信你所解释的是正确的。但我真的不知道如何使用它。我能做一个ch吗
我没有极性H10,所以我不能测试任何异常。完全可以更改示例代码。在私有静态ushort ParseHeartRateValuebyte[]数据中的某个位置放置断点,并检查数据的内容。让我知道包含的所有字节,也许我可以编写一些代码。我获取心跳的方式只是简单的整数。例如77,81,它每两秒改变一次。这是微软的蓝牙低能量样本C。如果你看这里的图片,心率用红色和黄色链接标记:忽略设备名称。我之前就在处理这个问题,基本上是一样的。如果您使用的是Windows universal samples/samples/BluetoothLE/cs/Scenario2_Client.xaml.cs,心跳信号将从原始字节数组中过滤出来,格式为ValueByPresentation和ParseHeartRateValue。接收到的字节数组中有更多的字节,此示例未使用这些字节。这就是为什么我在回答中解释了如何获取和解释接收到的字节数组。是的,这正是我正在使用的。[Windows universal samples/samples/BluetoothLE/cs/Scenario2_Client.xaml.cs]但我感到困惑。我必须对此代码进行哪些调整?我相信你所解释的是正确的。但我真的不知道如何使用它。我可以对样本代码进行更改以获得心率变异性特征吗?我没有极性H10,因此无法测试任何异常。完全可以更改示例代码。在私有静态ushort ParseHeartRateValuebyte[]数据中的某个位置放置断点,并检查数据的内容。让我知道所有包含的字节,也许我可以写一些代码。