倒谱是表示一帧语音数据特征的一个序列。从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)\)取离散傅里叶变换,可以得到信号的复数谱:

\[DFT(x(n)) {\rightarrow} X(k)
\]

对复数谱做逆离散傅里叶变换,可以得到信号的时域表示:

\[IDFT(X(k)) \rightarrow x(n)
\]

通过对信号\(x(n)\)DFT的绝对值取平方,可以得到信号的功率谱:

\[|DFT(x(n))|^2 \rightarrow P(k)
\]

如果,我们对信号的功率谱做\(IDFT\),可以得到信号的自相关序列:

\[IDFT(P(k)) \rightarrow A(n)
\]

如果,我们在对信号的功率谱做\(IDFT\)之前,对功率谱取对数,则可以获得信号的倒谱:

\[IDFT(log(P(k))) \rightarrow C(n)
\]

因此,可以将倒谱理解为自相关序列的对数压缩,因为其携带有和自相关序列类似的信息(如“信号的周期性),但是,信号的倒谱是由其对数功率谱而非标准功率谱计算得到的。(注:有资料显示,对功率谱取对数,可以将乘性信号转变为加性信号。)

在上述图片中,展示了原始语音信号的一帧数据、对数功率谱、自相关序列和倒谱。倒谱当中的峰值对应自相关序列当中的一个峰值,但是更为清晰。这个峰值的位置在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}\)。

\[c(n)=
\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)的更多相关文章

  1. 倒谱Cepstrum本质的理解

    1.理解: 信号叠加时,不是都是线性关系(时域相互+ 频率相加):有的时候是两种信号成分相乘得到的,(时域卷积,频域相乘):比如很多齿轮啮合时振动信号调制现象,电机的轴向与径向的振动耦合时采集到的振动 ...

  2. Mel倒谱系数

    Mel倒谱系数:MFCC Mel频率倒谱系数(Mel Frequency Cepstrum Coefficient)的缩写是MFCC,Mel频率是基于人耳听觉特性提出来的,它与Hz频率成非线性对应关系 ...

  3. 语音频谱语音信号处理之(四)梅尔频率倒谱系数(MFCC)

    今天一直在查找语音频谱之类的问题,今天正好有机会和大家共享一下. 语音信号处置之(四)梅尔频率倒谱系数(MFCC) zouxy09@qq.com http://blog.csdn.net/zouxy0 ...

  4. 梅尔频率倒谱系数(MFCC) 学习笔记

    最近学习音乐自动标注的过程中,看到了有关使用MFCC提取音频特征的内容,特地在网上找到资料,学习了一下相关内容.此笔记大部分内容摘自博文 http://blog.csdn.net/zouxy09/ar ...

  5. 【VS开发】【智能语音处理】语音信号处理之(四)梅尔频率倒谱系数(MFCC)

    语音信号处理之(四)梅尔频率倒谱系数(MFCC) zouxy09@qq.com http://blog.csdn.net/zouxy09 这学期有<语音信号处理>这门课,快考试了,所以也要 ...

  6. 语音识别之梅尔频谱倒数MFCC(Mel Frequency Cepstrum Coefficient)

    语音识别之梅尔频谱倒数MFCC(Mel Frequency Cepstrum Coefficient) 原理 梅尔频率倒谱系数:一定程度上模拟了人耳对语音的处理特点 预加重:在语音信号中,高频部分的能 ...

  7. DTW

    DTW主要是应用在孤立词识别的算法,用来识别一些特定的指令比较好用,这个算法是基于DP(动态规划)的算法基础上发展而来的.这里介绍语音识别就先介绍下语音识别的框架,首先我们要有一个比对的模版声音,然后 ...

  8. 论文笔记:语音情感识别(四)语音特征之声谱图,log梅尔谱,MFCC,deltas

    一:原始信号 从音频文件中读取出来的原始语音信号通常称为raw waveform,是一个一维数组,长度是由音频长度和采样率决定,比如采样率Fs为16KHz,表示一秒钟内采样16000个点,这个时候如果 ...

  9. 【VS开发】【智能语音处理】DTW算法(语音识别)

    DTW主要是应用在孤立词识别的算法,用来识别一些特定的指令比较好用,这个算法是基于DP(动态规划)的算法基础上发展而来的.这里介绍语音识别就先介绍下语音识别的框架,首先我们要有一个比对的模版声音,然后 ...

随机推荐

  1. Inno setup 操作注册表操作参数详解

    原文地址:http://www.dayanzai.me/inno-setup-tut.html [Registry] 段这个可选段用来定义一些你想用安装程序在用户系统中创建.修改或删除的注册表键/值. ...

  2. R数据导入导出(一): read.table()和read.csv()的区别

    之前也参考过一些资料,虽然是这么简单的两个buildin,还是仔细对比了一下,我有两张txt,都是从cube中导出的,就意味着每一列的列数是不一样的.R语言官方文档中有这样一句话不知道大家注意到了没有 ...

  3. mysql安装好之后,查询显示MySQL不是内部命令或外部命令问题

    使用cmd来调用MySQL的时候提示错误,错误是说MySQL不是内部或外部命令. 1.如图所示,遇到的mysql命令错误. 2.现在就要查询mysql是安装在哪,我们在计算机里面搜索mysql.exe ...

  4. [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(二) -- 安装jira 7.5.4

    [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(二) -- 安装jira 7.5.4 环境都配置好以后, 开始搭建Jira的环境, 这里参考了一篇文 ...

  5. 深入理解BERT Transformer ,不仅仅是注意力机制

    来源商业新知网,原标题:深入理解BERT Transformer ,不仅仅是注意力机制 BERT是google最近提出的一个自然语言处理模型,它在许多任务 检测上表现非常好. 如:问答.自然语言推断和 ...

  6. java PDF添加图层,支持多页图层添加

     java PDF添加图层,支持多页图层添加 代码: import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...

  7. 在Laravel项目中遇到的一些问题

    1. 控制器名字要跟控制器类名保持一致(当保存某个版本的文件时,我通常喜欢复制一份并重命名,这时候重命名的文件的类名并没有改变,着往往回影响结果,却一直找不出错在哪里),在备份的时候应该新建一个文件夹 ...

  8. php 积分抽奖活动(大转盘)

    以下是项目代码(公众号,使用积分进行抽奖活动),只可做参考: public function Sncode(){ $tid = I('request.tid', 0, 'intval'); // 大转 ...

  9. redis缓存雪崩,缓存穿透,缓存击穿的解决方法

    一.缓存雪崩 缓存雪崩表示在某一时间段,缓存集中失效,导致请求全部走数据库,有可能搞垮数据库,使整个服务瘫痪. 使缓存集中失效的原因: 1.redis服务器挂掉了. 2.对缓存数据设置了相同的过期时间 ...

  10. JavaScript new Date()在Safari上的坑

    问题描述 我们经常用yyyy-MM-dd HH:mm:ss格式表示日期,如2018-11-11 00:00:00,在js开发中也经常会把此格式字符串格式化为javascript Date类型,如new ...