でこぼこで、信号が特定のしきい値を下回って(以前は)、特定の他のしきい値を超えたポイントを検出したいと思います。これは、ノイズの存在下でのデバウンスや正確なゼロクロッシングなどのためのものです。
このような:
import numpy
# set up little test problem
N = 1000
values = numpy.sin(numpy.linspace(0, 20, N))
values += 0.4 * numpy.random.random(N) - 0.2
v_high = 0.3
v_low = -0.3
# find transitions from below v_low to above v_high
transitions = numpy.zeros_like(values, dtype=numpy.bool)
state = "high"
for i in range(N):
if values[i] > v_high:
# previous state was low, this is a low-to-high transition
if state == "low":
transitions[i] = True
state = "high"
if values[i] < v_low:
state = "low"
配列を明示的にループせずにこれを行う方法が欲しいのですが、各状態値は前の状態に依存するため、方法は考えられません。ループなしで行うことは可能ですか?