【发布时间】: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”标记,到目前为止这很好。
但是,当我尝试获取每个峰值的值时,如果我执行peaks 或properties,peaks 返回一个我不知道它是如何派生的索引,并且属性只是一个空字典。
我想知道是否可以在实际获取每个峰值的信号值方面获得一些帮助。我知道这只是我上面显示的代码的一个 sn-p,但我想知道我是否可以就更好地利用 find_peaks 获得帮助。
理想情况下,我想像peaks[0] 或properties['height'] 一样返回信号值。
然后,我想知道如何将这些峰值点映射到原始的 times ndarray 以获得相应的时间戳。
任何指针将不胜感激!
【问题讨论】:
标签: python scipy signal-processing