相信柯学 2023-10-23 14:49 采纳率: 0%
浏览 10

如何得到一段曲线中所有波峰的部分

如何得到一段曲线中所有波峰的部分。如下图所示
我想得到红圈圈出的部分,基本上都是局部波峰的位置左右,我寻思通过平滑曲线变成红色线条那样,然后求取导数找穿越位置就能找到局部波峰的位置,但是由于数据波动比较大,平滑后的红色曲线也不好找

img


请问各位有什么方法去寻找吗?如有方法分享,不胜感激

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-23 17:02
    关注

    【以下回答由 GPT 生成】

    我可以给你一个基于峰值检测的方法来找到曲线中的所有波峰。以下是一个使用Python实现的步骤:

    1. 导入所需的库:
    import numpy as np
    import scipy.signal as signal
    import matplotlib.pyplot as plt
    
    1. 准备数据: 你需要将你的曲线数据存储在一个Numpy数组中。

    2. 平滑曲线: 使用信号处理库(scipy.signal)中的savgol_filter函数对曲线进行平滑处理。这个函数使用了Savitzky-Golay滤波器,可以有效地去除噪音。你可以尝试不同的参数值来获得最佳效果。

    smoothed_curve = signal.savgol_filter(curve_data, window_length, polynomial_order)
    
    1. 寻找峰值: 使用argrelextrema函数找到平滑后曲线中的所有极大值(峰值)。argrelextrema函数返回峰值的索引值。
    peak_indices = signal.argrelextrema(smoothed_curve, np.greater)[0]
    
    1. 绘制结果: 使用Matplotlib库中的plot函数将曲线以及找到的波峰绘制出来,以确认结果是否准确。
    plt.plot(curve_data)
    plt.plot(peak_indices, curve_data[peak_indices], 'ro')
    plt.show()
    

    这是一个简单的实现,可以帮助你找到曲线中的波峰。这个方法的效果取决于曲线的特性和平滑参数的选择。你可以根据具体情况进行调整。

    请注意,如果你的曲线具有多个波峰并且它们之间存在一些导数小于零的“波谷”,你可能需要考虑将argrelextrema函数的order参数设置为更高的值,以避免将波峰和波谷混淆。

    希望这个方法对你有所帮助!如果你有任何其他问题,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月23日

悬赏问题

  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探