当前位置:   article > 正文

用Python实现查心率_心率数据 txt python专用

心率数据 txt 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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/78347
推荐阅读
相关标签
  

闽ICP备14008679号