测试

"""
背景介绍:光电容积脉搏波(Photoplethysmography,PPG)是一种适宜在日常生活环境下进行生理信号采集的手段。该技术利用光电信号感知血液容积的变化,
并通过算法从中提取心率、心率变异性、血氧饱和度等人体医学信号,是一种无创检测技术。data.txt中的数据为某人的光电容积脉搏波(PPG)信号的采样值,请按照以下要求进行系统设计:
1. 首先从采集到的PPG信号文件中导入数据。
2. 计算所采集到的全部数据的持续时间并告知用户,然后用户可以任意指定某个时间段进行心率分析。
1) 分析该时间段内所有完整心跳周期的平均心率并打印出来,单位为次/分,精确到小数点后1位。
2) 绘制出所分析数据的图形,包括原始波形和进行均值滤波之后的波形,作为两个子图放在同一幅图中;在进行均值滤波之后的波形图中找出所分析时间段内全部PPG信号的完整周期,
即在波峰或波谷处用明显的标识标出。图片效果如下所示(标出波峰或波谷其中之一即可):

"""

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal #滤波等
filter_window_size = 7 # 滤波窗口大小


print("请输入某个时间段(1-9349):")
start_point = int(input("请输入起始时间段:"))
end_point = int(input("请输入结束时间段:"))

dpi = 200


def get_data():
with open('data.txt', 'r') as f:
raw_list = f.readlines()
raw_list = raw_list[start_point:end_point]
raw_list = [int(item.strip()) for item in raw_list]

filter_window = []
smooth_list = []
for item in raw_list:
if len(filter_window) < filter_window_size:
filter_window.append(item)
else:
smooth_data = np.mean(filter_window)
smooth_list.append(smooth_data)
filter_window.pop(0)
filter_window.append(item)

# print(raw_list)
# print(smooth_list)
# print(filter_window)
return raw_list, smooth_list


# 寻找波峰
def get_fengzhifenggu(data_list):
size = 10
max_list = []
min_list = []
wu_cha = 1
for i in range(0, len(data_list) - size + 1):
if data_list[i+wu_cha] == max(data_list[i:i+size]):
max_list.append(i)
if data_list[i+wu_cha] == min(data_list[i:i+size]):
min_list.append(i)
return max_list, min_list


raw_list, smooth_list = get_data()
max_list, min_list = get_fengzhifenggu(smooth_list)

y = [smooth_list[item] for item in max_list]
plt.figure(dpi=dpi)
plt.subplot(211)
plt.plot(range(len(raw_list)), raw_list)
plt.subplot(212)
plt.plot(range(len(smooth_list)), smooth_list)
plt.scatter(max_list, y, color='r', marker='*', s=20)
plt.show()


avg = []
for i in range(0, len(max_list)-1):
avg.append(max_list[i+1] - max_list[i])
print(40 * 60 / np.mean(avg))



当值未一旬,而视茫茫,而发苍苍,而齿牙动摇
原文地址:https://www.cnblogs.com/niuniuc/p/15717108.html