在语音识别中,前端通常进行信号处理以允许从音频流中提取特征。离散傅里叶变换(DFT)在此过程中应用了两次。第一次是在窗口化之后;在此之后,将进行梅尔合并,然后再进行另一个傅立叶变换。
但是,我注意到,在语音识别器(例如CMU Sphinx中的默认前端)中,第二步操作通常使用离散余弦变换(DCT)而不是DFT ,这是很常见的。这两个操作有什么区别?为什么要第一次进行DFT,然后第二次进行DCT?
在语音识别中,前端通常进行信号处理以允许从音频流中提取特征。离散傅里叶变换(DFT)在此过程中应用了两次。第一次是在窗口化之后;在此之后,将进行梅尔合并,然后再进行另一个傅立叶变换。
但是,我注意到,在语音识别器(例如CMU Sphinx中的默认前端)中,第二步操作通常使用离散余弦变换(DCT)而不是DFT ,这是很常见的。这两个操作有什么区别?为什么要第一次进行DFT,然后第二次进行DCT?
Answers:
离散傅里叶变换(DFT)和离散余弦变换(DCT)执行类似的功能:它们都将有限长度的离散时间矢量分解为缩放和平移基函数的和。两者之间的区别在于每次转换使用的基函数类型;DFT使用一组与谐波相关的复指数函数,而DCT仅使用(实值)余弦函数。
DFT广泛用于一般光谱分析应用程序,这些应用程序进入了一系列领域。它也用作利用信号频域表示特性的技术的基础,例如重叠保存和重叠添加快速卷积算法。
DCT通常用于有损数据压缩应用程序,例如JPEG图像格式。DCT使其非常适合压缩的特性是其高度的“频谱压缩”;在质量上,与其他变换(如DFT)相比,信号的DCT表示倾向于将更多能量集中在少量系数中。这对于压缩算法是理想的;如果您可以使用相对较小的一组DCT系数来近似表示原始(时域或空间域)信号,则可以通过仅存储包含大量能量的DCT输出来降低数据存储需求。
我发现DCT Wiki中的一些细节(也由Pearsonartphoto共享)指出DCT非常适合压缩应用程序。非正式概述部分的末尾很有帮助(粗俗的是我的)。
特别是,众所周知,函数中的任何不连续性都会降低傅立叶级数的收敛速度……函数越平滑,准确表示其所需的DFT或DCT中的项越少,可以压缩 ...但是,DFT的隐式周期性意味着不连续性通常发生在边界处...相反,两个边界甚至总是始终在边界处产生DCT 。这就是DCT ...通常在信号压缩方面比DFT和DST更好的原因。实际上,部分出于计算方便的原因,通常将II型DCT用于此类应用。
此外,您可能会发现此答案也很有用(来自math.stackexchange.com)。它指出:
余弦变换只不过是用于计算具有特殊对称性的序列的傅立叶变换的捷径(例如,如果序列表示来自偶函数的样本)。
之所以会在特征提取过程中看到两次应用傅里叶变换,是因为这些特征基于倒谱概念。倒谱是文字频谱的一种玩法-本质上来说,想法是通过傅立叶变换将信号变换到频域,然后执行另一次变换,就好像频谱是一个信号一样。
频谱描述了每个频带的幅度和相位,而倒谱表示频带之间的变化。与直接从频谱中获取的特征相比,发现倒频谱的特征可以更好地描述语音。
有几个稍微不同的定义。最初,倒谱变换定义为傅立叶变换->复对数->傅立叶变换[1]。另一个定义是傅立叶变换->复对数->傅立叶逆变换[2]。后一种定义的动机在于其分离卷积信号的能力(人类语音通常被建模为激励和声道的卷积)。
已发现在语音识别系统中表现良好的一个流行选择是在频域中应用非线性滤波器组(您所指的梅尔合并)[3]。特定算法定义为傅立叶变换->幅度平方->梅尔滤波器组->实对数->离散余弦变换。
此处可以选择DCT作为第二个变换,因为对于实值输入,DFT的实部是一种DCT。首选DCT的原因是输出是大致去相关的。与装饰相关的特征可以有效地建模为具有对角协方差矩阵的高斯分布。
[1] Bogert,B.,Healy,M.和Tukey,J.(1963)。回声时间序列的数量方差分析:倒谱,伪自协方差,跨倒谱和Saphe开裂。在“时间序列分析专题讨论会”的论文集中,第2页。209-243。
[2] Oppenheim,A.和Schafer,R.(1968)。语音的同态分析。在IEEE音频和电声学报16中。221-226。
[3] Davis,S.和Mermelstein,P.(1980)。连续口语单音节单词识别的参数表示形式的比较。在《 IEEE声学,语音和信号处理事务》第28页中。357-366。
离散傅立叶变换和离散余弦变换之间的区别在于,DCT仅使用实数,而傅立叶变换可以使用复数。DCT最常见的用途是压缩。它等效于两倍长度的FFT。