Contec CMS50E 血氧仪 导出PPG、心率、血氧数据

2023-11-11 15:30

本文主要是介绍Contec CMS50E 血氧仪 导出PPG、心率、血氧数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Contec CMS50E 血氧仪 导出PPG、心率、血氧数据

介绍

通过HID接口实时接收Contec CMS50E串口数据,获取PPG原始信号、心率、SPO2数据并保存。您可以使用原始PPG信号执行进一步的数据分析,包括比较rPPG算法的准确性,训练深度学习网络等等。

Contec CMS50E 血氧仪

用法

  1. 安装python3和相应的pip程序。

  2. 在shell中输入:pip3 Install hidapi安装hidapi

  3. 在电脑上启动智能设备助手软件(通常可以通过血氧仪包装盒附带的U盘安装,也可以咨询客服获取)。

在这里插入图片描述

  1. 把手指放在血氧计上,打开它,然后把它插到电脑上。确保它运行良好,也就是说,在进入下一步之前,您可以在计算机软件上看到曲线变化。

  2. 在设备管理器中检查血氧仪的硬件id(我的设备是VENDOR_ID = 0x28E9, PRODUCT_ID = 0x028A)。修改程序中PPG文件的存放路径,保证数据能够正确存放。

  3. 运行脚本cms50e_hid.py加载数据并保存为csv文件。

代码

import time
import hid
import csv'''
This program is used to extract data information from the Contec CMS50E, 
including PPG signals, Heart rate signals, and SPO2 signals.
Before use, you need to determine the hardware ID of the CMS50E after connected to the computer.
'''# Delay the start time of data collection, ready to start collecting data
def delay_start(delay_time):print("Start recording in...")for i in range(delay_time):print(delay_time - i)time.sleep(1)def collect_data(device, csvFileName):# Initialize datacheck_bit = 0data_update_bit = 0status_bit = 0PPG_bit = 0HR_bit = 0SPO2_bit = 0data_count = 0with open(csvFileName, 'w', newline='') as file:writer = csv.writer(file)writer.writerow(['Count', 'PPG', 'HR', 'SPO2'])delay_start(3)start_time = time.time()while True:data = device.read(18)# hex_data = []# for i in range(len(data)):#     hex_data.append(hex(data[i]))# print(hex_data)print(data)current_time = time.time()time_count = current_time - start_timeif time_count > stop_time:break# Parse the received datafor i in range(3):check_bit = data[0 + 6*i]data_update_bit = data[1 + 6*i]status_bit = data[2 + 6*i]# while data_update_bit==1, Update HR and SPO2if data_update_bit == 0:PPG_bit = data[3 + 6*i]elif data_update_bit == 1:HR_bit = data[3 + 6 * i]SPO2_bit = data[4 + 6 * i]# Save PPG, HR, SPO2 in csvwith open(csvFileName, 'a', newline='') as file:writer = csv.writer(file)writer.writerow([str(data_count), str(PPG_bit), str(HR_bit), str(SPO2_bit)])data_count = data_count + 1if __name__ == '__main__':# ParametersVENDOR_ID = 0x28E9PRODUCT_ID = 0x028AcsvPath = 'G:/Project/Fatigue/data/myDataset/test/'csvFileName = csvPath + 'Output1' + '.csv'stop_time = 70device = hid.device()device.open(VENDOR_ID, PRODUCT_ID)print("Opening the device")collect_data(device, csvFileName)

规范

  • 设备的“采样频率”为60Hz。
  • 血氧仪每秒向PC发送60个数据,每个数据包含6字节,不同的数据用0xeb分隔。
  • 当第二个字节为0时,血氧仪处于采集PPG信号阶段,此时第四个字节的数据为PPG信号;当第二个字节为1时,血氧仪处于更新数据显示阶段,此时第四个字节的数据为心率值,第五个字节的数据为SPO2。数据大约每秒更新一次。

结果

PPG信号波形(前10s)
在这里插入图片描述

更多

更多详细信息请见GitHub仓库:https://github.com/SunHaixin0324/CMS50E_PPG_loader

这篇关于Contec CMS50E 血氧仪 导出PPG、心率、血氧数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/391054

相关文章

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt