2017-06-02 9 views
0

私はいくつかの音声検出コードを作ることを試みています。私はゼロ交差率でこれをしようとしています。私はいくつかの研究を行い、誰かが話しているときにゼロ交差率が中程度の値でなければならないことを見出しました。マイクに話すとき、ゼロ交差率は背景ノイズ(これはほとんどない)これは私が今計算しようとしていることです。PyAudioストリームデータでゼロクロッシング率を計算する方法

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

オーディオデータは、numpyのテーブルであり、それはコンテンツがpyAudioStream.readの結果であります()誰も私にこれを計算するための正しい方法を言うことができますか?ありがとう

答えて

1

これは多くの不要な乗算です。

  • ん(audioData > 0

    1. は、信号が0を超えているところのブール配列を作成します:ブール比較を使用してnp.diffを通してそれを実行すると、おそらく高速になります。これはやっている

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

      何ゼロクロスの位置が1(立上り)および-1(立下り)になるように対の差(np.diff)を設定します。

    2. は、これらの非ゼロ値が(np.nonzero)。

    次に、交差点の数が必要な場合は、zero_crosses.sizeとすることができます。

    ボーナスとして、すべての十字のタイミングがあるので、ヒストグラムのようなことができるので、あなたの時間履歴に十字架が増えている場所を示すことができます。