我正在尝试录制两次声音并比较两次录音。我两次都在播放完全相同的声音(例如,两次播放一个小的 .wav 文件并每次都录制它),所以我希望我的尝试不会上升到语音识别的复杂性......
我尝试计算 DFT(使用 FFT)并比较信号的两个功率谱(更准确地说,比较它们的 MSE - 均方误差),但结果令人沮丧(有时对于相同声音的录音,误差大于对于不同的声音)...
然后我发现了 MFCC 并为每个信号计算了它们。这为我将信号分成的每一帧留下了 12 个系数(详情如下)。我应该如何组合这些 12 个系数组来获得一些描述整个信号的值?
(附加它们并为两个阵列提取 MSE 也没有返回令人鼓舞的结果......)
以下是有关我计算 MFCC 的方式和我选择用于计算它的值的一些详细信息。也许在这里我做错了什么:
(采样率 = 22000 赫兹)
- 预强调。
- 帧大小 = 512,帧重叠 = 200。(因为“每个帧应该是 ~20-30 毫秒长”和 512 / 22000 = 0,023 秒 = 23 毫秒。因为“重叠应该是 ~10 毫秒和 200 / 22000 = 0,009 秒 = 9 毫秒)
- 对每个 512 尺寸的帧应用汉明窗。
- 将 FFT 应用于我的信号的每个窗口 512 大小的帧 => 512 个幅度,从女巫我只使用前 256 个。域:从 0 到 22000 的赫兹(分别到 11000)
- 计算 Mel 滤波器组:(最小频率 = 300 Hz,最大频率 = 11000 Hz)
- 根据最小和最大频率计算 mels,然后计算这两个 mel 值之间的 26 个等距值。
- 将它们转换回 Hz => 28 个频率滤波器的数组。
- 为每三个连续值计算一个滤波器组(滤波器三角形)=> 28 - 2 = 26 个滤波器组。
- 将步骤 4 中的整个功率谱(256 个幅度)通过每个三角形滤波器,以获得每个滤波器的“滤波器组能量”=> 26 大小的能量阵列。
- 应用对数:ln(每个能量)(它们仍然是频域值)
- 将 DCT 应用于记录的能量 => 26 大小的(时域?)值数组。
- 对于我的信号的每个215 大小的帧,只取前 12 => 12 个 MFCC 。