通过wavin lib获取用C ++捕获的音频信号的幅度(或均方根电压)。

时间:2011-04-02 19:14:09

标签: c++ speech-recognition audio-processing

我正在研究一个非常基本的机器人项目,并希望在其中实现语音识别。 我知道这是一个复杂的事情,但我希望只用3或4个命令(或单词)。

我知道使用wavin我可以录制音频。但我希望对音频信号进行实时幅度分析,如何做到这一点,波将被输入为8位单声道。

我想过将信号分成一组特定的时间,进一步将其分成较小的子集,获得子集上的平均有效值,然后将它们相加,然后看看它们与实际存储的有多大不同如果错误低于所有(或大多数)集合的可接受值,则打印该单词。

如何实施? 如果你能提供任何其他建议,那就太好了。

提前谢谢。

2 个答案:

答案 0 :(得分:3)

没有简单的方法可以识别单词,因为它们基本上是一系列音素,可以在时间和频率上变化。

经典孤立词识别系统使用信号MFCC(倒谱系数)作为输入数据,并尝试使用HMM(隐马尔可夫模型)或DTW(动态时间扭曲)算法识别模式。

如果您不想录制按钮,还需要静音检测模块。

例如Edimburgh University toolkit提供了一些这些工具(包含良好的文档)。

如果您不想“从头开始”构建它或有灵感来源,here是这样一个系统(使用自己的工具包)的一个(旧的但是免费的)实现{ {3}}如何运作。

该系统是LVCSR(大词汇量连续语音识别),您只需要它的一个子集。如果有人知道开源减少词汇系统(如简单的IVR),那将是受欢迎的。

如果您想自己制作基本系统,我建议您使用MFCC和DTW:

  • 对于要模拟化的每个目标词:
    • 记录单词的一些实例
    • 通过单词计算一些(例如每10ms)delta-MFCC以获得模型
  • 当您想要识别信号时:
    • 计算此信号的某些delta-MFCC
    • 使用DTW将这些delta-MFCC与每个模型化词的delta-MFCC
    • 进行比较
    • 输出最适合的单词(使用阈值来丢弃垃圾)

答案 1 :(得分:1)

如果您只想识别一些命令,可以使用许多商业和免费产品。请参阅Need text to speech and speech recognition tools for LinuxWhat is the difference between System.Speech.Recognition and Microsoft.Speech.Recognition?Speech Recognition on iPhone。这些问题的答案与许多可用的产品和工具相关联。语音识别和对命令列表的理解是商业上解决的非常普遍的问题。您呼叫的许多语音自动电话系统都使用此类技术。开发人员可以使用相同的技术。

从几个月来看这些问题,我发现大多数开发人员的选择都是这样的:

当然这也可能有用 - http://en.wikipedia.org/wiki/List_of_speech_recognition_software