Python读取获取波形图波谷/波峰

"小H,这里有份数据,你来做一下数据分析。"ld招招手就把正在刷知乎的小H拉回现实。

"我做吗?可是我也没说过我过我会吧,其实我连python都没怎么写过。"那时候刚来公司没几天的小H这样想道,可能是ld以为本科生都会吧,不过我也不可能自己暴露了。

"收到!"小H马上回复道。

······

但是要分析什么呢?一时间还是没有什么头绪啊。。。

得到ld的指导后,其中的一部分是,小H决定从波形图中提取出波谷,然后从波谷的左边界到极值和极值到右边界去做一个时间对比,这实际上说明了一个动作的来回,从中大概就可以看出一个合规的动作在时间上应该怎么分布的吧?(反正我是没怎么看出来)

取极值简单,min或者什么max都可以简单从一段连续的数组中找到极值,但是什么才叫波谷的区间呢?

因为展示出来的波形图如下:

在正常的时候也是有波动的。经过和ai一番叽里咕噜的交流之后选定了以下的做法:

首先是计算出比较稳健的一个正常波动曲线,也就是上图中的在虚线上半部分的这些,如果没有动作的话他们应该一直都是这样的。具体的方式就是去掉极端值之后计算平均值划定阈值,低于这个阈值以下的点我们都看成是波谷部分。

之后就是找到所有低于低于阈值的点,那应该是一段段区间,再去掉长度不合适的就可以了,当然对于区间我们也只返回左右端点。

python 复制代码
def find_all_valley_ranges(data, threshold_ratio=0.98, min_length=1):
    """
    找到所有连续的波谷区间,返回[[左边界, 右边界], ...]形式的数组
    
    参数:
        data: 一维数组,波形数据
        threshold_ratio: 波谷阈值比例(低于正常波动均值的此比例视为波谷)
        min_length: 最小波谷长度(过滤过短的噪声区间)
    返回:
        valley_ranges: 波谷区间列表,每个元素为[start, end]
    """
    # 1. 计算稳健的正常波动基线(排除极端值)
    plow = np.percentile(data, 10)
    ptop = np.percentile(data, 95)
    normal_data = data[(data >= plow) & (data <= ptop)]
    baseline = np.mean(normal_data)

    # print(f"baseline : {baseline}")

    valley_threshold = baseline * threshold_ratio
    
    # 2. 找到所有低于阈值的点
    valley_points = np.where(data < valley_threshold)[0]
    if len(valley_points) == 0:
        return []  # 无波谷区间
    
    # 3. 分割为连续区间(检测间隙)
    gaps = np.where(np.diff(valley_points) > 1)[0] + 1  # 间隙位置
    intervals = np.split(valley_points, gaps)  # 按间隙分割为连续区间
    
    # 4. 过滤过短区间并转换为[start, end]形式
    valley_ranges = []
    for interval in intervals:
        if len(interval) >= min_length:  # 只保留长度达标者
            valley_ranges.append([interval[0], interval[-1]])
    
    return valley_ranges

代码就是这样了,其实也没有多少内容,对于不同的数据可以通过调节波谷阈值比例、最小波谷长度、排除极端值的范围来把控如何划出波谷。

效果如上。

之后就是对这L,R以及min进行分析,然后美美提交一份并没有什么用的说明上去。

当然这个程序改一下就是查找波峰区间了(找到所有低于阈值->找到所有高于阈值)

相关推荐
一起努力啊~19 小时前
算法刷题--双指针法
算法
余衫马19 小时前
Qt for Python:PySide6 入门指南(中篇)
开发语言·c++·python·qt
叫我:松哥19 小时前
基于YOLO的图像识别系统,结合Flask、Bootstrap和SQLite,提供图像检测、数据管理和用户交互功能,可以检测80个类别
人工智能·python·yolo·信息可视化·sqlite·flask·bootstrap
摘星编程19 小时前
在OpenHarmony上实现LayoutAnimation自定义动画
python
Coovally AI模型快速验证19 小时前
从“单例模仿”到“多面融合”,视觉上下文学习迈向“团队协作”式提示融合
人工智能·学习·算法·yolo·计算机视觉·人机交互
叫我辉哥e119 小时前
新手进阶Python:办公看板集成审批流+精细化权限+日志审计
开发语言·python·信息可视化
ghgxm52019 小时前
Fastapi_00_学习策略与学习计划
python·学习·前端框架·npm·fastapi
程序员:钧念19 小时前
【sh脚本与Python脚本的区别】
开发语言·人工智能·python·机器学习·语言模型·自然语言处理·transformer
明洞日记19 小时前
【软考每日一练007】位图计算与内存管理深度全解
c++·算法·ai·操作系统·进程
敲敲了个代码19 小时前
前端指纹技术是如何实现的?(Canvas、Audio、硬件API 核心原理解密)
前端·javascript·学习·算法·面试·web