c#中的基频+语音检测

我正试图通过麦克风实时输入来检测语音。

我已经收到输入,执行FFT算法并以dB为单位得到结果。 我有一个频域,一个时域和一个频谱。

我如何获得基频? 如果我得到基频,我可以指定如果频率在某些值之间,那么我们正在谈论的是声音吗? 有没有其他方法可以用我已经拥有的东西做到这一点?

事先提前

有许多不同的频率估算算法 ,正确使用的算法取决于你正在做什么。 你期望什么样的输入? 你想用这个输入做什么? 你有什么样的处理能力?

检测基本频率不会帮助您确定特定的人是否在说话,如果这是您正在尝试做的事情。 你的声音频率不断变化。 你必须制作一个人的共振峰等的“指纹”。

简单地找到FFT的峰值不会给你带来良好的语音效果。 查看倒谱分析 。

取出声谱范围内的谱图上的最高峰值(例如,400到10K hz)。 这应该给你基本的频率。

或者,您可能需要集成频率直方图。 这是因为有时候你的单词开头或包含sibilants(“s”声音)和摩擦音(“f”和“th”声音),它们具有相当高的频率和广谱。 你不想错过演讲的开始,因为它开始的不是元音。

另一个因素是除了声音之外你会选择什么? 有很多背景噪音吗? 哪一种? 如果没有,那么只是声音的存在就足够了。 例如,如果有音乐,那么你就有了完全不同的挑战。 如果你试图区分声音和其他一些声音,那么我很想尝试神经网络方法 – 它可能需要那么高的复杂程度。