• 测试


    """
    背景介绍:光电容积脉搏波(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))



    当值未一旬,而视茫茫,而发苍苍,而齿牙动摇
  • 相关阅读:
    CentOS 7安装Splunk
    OpenSwitch操作系统成为Linux基金会官方项目
    新手选择使用 Linux 桌面的七个注意点
    SELinux入门
    新一代 Tor发布,它牛在哪里?
    【光环国际】一位老太太的需求
    【情商】为人处世
    【Teradata】磁盘碎片整理(ferret工具)
    【架构解密】第六章 深入解析分布式存储
    【大数据技术】HBase Meetup资料
  • 原文地址:https://www.cnblogs.com/niuniuc/p/15717108.html
Copyright © 2020-2023  润新知