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

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

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

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日

悬赏问题

  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!