这就是我对MFCC计算过程中DCT步骤的理解:其背后的原理是分开由于滤波器的重叠,对数频谱幅度的相关性(来自滤波器组)。本质上,DCT可以平滑由这些对数谱幅值给出的光谱表示。
正确地说,下图中的蓝线代表对数谱向量表示的光谱幅度,红线是矢量经过DCT验证后的矢量吗?
#1 楼
让我从头开始。计算倒频谱的标准方法如下:$$ C(x(t))= \ mathcal {F} ^ {-1} [\ log(\ mathcal {F} [x(t )])] $$
对于MFCC系数,情况有些不同,但仍然相似。
经过预加重和加窗后,您可以计算信号的DFT并应用以mel比例分开的重叠三角形滤波器的滤波器组(尽管在某些情况下,线性比例优于mel):
关于倒频谱定义,现在您以mel频率标度表示频谱的包络(缩减频谱)。如果代表这一点,那么您会发现它有点像原始信号频谱。
下一步是计算上面获得的系数的对数。这是由于事实,倒谱应该是同态变换,可以将信号与声道的冲激响应分开,等等。如何?
原始语音信号$ s(t)$主要与声道的冲激响应$ h(t)$卷积:
$$ \ hat s(t)= s(t)\ star h(t)$$
在频域中,卷积是频谱的乘积:
$$ \ hat S(f)= S(f)\ cdot H(f)$$
可以根据以下属性分为两部分:$ \ log(a \ cdot b)= \ log(a)+ \ log(b)$。
我们也希望脉冲响应不会随时间变化,因此可以通过减去平均值轻松删除。现在您了解了为什么我们采用带能的对数。
倒频谱定义的最后一步是逆傅立叶变换$ \ mathcal {F} ^ {-1} $。问题在于我们只有对数能量,没有相位信息,因此应用
ifft
后,我们得到的是复数值系数-很难将所有这些努力简化为紧凑的表示形式。尽管我们可以采用离散余弦变换(它是FT的“简化”版本)并获得实值系数! 该过程可以可视化为将余弦曲线与我们的对数能量系数匹配。您可能还记得倒频谱也称为“频谱的频谱”?这是非常重要的一步-我们正在寻找对数能量包络系数中的任何周期性。
所以现在您看到了,现在很难理解原始的频谱看起来像。另外,我们通常只采用前12个MFCC,因为较高的MFCC描述了对数能量的快速变化,这通常会使识别率变差。因此,进行DCT的原因如下:
本来必须执行IFFT,但是从DCT中获取实值系数更容易。此外,我们不再拥有完整的频谱(所有频率段),而是在mel滤波器组中具有能量系数,因此使用IFFT有点过分。
您在第一张图上看到滤波器组是重叠的,因此来自彼此相邻的能量正在两个之间散布-DCT允许对它们进行解相关。请记住,这是一个很好的属性,例如在高斯混合模型的情况下,您可以使用对角协方差矩阵(其他系数之间没有相关性),而不是完整的矩阵(所有系数都具有相关性),这大大简化了事情。
解耦梅尔频率系数的另一种方法是PCA(主成分分析),该技术仅用于此目的。幸运的是,事实证明,DCT在去相关信号方面非常接近PCA,因此使用离散余弦变换具有另一个优势。
一些文献:
Hyoung-Gook Kim,Nicolas Moreau,Thomas Sikora-MPEG-7音频和
超越:音频内容索引和检索
评论
$ \ begingroup $
为什么不能从IFFT中获取复数的绝对值?如果复数很难处理,为什么在计算倒谱时我们采用IFFT,而不仅仅是DCT?感谢您的解释。这个数字特别有帮助。
$ \ endgroup $
–acannon828
2014年4月30日在16:48
$ \ begingroup $
@ acannon828:请参阅我编辑后的答案的最后3点。我希望现在能解释一切。
$ \ endgroup $
–jojek♦
2014年4月30日19:33
$ \ begingroup $
好评如潮。任何文献都可以参考。
$ \ endgroup $
–鲍勃·伯特(Bob Burt)
17年4月20日在17:42
$ \ begingroup $
@BobBurt:你去!
$ \ endgroup $
–jojek♦
17年4月20日在17:55
$ \ begingroup $
谢谢你的书。大多数事情似乎都可以在其中解释。这本书是否也涵盖了关于声道的理论-我似乎找不到与之相关的任何东西。
$ \ endgroup $
–鲍勃·伯特(Bob Burt)
17年4月20日在19:24
#2 楼
不仅使DCT平滑,还减少了代表光谱所需的尺寸数量。 DCT有助于降维,因为它倾向于在前几个系数中压缩大部分频谱能量。评论
$ \ begingroup $
谢谢。这帮助我了解了@pichenettes降维的含义。
$ \ endgroup $
–acannon828
14年4月30日在16:51
#3 楼
其背后的原理是,由于滤波器的重叠,将对数频谱幅度的相关性(与滤波器组)分开。从本质上讲,DCT可以平滑由这些对数频谱幅度给出的频谱表示。
这是不正确的。对数谱幅值之间存在相关性,不仅因为它们重叠,而且还因为没有任何数字序列表示对数谱幅值的“有意义”(例如,发生在自然语音和声音中)序列。 “有意义的”对数谱幅值趋于相当平滑,在较高频率下能量总体降低,等等。有人会说,所有“有意义的”对数谱幅值向量的空间尺寸都小于40或无论您使用哪个频段;并且DCT可以看作是降维,可以将40通道数据映射到这个较小的空间。
本质上,DCT平滑了这些对数频谱幅度给出的频谱表示。 br />
DCT不进行任何平滑处理。从DCT数据重建时,您会看到平滑-平滑是由于DCT丢失了信息以及随后的系数截断所致。
但是MFCC系数不存储平滑频谱-它存储一系列不相关的DCT系数。
评论
我可以在哪里下载您的代码进行测试?下图?帖子中没有图片。