Python 如何利用音频流数据计算过零率
我想做一些语音检测代码。我试图用零交叉率来做这件事。我做了一些研究,发现当有人说话时,过零率应该是一个中等的值,不太高也不太低,但是当我对着麦克风说话时,过零率会变得比只有背景噪声时更高(几乎没有背景噪声)。这就是我现在正在做的计算Python 如何利用音频流数据计算过零率,python,numpy,signal-processing,Python,Numpy,Signal Processing,我想做一些语音检测代码。我试图用零交叉率来做这件事。我做了一些研究,发现当有人说话时,过零率应该是一个中等的值,不太高也不太低,但是当我对着麦克风说话时,过零率会变得比只有背景噪声时更高(几乎没有背景噪声)。这就是我现在正在做的计算 ((audioData[:-1] * audioData[1:]) < 0).sum() ((audioData[:-1]*audioData[1:])0) 是否存在成对差异(np.diff)使零交叉点的位置变为1(上升)和-1(下降) 选择那些非零值所在数
((audioData[:-1] * audioData[1:]) < 0).sum()
((audioData[:-1]*audioData[1:])<0.sum()
audioData是一个numpy表,它的内容是pyAudioStream.read()的结果。有人能告诉我计算这个的正确方法吗?谢谢这是很多不必要的乘法运算。使用布尔比较并在
np.diff
中运行可能会更快:
zero_crosses = np.nonzero(np.diff(audioData > 0)))[0]
这是在做什么:
audioData>0
)np.diff
)使零交叉点的位置变为1(上升)和-1(下降)np.nonzero
)李>
然后,如果你想知道交叉口的数量,你可以只取zero\u crosss.size
作为奖励,你有所有十字架的计时,这样你就可以做一些事情,比如柱状图,显示更多十字架在你的时间历史中发生的位置。这是很多不必要的乘法。使用布尔比较并在
np.diff
中运行可能会更快:
zero_crosses = np.nonzero(np.diff(audioData > 0)))[0]
这是在做什么:
audioData>0
)np.diff
)使零交叉点的位置变为1(上升)和-1(下降)np.nonzero
)李>
然后,如果你想知道交叉口的数量,你可以只取zero\u crosss.size
作为奖励,你有所有十字架的计时,所以你可以做一些事情,比如柱状图,显示更多十字架在你的时间历史中发生的地方