基于信号/频谱分析的语音识别

时间:2018-06-05 21:59:26

标签: c++ signal-processing fft voice-recognition libav

我正在研究一种通过比较信号和频谱来识别音频字的解决方案 要解码音频,我使用libavcodec和libavformat,我使用1个参考词并与其他词进行比较 示例:

# Must return true
./vrecog --file_ref chocolat.wav --file_cmp chocolat_2.wav
# Must return false
./vrecog --file_ref chocolat.wav --file_cmp banana.wav

我的步骤:

  1. 我把信号放在std :: vector
  2. 我用Fast Fourier Transform
  3. 将信号转换为频谱
  4. 我计算谱线的[min,max,average,std_deviation,variance]
  5. 我使用第3步中的值来计算correlation coefficient
  6. 推理是否正确?系数总是小于1,我不知道如果单词是否相同,我可以用什么来有效地比较数据。

    这些是我的情节:
    信号(chocolat,chocolat_2和banana): chocolat signal chocolat_2 signal banana signal
    Spectrum(chocolat,chocolat_2和banana):
    chocolat spectrum chocolat_2 spectrum banana spectrum

    我们可以很容易地看到“chocolat”这两个词的信号和频谱似乎接近,但我无法获得相似的百分比。

1 个答案:

答案 0 :(得分:1)

对于信号,这通常通过(两个信号的)互相关函数来完成,这与卷积非常相似。因此,它可以通过FFT在数学上完成,FFT专门设计为高效的。一旦你采用相关函数,你就可以决定你希望成为“匹配”的阈值等等。有关更多信息,我会在http://www.aip.de/groups/soe/local/numres/bookcpdf/c13-2.pdf阅读,因为我们所讨论的是相当重的数学和在我的一个大学课程中,我被教了几个星期。