零过境率

时间:2017-05-12 16:31:24

标签: python scipy signals signal-processing

我正在阅读here中的一段代码:

def freq_from_ZCR(sig, fs):
    # Find all indices right before a rising-edge zero crossing
    indices = find((sig[1:] >= 0) & (sig[:-1] < 0))

    crossings = interpolate(indices, sig)

    return fs / np.mean(np.diff(crossings))

我想检查一下我对此的理解,因为我现在没有意义。根据mlab文档,find&#34;返回某些条件为真的索引&#34;。我想解释一下这是如何工作的。正如我现在看到的那样,(sig[1:] >= 0) & (sig[:-1] < 0)是一个真或假的陈述。另外,为什么有一个按位&而不是and

最后,如果我假设第一行在上升沿零交叉之前返回索引数组。然后我们会有(例如):

indices = [1, 4, 7, 11, 15]

然后找到np.mean(np.diff(indices))是有道理的。为什么我们需要interpolate函数以及它来自何处?从快速搜索中我找不到任何东西。

1 个答案:

答案 0 :(得分:1)

它是按位and,因为它在布尔值列表上运行。

(sig[1:] >= 0)

从第二个元素到最终元素返回一系列布尔值:第一个元素被截断,将值移到一个位置。

(sig[:-1] < 0)

返回一个类似的序列,但在x轴下方,并没有移位,但最后一个元素被截断。

这给出了两个序列的列表:(1)是下一个非负值; (2)当前值为负。两个中的and中的True在函数超出轴的每个位置都会给出import

这能解释得好吗?

我忘记了插入

SicPy有一个可爱的interpolation support;我希望这是代码使用的。没有=CONCATENATE(REPT($E$1,COUNTIF(A1,"*"&$D$1&"*")),REPT($E$2,COUNTIF(A1,"*"&$D$2&"*")),REPT($E$3,COUNTIF(A1,"*"&$D$3&"*")))上下文(未包含在您引用的页面中),我无法确定,但SciPy和NumPy是为这些功能下注的方式。我们的想法是找到信号穿过0的“分数指数”。它假设指数是等间距的x坐标,并插入正确的交叉点。