如何解码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字节:通道数(你的输出中为
0x00,代表单通道采样); - 后续每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=启动流) | 0x02 | 0x02 |
| 1 | 测量类型(0x00=ECG) | 0x00 | 0x00 |
| 2-3 | 采样率(小端模式,单位Hz) | 0x82 0x00 | 0xC8 0x00 |
| 4 | 分辨率(16位采样对应0x10) | 0x10 | 0x10 |
| 5 | 通道数(单通道对应0x01) | 0x01 | 0x01 |
修改后的启动指令示例
比如要设置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
相关产品推荐
相关产品推荐

