IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 用Python实现查心率 -> 正文阅读

[Python知识库]用Python实现查心率

一、
期末Python老师要求做一个项目,内容是在Pycharm中通过matplotlib模块测心率。
二、
data.txt中的数据为某人的光电容积脉搏波(PPG)信号的采样值,请按照以下要求进行分析:

  1. 数据分析的起始位置为:
    取学号最后两位减一后乘以100(比如最后两位为26,则从(26-1)100开始)作为初始处理点,记为k,向后分析300行(即300个数据点)。
    提示:我给同学们的数据每一行有6个字符(5个数字加一个换行符),可以使用seek(k*6)快速定位。
  2. 绘制出所分析数据的图形,包括原始波形和进行均值滤波之后的波形,作为两个子图放在同一幅图中;在进行均值滤波之后的波形图中找出所分析数据段内全部PPG信号的完整周期,即在波峰或波谷处用明显的标识标出。
  3. 已知数据采集速率为40采样点/秒,请求出你所分析的300个数据点内所有完整心跳周期的平均心率,单位为次/分,精确到小数点后1位。
    提示:若求出某个周期内的数据点数为n,则该周期对应的心率为:40 * 60 / n(次/分)
  4. 最终提交内容为:
    1) 要求2所生成的图片,图片名称为你所求出的平均心率,例如:平均心率为72.6bpm;
    图片效果为(标出波峰或波谷其中之一即可):
    2) 完整代码的py文档,命名为学号+姓名。
    在这里插入图片描述

三、下面是详细代码:

import numpy as np
import matplotlib.pyplot as plt

SN = '19560640837'  # 学号
Name = '阿豪'  # 姓名
raw_list = []  # 存放原始数据列表
dpi = 200  # 图片分辨率
start_pos = ((int(SN[-2:]) - 1) * 100) * 6
data_limit = 300  # 分析数据量
filter_window = 8  # 滤波窗口大小
myfilter = []  # 自建均值滤波器
smooth_list = []  # 存放滤波后数据列表
print(start_pos)
with open('F:\学习\Python/data.txt', 'r') as f1:
    tail = f1.seek(0, 2)
    f1.seek(start_pos)
    while f1.tell() < tail:
        raw_data = int(f1.readline())
        if len(raw_list) == data_limit:
            break
        else:
            if len(myfilter) < filter_window:
                myfilter.append(raw_data)
            else:
                smooth_data = np.mean(myfilter)
                myfilter.pop(0)
                myfilter.append(raw_data)
                raw_list.append(raw_data)
                smooth_list.append(smooth_data)
slip_max = []
slip_min = []
size = 9
x1 = []
x2 = []
for i in range(0, len(smooth_list) - size + 1):
    if smooth_list[i + 4] == max(smooth_list[i:i + size]):
        slip_max.append(max(smooth_list[i:i + size]))
        x1.append(i)
    if smooth_list[i + 4] == min(smooth_list[i:i + size]):
        slip_min.append(min(smooth_list[i:i + size]))
        x2.append(i)
t = []
for i in range(0, len(x1)-1):
    t.append(x1[i+1]-x1[i])
#平均心率 40 * 60 / n(次 / 分)
average = (40/np.mean(t))*60
print(average)
print(smooth_list)
print(raw_list)
x = range(len(raw_list))
plt.figure(dpi=dpi)
plt.subplot(211)
plt.plot(x, raw_list)
plt.xlabel('x-采样点', fontproperties='SimHei')
plt.ylabel('y-幅值', fontproperties='SimHei')
plt.title('原始波形', fontproperties='STLITI', fontsize=24)
plt.subplot(212)
plt.plot(x, smooth_list)
plt.xlabel('x-采样点', fontproperties='SimHei')
plt.ylabel('y-幅值', fontproperties='SimHei')
plt.title('均值滤波波形', fontproperties='STLITI', fontsize=24)
plt.scatter(x1, slip_max, marker='*', color='c')
plt.scatter(x2, slip_min, marker='.', color='r')
plt.show()

四、最后运行代码,显示心率波峰图

在这里插入图片描述
下面给大家分享百度网盘和阿里云盘的链接,供大家免费下载使用。
百度网盘-测心率
阿里云盘-测心率
(百度网盘提取码hqjd)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:07:41  更:2021-07-15 16:10:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 12:05:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码