【问题标题】:finding peak values and corresponding timestamps查找峰值和相应的时间戳
【发布时间】:2019-03-08 00:08:44
【问题描述】:

我正在尝试使用 scipy 来识别我的信号的峰值并尝试获取这些峰值的相应时间戳。使用scipy.signal.find_peaks (https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.find_peaks.html)

我有一个带有data (Numpy ndarray) 的大型数据文件,其中包含采样率为 200 的所有信号值,times 包含每个信号的所有相应样本数。

要有一个sn-p的数据,

# len(data[0]) is 1028721
data[0] = array([0.00333048, 0.00333095, 0.00333494, ..., 0.0062428 , 0.00624095,
       0.00624318])

# len(times) is 1028721
times = array([0.000000e+00, 5.000000e-03, 1.000000e-02, ..., 5.143590e+03,
       5.143595e+03, 5.143600e+03])

到目前为止,我使用以下方法获得了峰值点(主要来自 scipy 示例):

import matplotlib.pyplot as plt
from scipy.signal import find_peaks, peak_prominences
peaks, properties = find_peaks(data[0], height=None, distance = 200)

plt.plot(data[0])
plt.plot(peaks, data[0][peaks], "x")

如果我绘制上面的图,我确实会在峰值点上得到一堆“x”标记,到目前为止这很好。 但是,当我尝试获取每个峰值的值时,如果我执行peakspropertiespeaks 返回一个我不知道它是如何派生的索引,并且属性只是一个空字典。

我想知道是否可以在实际获取每个峰值的信号值方面获得一些帮助。我知道这只是我上面显示的代码的一个 sn-p,但我想知道我是否可以就更好地利用 find_peaks 获得帮助。

理想情况下,我想像peaks[0]properties['height'] 一样返回信号值。

然后,我想知道如何将这些峰值点映射到原始的 times ndarray 以获得相应的时间戳。

任何指针将不胜感激!

【问题讨论】:

    标签: python scipy signal-processing


    【解决方案1】:

    最好在使用 find_peaks 之前将信号分解为时间 (time_np) 和信号 (amp_np) 数组。这很容易通过 wavfile.read(wav_file_path) 返回 fs_rate 和信号来完成。

    Scipy.signal 的 find_peaks 应该返回 find_peaks 找到的峰值的幅度。

    对于返回的 peaks 数组中的每个放大器,您可以在 np_array 中找到索引,其中该索引处的值就是这个最大放大器。该索引应该为您提供查找峰值时间戳的索引。

    请注意,您可能需要对返回的峰设置阈值以仅返回最高的峰。如果这切断了太多的峰,您可以迭代并忽略与前一个峰接近 x 距离的峰(不要将一个山标记为多个峰)。

    【讨论】:

      【解决方案2】:

      下面是我要做的一个例子

      时间 = np.array(rawdat.time_s[100000:5000000]) current = np.array(rawdat.current_nA[100000:5000000])*-1 ## 需要,因为 find_peaks 只找到峰值并且数据正在查看最小值,因此数据被 *-1 反转

      我会使用 峰值,属性 = find_peaks(当前,突出 =(0.2),宽度 = 5,rel_height = 0.5)。 ##这仅选择幅度为 0.2 或更大的峰值。

      results_half = peak_widths(x, peaks, rel_height=0.5) 然后用于获取峰在相应高度处的峰宽,例如半峰全宽 (FWHM)。这被用于确定不同高度的峰的峰不对称性 (AS)。这是通过 AS = (PF-P50)/(P50-PS) 完成的,其中 PF 是峰值完成时间(在感兴趣的峰值百分比处,例如 FWHM =50%),PS 是峰值开始的相应时间,P50 是达到最大值的时间。

      【讨论】:

        猜你喜欢
        • 2014-11-28
        • 1970-01-01
        • 2015-09-23
        • 2015-02-24
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        相关资源
        最近更新 更多