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

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建