Python上升/下降沿示波器类触发器

时间:2018-05-16 07:58:15

标签: python numpy edge-detection

我试图根据触发值检测numpy向量中的上升沿和/或下降沿。这有点像示波器触发的工作方式。

numpy向量包含浮点值。触发器本身是浮点值。我希望这可以这样工作:

import numpy as np
data = np.array([-1, -0.5, 0, 0.5, 1, 1.5, 2])
trigger = rising_edge(data, 0.3)
print(trigger)

[3]

换句话说,它会像np.where一样工作,返回一个包含条件为真的位置的向量。

我知道我可以简单地遍历矢量并获得相同的结果(这就是我正在做的事情),但它并不是理想的,你可以想象。是否有一些内置于numpy中的功能可以使用优化的C代码来实现这一点?或者也许在其他一些图书馆?

谢谢。

1 个答案:

答案 0 :(得分:2)

我们可以对one-off进行切片并与触发器进行比较,小于和大于,如此 -

In [41]: data = np.array([-1, -0.5, 0, 0.5, 1, 1.5, 2, 0, 0.5])

In [43]: trigger_val = 0.3

In [44]: np.flatnonzero((data[:-1] < trigger_val) & (data[1:] > trigger_val))+1
Out[44]: array([3, 8])

如果您还希望包括平等,即<=>=,只需将其添加到比较中。

要包括上升沿和下降沿,请以其他方式添加比较 -

In [75]: data = np.array([-1, -0.5, 0, 0.5, 1, 1.5, 2, 0.5, 0])

In [76]: trigger_val = 0.3

In [77]: mask1 = (data[:-1] < trigger_val) & (data[1:] > trigger_val)

In [78]: mask2 = (data[:-1] > trigger_val) & (data[1:] < trigger_val)

In [79]: np.flatnonzero(mask1 | mask2)+1
Out[79]: array([3, 8])