倒谱(Cepstrum)和线性预测倒谱系数(LPCCs)
倒谱是表示一帧语音数据特征的一个序列。从periodogram estimate of the power spectrum计算得到的倒谱系数,可以用于基音追踪(pitch tracking),然而,从AR power spectral estimate计算得到的倒谱系数可以用于语音识别(现在已经被MFCCs所替代)。
One of the benefits of cepstrum and LPCCs over e.g. LPCs is that you can do cepstral mean subtraction (CMS) on cepstral coefficients to remove channel effects。
倒谱(Cepstrum)是什么?
这一节将会描述如何从功率谱的periodogram estimate来计算倒谱。首先,我们介绍自相关系数(autocorrelattion),然后,介绍如何使用类似的方法来计算倒谱。最后,我们介绍LPCCs的相关知识。
倒谱可以看做和自相关序列类似的东西。如果,我们获得了信号的功率谱,我们可以使用Wiener-Khinchin theorem来计算信号的自相关序列。用数学公式表示为:\(x(n)\)是信号的时域表示,\(X(k)\)是信号的复数谱,\(P(k)\)是信号的功率谱,\(A(n)\)是信号的自相关序列。
通过对信号\(x(n)\)取离散傅里叶变换,可以得到信号的复数谱:
\]
对复数谱做逆离散傅里叶变换,可以得到信号的时域表示:
\]
通过对信号\(x(n)\)DFT的绝对值取平方,可以得到信号的功率谱:
\]
如果,我们对信号的功率谱做\(IDFT\),可以得到信号的自相关序列:
\]
如果,我们在对信号的功率谱做\(IDFT\)之前,对功率谱取对数,则可以获得信号的倒谱:
\]
因此,可以将倒谱理解为自相关序列的对数压缩,因为其携带有和自相关序列类似的信息(如“信号的周期性),但是,信号的倒谱是由其对数功率谱而非标准功率谱计算得到的。(注:有资料显示,对功率谱取对数,可以将乘性信号转变为加性信号。)

