【问题标题】:How to calculate Zero Crossing Rate with PyAudio stream data如何使用 PyAudio 流数据计算过零率
【发布时间】:2017-06-02 01:13:03
【问题描述】:

我正在尝试制作一些语音检测代码。我正在尝试以过零率来做到这一点。我做了一些研究,发现当有人说话时,过零率应该是一个中等的值,不太高也不太低,但是当我对着麦克风说话时,过零率变得比只有背景的时候高噪音(几乎没有)这是我现在正在做的计算。

((audioData[:-1] * audioData[1:]) < 0).sum()

audioData 是一个 numpy 表,它的内容是 pyAudioStream.read() 的结果,谁能告诉我正确的计算方法?谢谢

【问题讨论】:

    标签: python numpy signal-processing


    【解决方案1】:

    这是很多不必要的乘法。使用布尔比较并通过np.diff 运行它可能会更快:

    zero_crosses = np.nonzero(np.diff(audioData > 0)))[0]
    

    这是在做什么:

    1. 创建一个布尔数组,其中信号高于 0 (audioData &gt; 0)
    2. 进行成对差分 (np.diff),因此过零位置变为 1(上升)和 -1(下降)
    3. 选择那些非零值所在的数组的索引 (np.nonzero)。

    那么如果你想要穿越的数量,你可以直接取zero_crosses.size

    作为奖励,您有所有交叉的时间,因此您可以执行直方图之类的操作,显示您的时间历史中更多交叉发生的位置。

    【讨论】:

      猜你喜欢
      • 2013-03-03
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多