You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SciPy查找最大峰值的对应索引及ums单位位置?

scipy.signal实现信号最大峰值定位(返回微秒单位位置)

核心实现步骤:

  • 调用scipy.signal.find_peaks完成峰值初检,可通过阈值、峰值间距等参数过滤噪声带来的伪峰
  • 从所有检出峰值中筛选幅值最大的目标峰值
  • 结合采样率/已有时间轴,将峰值对应的采样点索引换算为微秒(ums)单位的位置值

直接可用的实现代码:

import numpy as np
from scipy.signal import find_peaks

def get_max_peak_pos_ums(signal, fs, height_thresh=None, min_peak_sample_gap=None):
    """
    获取信号最大峰值的微秒级位置
    参数:
    signal: 一维原始信号数组
    fs: 信号采样率,单位Hz,用于时间换算
    height_thresh: 可选,峰值最小幅值阈值,过滤低幅噪声峰
    min_peak_sample_gap: 可选,相邻峰值的最小采样点间隔,过滤旁瓣伪峰
    返回:(最大峰值微秒位置, 最大峰值对应采样点索引),无有效峰值时返回None
    """
    detect_params = {}
    if height_thresh is not None:
        detect_params["height"] = height_thresh
    if min_peak_sample_gap is not None:
        detect_params["distance"] = min_peak_sample_gap

    peak_idx_list, _ = find_peaks(signal, **detect_params)
    if len(peak_idx_list) == 0:
        return None

    # 取幅值最大的峰值
    peak_values = signal[peak_idx_list]
    max_peak_idx = peak_idx_list[np.argmax(peak_values)]

    # 索引转微秒:单采样点时长为1/fs 秒,乘1e6转微秒
    max_peak_pos_ums = (max_peak_idx / fs) * 10**6
    return max_peak_pos_ums, max_peak_idx

使用说明:

  • 如果你已经提前生成了单位为微秒的时间轴数组time_arr_ums,不需要走采样率换算,直接取time_arr_ums[max_peak_idx]就是对应位置,结果更准确
  • 检测参数结合实际波形调整即可:底噪高就把height_thresh设为噪声峰值的1.2倍以上,有明显旁瓣就把min_peak_sample_gap设为主瓣宽度对应的采样点数,避免误检
  • 如果采集存在固定触发延迟,在最终返回的位置值上叠加对应的延迟微秒数即可完成校准

内容的提问来源于stack exchange,提问作者wosker4yan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 22:16:01