赞
踩
一、
期末Python老师要求做一个项目,内容是在Pycharm中通过matplotlib模块测心率。
二、
data.txt中的数据为某人的光电容积脉搏波(PPG)信号的采样值,请按照以下要求进行分析:
三、下面是详细代码:
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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。