我正在尝试在 MATLAB 中编写一个简单的算法,用于检测单个单词。目标是让用户记录一次单词作为模板,然后让用户重复相同的单词以尝试检测它。在这个网站上搜索已经回答了我的许多问题,但我仍然有一些疑问。
到目前为止,我的算法通过以下方式计算 MFCC:
- 从 .wav 文件中提取数据(记录在)
- 构建框架与重叠,应用汉恩窗
- 计算所有这些帧的 FFT
- 使用 FFT 结果计算功率谱 ()
- 对于每一帧,通过将功率谱与 26 个 Mel 滤波器相乘并对给定 Mel 滤波器的结果求和来提取 26 个系数
- 计算的系数
- 对帧的 26 个系数应用 dct
我的目标是使用模板的 MFCC 以及重复工作的 MFCC,并使用 DWT 算法对它们进行比较。我的 DWT 算法已经编程并且可以运行。
但是,我的算法效果不佳,并且某些参数似乎对结果影响很大。以下是我的问题:
这些步骤是否足以检测口语单词?
使用大量固定模板而不是让用户预先录制模板会更好吗?哪种方法应该导致更好的识别性能?
如果该人使用与麦克风不同的距离重复单词,则 MFCC 的增加/减少值足以弄乱 DTW 结果。有没有一种聪明的方法来规范 MFCC 以尝试消除麦克风距离的影响?
一些网站建议仅使用具有最小值的 13 个 MFCC。
- 这是为什么?
- 另外,他们是在谈论最小的量级还是最小值?
- 假设 13 个 MFCC 是非常大的负数,而其他 13 个 MFCC 是小的正数,我会保留哪一组?
编辑:此外,每帧的第一个系数总是比其他系数大得多。我会说它的幅度比我的 100 倍大。显然,当我使用欧几里得距离计算 DTW 时,我会说这个系数是唯一相关的系数,因为它比所有其他值都大得多。它应该被丢弃吗?