在上述图片中,展示了原始语音信号的一帧数据、对数功率谱、自相关序列和倒谱。倒谱当中的峰值对应自相关序列当中的一个峰值,但是更为清晰。这个峰值的位置在58sample位置处,对应的基音频率为(16000/58)=275Hz (信号采样率为16kHz)。这是一个相当高的基音频率,原始语音信号是从一位女性说话人得到的。因为倒谱的强峰值,所以经常被用于基音检测。
在MATLAB当中,我们可以使用下面代码得到信号的倒谱:
PowerSpectrum = abs(fft(SpeechFrame,1024)).^2;
AutoCorrelation = ifft(PowerSpectrum,1024);
Cepstrum = ifft(log(PowerSpectrum),1024);
什么是LPCCs(线性预测倒谱系数)?
在前面的小节,我们介绍了标准倒谱(standard cepstrum),线性预测倒谱系数(Linear Prediction Cepstral Coefficients)的计算与其类似,除了LPCCs是由光滑自回归功率谱(smoothed Auto-Regressive power spectrum)计算得到的,而非功率谱的peridogram estimate。例:10阶AR谱估计,Levinson Curbin算法应用前10个自相关系数来计算10个线性预测系数。在MATLAB中,使用下面代码进行实现:
[lp,g] = lpc(frame,10)
前一节所展示信号的线性预测系数为:
1.00 -2.22 1.68 0.05 -1.28 1.32 -0.30 -0.76 1.35 -1.19 0.44
从AR谱估计来计算倒谱:
[lp,g] = lpc(SpeechFrame,10);
ARPowerSpectrum = g ./ abs(fft(lp,1024)).^2;
Cepstrum = ifft(log(ARPowerSpectrum),1024);
注意到,上述计算步骤和前一节的计算过程完全相同,除了计算的功率谱不同。前十个倒谱系数为:
-11.78 2.22 0.79 -0.12 0.38 0.03 -0.20 0.04 -0.42 -0.11
以这种方法计算的系数,第一个系数是被忽略的,仅仅决定于\(g\)。这是一帧数据的线性预测倒谱系数。如果想要计算信号的LPCCs,不要使用这种方法进行计算,因为下面有更加有效的方法。
这一节的内容旨在展示倒谱系数和线性预测倒谱系数之间的区别和联系。
从LPCs计算LPCCs
这是一个简单的从LPCs计算LPCCs的递归公式,不用计算DFT。在下式当中,\(a_k\)表示线性预测系数,在前面小节中表示为\(\text{lp}\)。
\begin{cases}
0 &n<0\\
ln(G) &n=0\\
a_n+\sum{_{k=1}^{n-1}(\frac{k}{n})c(k)a_{n-k}} &0<n\leq p\\
\sum{_{k=n-p}^{n-1}(\frac{k}{n})c(k)a_{n-k}} &n>p\\
\end{cases}
\]
从一个有限LPC系数,可以得到无限长度的线性预测倒谱系数。研究显示,12-20个倒谱系数对语音识别任务已经足够。
参考文献
A Tutorial on Cepstrum and LPCCs
倒谱(Cepstrum)和线性预测倒谱系数(LPCCs)的更多相关文章
- 倒谱Cepstrum本质的理解
1.理解: 信号叠加时,不是都是线性关系(时域相互+ 频率相加):有的时候是两种信号成分相乘得到的,(时域卷积,频域相乘):比如很多齿轮啮合时振动信号调制现象,电机的轴向与径向的振动耦合时采集到的振动 ...
- Mel倒谱系数
Mel倒谱系数:MFCC Mel频率倒谱系数(Mel Frequency Cepstrum Coefficient)的缩写是MFCC,Mel频率是基于人耳听觉特性提出来的,它与Hz频率成非线性对应关系 ...
- 语音频谱语音信号处理之(四)梅尔频率倒谱系数(MFCC)
今天一直在查找语音频谱之类的问题,今天正好有机会和大家共享一下. 语音信号处置之(四)梅尔频率倒谱系数(MFCC) zouxy09@qq.com http://blog.csdn.net/zouxy0 ...
- 梅尔频率倒谱系数(MFCC) 学习笔记
最近学习音乐自动标注的过程中,看到了有关使用MFCC提取音频特征的内容,特地在网上找到资料,学习了一下相关内容.此笔记大部分内容摘自博文 http://blog.csdn.net/zouxy09/ar ...
- 【VS开发】【智能语音处理】语音信号处理之(四)梅尔频率倒谱系数(MFCC)
语音信号处理之(四)梅尔频率倒谱系数(MFCC) zouxy09@qq.com http://blog.csdn.net/zouxy09 这学期有<语音信号处理>这门课,快考试了,所以也要 ...
- 语音识别之梅尔频谱倒数MFCC(Mel Frequency Cepstrum Coefficient)
语音识别之梅尔频谱倒数MFCC(Mel Frequency Cepstrum Coefficient) 原理 梅尔频率倒谱系数:一定程度上模拟了人耳对语音的处理特点 预加重:在语音信号中,高频部分的能 ...
- DTW
DTW主要是应用在孤立词识别的算法,用来识别一些特定的指令比较好用,这个算法是基于DP(动态规划)的算法基础上发展而来的.这里介绍语音识别就先介绍下语音识别的框架,首先我们要有一个比对的模版声音,然后 ...
- 论文笔记:语音情感识别(四)语音特征之声谱图,log梅尔谱,MFCC,deltas
一:原始信号 从音频文件中读取出来的原始语音信号通常称为raw waveform,是一个一维数组,长度是由音频长度和采样率决定,比如采样率Fs为16KHz,表示一秒钟内采样16000个点,这个时候如果 ...
- 【VS开发】【智能语音处理】DTW算法(语音识别)
DTW主要是应用在孤立词识别的算法,用来识别一些特定的指令比较好用,这个算法是基于DP(动态规划)的算法基础上发展而来的.这里介绍语音识别就先介绍下语音识别的框架,首先我们要有一个比对的模版声音,然后 ...
随机推荐
- 在CentOS7中安装scala-2.11.12
从官网下载scala的相关版本 https://www.scala-lang.org/download/2.11.12.html 解压安装包 tar zxf scala-.tgz -C /usr/sc ...
- 聚类-31省市居民家庭消费水平-city
===分三类的===== ======分四类的======== 直接写文件名,那么你的那个txt文件应该是和py文件在同一个路径的 ============code=========== import ...
- php使用coreseek进行中文分词搜索
方法一 使用coreseek源码自带testpack/api/test_coreseek.php代码,进行稍微修改就可以使用了,只不过需要引入”spinxapi.php“类 方法二--制作php扩展 ...
- 前端笔记-javaScript-2
一.JavaScript的对象 简介: 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,String.Math.Array. ...
- c# linq 汇总
例子:List<string> list = new List<string>(); list.Add("1 a");list.Add("2 b& ...
- Mybatis的学习1
ORM 关系数据库需要按对象来处理,出现ORM设置,列对应类的属性,行对应对应类的实例,也就是每一行对应一个新的实例,对应类是需要实现序列化(implements Serializable - im ...
- 如何在Mac上用汇编语言写HelloWorld
首先,Mac自带nasm,不过我们要先将其升级. 升级它的方法有很多种,因为我已经装好了homebrew,所以我直接在终端输入: brew install nasm 这样就升级啦- 接下来,创建一个H ...
- Selenium+TestNG+Maven+Jenkins+SVN(转载)
转载自:https://blog.csdn.net/u014202301/article/details/72354069 一. 创建Maven项目,下载Selenium和TestNG的依赖(依赖可以 ...
- linux,无法进行写操作怎么办?read-only file system
一句命令搞定: mount -o remount rw /
- 线程同步的实现方式(volatile、synchronized、CountDownLatch)
题目: 自定义容器,提供新增元素(add)和获取元素数量(size)方法.启动两个线程. 线程1向容器中新增10个数据.线程2监听容器元素数量,当容器元素数量为5时,线程2输出信息并终止. 方法一:v ...