<p>假设触发器的1秒分辨率正常。。。你知道吗</p>
<pre><code>import numpy as np
z = np.array([1, 2, 1, 2.2, 3, 4.4, 1, 1.2, 2, 3, 2.1, 1.2, 5, 0.5])
period = 3
</code></pre>
<p>将每个采样点除以其周期(以秒为单位),然后创建一个1秒数据数组-假设线性分布(?)对于每个样品。你知道吗</p>
<pre><code>y = np.array([[n]*period for n in z / period])
y = y.flatten()
</code></pre>
<hr/>
<p>将数据重塑为四个秒周期(有损)</p>
<pre><code>h = len(y) % 4
x = y[:-h]
w = x.reshape((4, len(x) / 4))
</code></pre>
<p>求每四秒周期的和,并求这些间隔的最小值</p>
<pre><code>v = w.sum(axis = -1)
# use the min value of these sums
threshold = v.min() # 2.1
</code></pre>
<p>这为不重叠的4秒块提供了一个总阈值-但是它只为<code>z</code>生成6个<em>触发器</em>,表示42秒的数据。你知道吗</p>
<hr/>
<p>使用重叠的、滚动的窗口来寻找每四秒窗口总和的最小值(无损)</p>
<pre><code>def rolling(a, window, step = 1):
"""
Examples
>>> a = np.arange(10)
>>> print rolling(a, 3)
[[0 1 2]
[1 2 3]
[2 3 4]
[3 4 5]
[4 5 6]
[5 6 7]
[6 7 8]
[7 8 9]]
>>> print rolling(a, 4)
[[0 1 2 3]
[1 2 3 4]
[2 3 4 5]
[3 4 5 6]
[4 5 6 7]
[5 6 7 8]
[6 7 8 9]]
>>> print rolling(a, 4, 2)
[[0 1 2 3]
[2 3 4 5]
[4 5 6 7]
[6 7 8 9]]
>>>
from http://stackoverflow.com/a/12498122/2823755
"""
shape = ( (a.size-window)/step + 1 , window)
strides = (a.itemsize*step, a.itemsize)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
t = rolling(y, 4)
s = t.sum(axis = -1)
threshold = s.min() # 1.3999999
</code></pre>
<p>这将为<code>z</code>生成8个触发器。你知道吗</p>