c#中的基频+语音检测

时间:2009-10-23 14:17:18

标签: c# detection voice frequency

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

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

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

事先提前

2 个答案:

答案 0 :(得分:3)

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

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

简单地找到FFT的峰值不会给你带来良好的语音效果。看看cepstral analysis

答案 1 :(得分:1)

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

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

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