基于 signal/spectrum 分析的语音识别

Voice recognition based on signal/spectrum analysis

我正在研究一种通过比较信号和频谱来识别音频词的解决方案。
为了解码音频,我使用 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. 我计算我的光谱
  5. 的[最小值、最大值、平均值、std_deviation、方差]
  6. 我使用步骤 3 中的值计算 correlation coefficient

推理是否正确?系数总是接近 1,我不知道我可以用什么来有效地比较数据来判断单词是否相同。

这些是我的情节:
信号(巧克力,chocolat_2 和香蕉):
光谱(巧克力、chocolat_2 和香蕉):

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

对于信号,这通常是通过(两个信号的)互相关函数完成的,这与卷积非常相似。因此,它可以通过专为提高效率而设计的 FFT 在数学上完成。一旦你采用相关函数,你就可以决定你想要什么阈值 "match",等等。有关更多信息,我会阅读:http://www.aip.de/groups/soe/local/numres/bookcpdf/c13-2.pdf 因为我们正在谈论的是漂亮的数学很重,在我的一门大学课程中教授了几周。