You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解码Polar H10的ECG数据帧及调整采样率?

Polar H10 ECG数据提取与采样率修改问题解答

一、确认数据是否为ECG数据

你从FB005C82-02E7-F387-1CAD-8ACD2D8DF0C8特征获取到的数据确实是ECG数据:

  • 该特征属于Polar专属的PMD(Measurement Data)服务,专门用于传输生理测量数据流;
  • 你已通过PMD Control特征发送了ECG流的请求指令(0x01,0x00)并启动了流传输,因此返回的数据就是ECG采样值。

二、ECG数据提取方法

数据格式解析

根据Polar的测量数据规范,ECG数据帧结构如下:

  1. 第1字节:通道数(你的输出中为0x00,代表单通道采样);
  2. 后续每2字节:一个16位有符号整数(小端模式),对应一个ECG采样值,单位为微伏(μV)。

原代码问题修正

你的readData函数存在致命错误:sizeof(data)获取的是指针的固定大小(Arduino中通常为4字节),无法正确获取BLE特征的实际数据长度,必须改用PMD_Data.valueLength()来获取每帧数据的真实长度。

修改后的解析代码

替换原readData函数为以下代码,即可直接输出解析后的ECG数值:

void readData(const uint8_t *data, int length) {
  // 跳过第一个通道数字节,按每2字节一组解析ECG样本
  for (int i = 1; i < length; i += 2) {
    // 小端模式拼接16位有符号整数
    int16_t ecgSample = (int16_t)((data[i+1] << 8) | data[i]);
    Serial.print("ECG采样值: ");
    Serial.print(ecgSample);
    Serial.println(" μV");
  }
}

同时在startStream函数中调用时,需要传入数据长度参数:

readData(PMD_Data.value(), PMD_Data.valueLength());

三、修改ECG采样率的方法

Polar H10的ECG支持130Hz和200Hz两种采样率,修改采样率需要在启动流的指令中指定对应参数:

启动流指令格式

启动ECG流的指令(操作码0x02)结构为:

字节位置含义130Hz对应值200Hz对应值
0操作码(0x02=启动流)0x020x02
1测量类型(0x00=ECG)0x000x00
2-3采样率(小端模式,单位Hz)0x82 0x000xC8 0x00
4分辨率(16位采样对应0x10)0x100x10
5通道数(单通道对应0x01)0x010x01

修改后的启动指令示例

比如要设置200Hz采样率,将startStream函数中的指令改为:

const uint8_t REQUEST_STREAM[] = {0x02, 0x00, 0xC8, 0x00, 0x10, 0x01};
PMD_Control.writeValue(REQUEST_STREAM, 6);

完整修改后的startStream函数

void startStream() {
  // 启动200Hz采样率的ECG流,如需130Hz则将0xC8 0x00改为0x82 0x00
  const uint8_t REQUEST_STREAM[] = {0x02, 0x00, 0xC8, 0x00, 0x10, 0x01};
  if(PMD_Control.writeValue(REQUEST_STREAM, 6)){
    Serial.println("ECG流启动成功");
  } else {
    Serial.println("ECG流启动失败");
  }
  
  while (POLAR_Peripheral.connected()) {
    if (PMD_Data.valueUpdated()) {
      PMD_Data.read();     
      readData(PMD_Data.value(), PMD_Data.valueLength());
      Serial.println();
    }    
  }
  polarDisconnect();
  scanRequried = true;
  requestStreamRequired = true;
}

补充说明

  • 原代码中requestECGStream函数发送的0x01,0x02(请求流设置)、0x01,0x00(请求ECG测量类型)指令是正确的;
  • 确保Polar H10处于佩戴状态,否则可能无法输出有效ECG数据。

内容的提问来源于stack exchange,提问作者Kwang Chee Seng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:55:22