当前位置: 首页 > 知识库问答 >
问题:

RR间隔缺少值(BLE/极性设备)

阎懿轩
2023-03-14

我拥有一台Polar H10设备,我对我使用Android官方蓝牙低功耗API读取的心率和RR间隔感兴趣。Polar设备每秒发送一个包含心率和RR间隔的包。现在我已经认识到,在每个这样的包中都有一个心率值,但在某些包中没有RR间隔值(RR间隔的值为-1)。

为什么会发生这种情况?是我的设备坏了,还是我在实施过程中犯了错误,还是其他人也面临这个问题?

编辑:这是代码。在方法中,我正在从极性设备接收更改的值。此方法大约每秒触发一次。然后,我对特征进行如下分析:

    public int[] parse(BluetoothGattCharacteristic characteristic) {

        double heartRate = extractHeartRate(c);
        Integer[] interval = extractBeatToBeatInterval(c);

        int[] result = null;
        if (interval != null) {
            result = new int[interval.length + 1];
        } else {
            result = new int[2];
            result[1] = -1;
        }
        result[0] = (int) heartRate;

        if (interval != null) {
            for (int i = 0; i < interval.length; i++) {
                result[i+1] = interval[i];
            }
        }

        return result;
    }


private static double extractHeartRate(
        BluetoothGattCharacteristic characteristic) {

    int flag = characteristic.getProperties();
    Log.d(TAG, "Heart rate flag: " + flag);
    int format = -1;
    // Heart rate bit number format
    if ((flag & 0x01) != 0) {
        format = BluetoothGattCharacteristic.FORMAT_UINT16;
        Log.d(TAG, "Heart rate format UINT16.");
    } else {
        format = BluetoothGattCharacteristic.FORMAT_UINT8;
        Log.d(TAG, "Heart rate format UINT8.");
    }

    final int heartRate = characteristic.getIntValue(format, 1);
    Log.d(TAG, String.format("Received heart rate: %d", heartRate));
    return heartRate;
}

private static Integer[] extractBeatToBeatInterval(
        BluetoothGattCharacteristic characteristic) {

    int flag = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, 0);
    int format = -1;
    int energy = -1;
    int offset = 1; // This depends on hear rate value format and if there is energy data
    int rr_count = 0;

    if ((flag & 0x01) != 0) {
        format = BluetoothGattCharacteristic.FORMAT_UINT16;
        Log.d(TAG, "Heart rate format UINT16.");
        offset = 3;
    } else {
        format = BluetoothGattCharacteristic.FORMAT_UINT8;
        Log.d(TAG, "Heart rate format UINT8.");
        offset = 2;
    }
    if ((flag & 0x08) != 0) {
        // calories present
        energy = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT16, offset);
        offset += 2;
        Log.d(TAG, "Received energy: {}"+ energy);
    }
    if ((flag & 0x16) != 0){
        // RR stuff.
        Log.d(TAG, "RR stuff found at offset: "+ offset);
        Log.d(TAG, "RR length: "+ (characteristic.getValue()).length);
        rr_count = ((characteristic.getValue()).length - offset) / 2;
        Log.d(TAG, "RR length: "+ (characteristic.getValue()).length);
        Log.d(TAG, "rr_count: "+ rr_count);
        if (rr_count > 0) {
            Integer[] mRr_values = new Integer[rr_count];
            for (int i = 0; i < rr_count; i++) {
                mRr_values[i] = characteristic.getIntValue(
                        BluetoothGattCharacteristic.FORMAT_UINT16, offset);
                offset += 2;
                Log.d(TAG, "Received RR: " + mRr_values[i]);
            }
            return mRr_values;
        }
    }
    Log.d(TAG, "No RR data on this update: ");
    return null;
}

parse方法返回的第一个元素是心率,第二个元素是RR间隔。有时第二个元素为-1(即未检测到RR间隔)。

共有1个答案

丌官坚秉
2023-03-14

您的Polar设备或发布的软件没有问题。

一些传输的数据包和<代码>if((标志)中可能缺少RR间隔度量值

例如,假设您的设备每秒发送一次心脏测量值,而您有50次心跳/秒:由于在那一秒中没有检测到心跳,因此会有一些没有测量RR间期的间期(这是一个简化的解释,只是为了说明问题)。

 类似资料:
  • 有人知道android BLE扫描的间隔和窗口与低延迟、平衡和低功耗扫描模式设置相关联吗? 我发现了这个(如何设置BLE扫描间隔和windows nojust chelse mode在Android中?)所以问题是,如果我在android设备开始扫描后5000ms启动蓝牙设备广告,它会在3000ms内被发现。(这表示5000ms间隔、5000ms窗口不正确?)

  • 问题内容: 我有下表,其中包含每15分钟从几个不同的设备读取的值: 我想在表中找到每个月在给定月份中没有条目的所有设备的所有差距。对于上表,结果应该是这样的: 该表大约有35000台设备和1亿个条目。 这是我尝试过的;它很慢,但是返回我需要的。但是,除了速度之外,还有另一个问题:它只能找到在给定月份设备的最后一个条目之前丢失的时间间隔;之后的所有内容都将被忽略,因此有可能会错过额外的缺失值间隔。

  • 我拥有一个极地H10胸带,它以蓝牙低能量运行,并提供心率和心率变化。 我想用Android应用程序读取这些值。由于官方BLE教程中的帮助,我能够连接到设备。现在的问题是从设备中读取心率和心率变异性值。每次设备上有新值可用时,我都要读取该值(并且至少每秒都有新值)。 我找到了以下代码: 假设我与设备有连接,我如何使用它来提取心率和r-r间隔(节拍到节拍间隔)?如果有人能举个简短的例子,我会很高兴。此

  • 我使用的是Json。net将对象序列化到数据库。 我向类中添加了一个新属性(该属性在数据库的json中缺失),我希望新属性在json中缺失时具有默认值。 我尝试了DefaultValue属性,但它不起作用。我正在使用私有setter和构造函数来反序列化json,因此在构造函数中设置属性的值将不起作用,因为有一个带有该值的参数。 以下是一个例子: 我预计年龄是5岁,但现在是零岁。 有什么建议吗?

  • 问题内容: 我想填充用的与经典ASP / VBScript中的站点。这些值是从SQL Server数据库读取和获取的,其代码类似于: 我的问题是似乎只有一侧可以评估。 随着我得到: 随着我得到: 应该采取什么措施缓解这一问题? 问题答案: 试试这个:

  • 当尝试在glassfish 4.0(使用netbeans 7.3.1)中部署一个mavenized entreprise应用程序(包括war和jar项目)时,我遇到了与该问题类似的问题,即jar无效,因为它包含零ejb(这不是真的,因为我的应用程序jar包含4个实体类及其相应的会话bean和本地接口)。由于那篇文章中的解决方案是添加ejb-jar.xml,所以我也添加了我的部署描述符,编写如下: