Cepstrum Analysis(续)

这里,我们对Fourier transform做一个简单的回顾。

设h(t)是一个时域函数,而H(f)是一个频域函数,则Fourier transform为:

H(f)=∫∞−∞h(t)e2πiftdtH(f)=∫−∞∞h(t)e2πiftdt

H(f)=\int_{-\infty}^\infty h(t)e^{2\pi i ft}\mathrm{d}t

inverse Fourier transformation为:

h(t)=∫∞−∞H(f)e−2πiftdfh(t)=∫−∞∞H(f)e−2πiftdf

h(t)=\int_{-\infty}^\infty H(f)e^{-2\pi i ft}\mathrm{d}f

因此,对频谱做FT,也被叫做inverse FT,简称IFT。

从上式还可以看出,FT和IFT的公式非常类似,因此从编程角度,一个FT函数既可以做FT,也可以稍作修改后,做IFT运算。因此在不强调目的性的情况下,IFT也可以直接称为FT。比如,MFCC特征最后的IDFT变换,实际上是DCT变换。

传统的IFFT的结果是一个时域函数,然而这里是对log frequency domain做IFFT,因此,它的值域只能被称作pseudo-frequency domain。

从上图可以看出,Spectral Envelope主要是低频成分,而Spectral details主要是高频成分。

显然,如果把Spectral Envelope和Spectral details叠加起来就是原来的频谱信号了。

换句话说,我们知道了logX[k]log⁡X[k]\log X[k],就可以求出x[k]x[k]x[k],经过低通滤波就可以得到h[k]h[k]h[k]。

这里的x[k]x[k]x[k]被称作倒谱Cepstrum(这个是一个新造出来的词,把spectrum的前面四个字母顺序倒过来就是倒谱的单词了)。

而我们所关心的h[k]h[k]h[k]就是倒谱的低频部分,它在语音识别中被广泛用于描述特征。

Mel-Frequency Analysis

Mel scale

Mel scale是Stevens、Volkmann和Newman于1937年发明的一种主观音阶标准。

Stanley Smith Stevens,1906~1973,Harvard University心理学教授。

John E. Volkmann,1905~1980,Radio Corporation of America研究员。

Edwin B. Newman,1908~1989,Harvard University心理学教授。

声音作为一种波动,一般以Hz作为频率差异的客观标准,然而相同频率差的两组声音,在人耳听来,其频率差(也就是所谓的音阶)实际上是不同的。因此,Stevens等人采取实验的方法,确定了人耳的主观音阶标准。

该标准以Mel作为单位,规定1000Hz的声音所对应的音阶为1000Mel。

Mel scale从严格的定义上并没有一个简单的公式来表示。但一般采用如下公式进行转换:

m=2595log10(1+f700)m=2595log10⁡(1+f700)

m = 2595 \log_{10}\left(1 + \frac{f}{700}\right)

从中可以看出,人耳对于高频声音的分辨率实际上是不如低频声音的

Mel是melody的别称,有的blog上说Mel是个人,他发明了MFCC,这纯粹是胡说八道。

MFCC

Mel-frequency Cepstral Coefficients是由Paul Mermelstein提出的一种音频特征。

Paul G. Mermelstein,明尼苏达大学神经科学教授。

由之前对Mel scale的介绍可知:人耳对于高频声音的分辨率实际上是不如低频声音的。

因此,我们可以使用一组Triangular window对声音进行滤波(如上图所示)。这里的Triangular window不是均匀分布的,而是低频部分更密集一些。

这些Triangular window被称作Mel-Filters。被Mel-Filters过滤之后的Spectrum,被称作Mel-Spectrum

对Mel-Spectrum执行Cepstrum Analysis,就得到了Mel-Frequency Cepstral Coefficients,也就是MFCC。

上图是MFCC的计算流程。

除了MFCC之外,delta MFCC和double-delta MFCC也是常用的特征。他们的计算过程如下所示:

可见,delta MFCC和double-delta MFCC,实际上就是MFCC的一阶差分和二阶差分。

在实际中使用的语音特征,往往是各种特征的组合。比如,常用的39维MFCC特征,其组成如下:

12 MFCC feature

1 energy feature

12 delta MFCC features

12 double-delta MFCC features

1 delta energy feature

1 double-delta energy feature

计算能量谱

energy的计算比较简单,无论是如上图的时域能量统计,还是在DFT之后进行频域能量统计都是可以的。参见《数学狂想曲(一)》。

需要注意的是,频域能量包含了实部能量+虚部能量。

Discrete Cosine Transform

离散傅立叶变换需要进行复数运算,尽管有FFT可以提高运算速度,但在图像编码、特别是在实时处理中非常不便。离散傅立叶变换在实际的图像通信系统中很少使用,但它具有理论的指导意义。

根据离散傅立叶变换的性质,实偶函数的傅立叶变换只含实的余弦项,因此构造了一种实数域的变换——离散余弦变换(DCT)。

通过研究发现,DCT除了具有一般的正交变换性质外,其变换阵的基向量很近似于Toeplitz矩阵的特征向量,后者体现了人类的语言、图像信号的相关特性。因此,在对语音、图像信号变换的确定的变换矩阵正交变换中,DCT变换被认为是一种准最佳变换。

相对应的还有IDCT。

DCT还有一个特点是,对于一般的语音信号,这一步的结果的前几个系数特别大,后面的系数比较小,可以忽略。比如Mel-Filters一般取40个三角形,所以DCT的结果也是40个点;实际中,一般仅保留前12~20个,这就进一步压缩了数据。

类似的,还有Discrete Sine Transform,它和DCT的区别在于:DST用于实奇对称数据,而DCT用于实偶对称数据。这里的对称指的是采样对称,而非物理数值上的对称。

除此之外,针对人耳的听觉特性,还有Constant-Q transform。它与STFT的公式基本相同,差别在于后者的filter的中心频点间隔均匀,而前者的间隔越往高频越稀疏:

δfk=21/n⋅δfk−1=(21/n)k⋅δfminδfk=21/n⋅δfk−1=(21/n)k⋅δfmin

\delta f_k = 2^{1/n} \cdot \delta f_{k-1} = \left( 2^{1/n} \right)^k \cdot \delta f_\text{min}

上式中的fkfkf_k即为filter的中心频点。

参考

http://blog.csdn.net/zouxy09/article/details/9156785

梅尔频率倒谱系数(MFCC)

https://my.oschina.net/jamesju/blog/193343

语音特征参数MFCC提取过程详解

https://liuyanfeier.github.io/2017/10/26/2017-10-27-Kaldi%E4%B9%8Bfbank%E5%92%8Cmfcc%E7%89%B9%E5%BE%81%E6%8F%90%E5%8F%96/

kaldi之fbank和mfcc特征提取

https://zhuanlan.zhihu.com/p/26680599

语音信号预处理及特征参数提取

FBank

Filter bank和MFCC的计算步骤基本一致,只是没有做IDFT而已。

FBank与MFCC对比:

1.计算量:MFCC是在FBank的基础上进行的,所以MFCC的计算量更大

2.特征区分度:FBank特征相关性较高(相邻滤波器组有重叠),MFCC具有更好的判别度,这也是在大多数语音识别论文中用的是MFCC,而不是FBank的原因

3.使用对角协方差矩阵的GMM由于忽略了不同特征维度的相关性,MFCC更适合用来做特征。

4.DNN/CNN可以更好的利用这些相关性,使用fbank特征可以更多地降低WER。

参考:

http://blog.csdn.net/wxb1553725576/article/details/78048546

Kaldi特征提取之-FBank

Pitch Detection

http://blog.csdn.net/zouxy09/article/details/9141875

基音周期估计(Pitch Detection)

Vector Quantization

http://blog.csdn.net/zouxy09/article/details/9153255

矢量量化(Vector Quantization)

fMLLR

https://blog.csdn.net/xmdxcsj/article/details/78512645

声学特征变换fMLLR

SGMM

https://blog.csdn.net/quhediegooo/article/details/68946100

子空间高斯混合模型-SGMM

PLP

Perceptual Linear Prediction

《Perceptual Time Varying Linear Prediction Model for Speech Applications》

https://www.isip.piconepress.com/courses/msstate/ece_8463/lectures/current/lecture_17/index.html

SPECTRAL TRANSFORMATIONS

VTLN

https://blog.csdn.net/jiangyangbo/article/details/6535928

VTLN(Vocal Tract Length Normalisation)

HMM与语音识别

HMM的基本概念参见《机器学习(二十二)》,这里谈一下HMM在语音识别领域的应用。

从概率的角度来说,语音识别的目标是寻找最可能的P(W∣O)P(W∣O)P(W\mid O)。这里的W表示word,O表示observation。

直接找显然没这么容易,所以要用到Bayes公式:

P(W)P(O∣W)P(O)P(W)P(O∣W)P(O)

\frac{P(W)P(O\mid W)}{P(O)}

这里只有P(O)P(O)P(O)已知,剩下的两个参数都需要额外提供。其中HMM提供P(O∣W)P(O∣W)P(O\mid W),LM提供P(W)P(W)P(W)。

由于HMM的path上的概率是各个transition probability的乘积,而这些概率都小于1,因此他们的乘积必然是更小的数。这时可以考虑使用对数,不仅可将乘法变为加法,同时数值的范围也得到了改善。

语音识别的评价指标

语音识别的评价指标主要是Word Error Rate(WER)。

错误的情况包括三种:

1.Substitutions:错词。

2.Deletions:漏词。

3.Insertions:多词。

WER=100%×Subs+Dels+Insword in correct sentenceWER=100%×Subs+Dels+Insword in correct sentence

WER=100\%\times \frac{Subs+Dels+Ins}{\text{word in correct sentence}}

类似的还有CER/PER:Character/Phoneme Error Rate。

需要注意的是,评价WER时,需要在ASR output和Label之间进行对齐操作,而不是简单的从左往右匹配,否则将无法正确处理Deletions和Insertions的情形。

还有根据公式可知,WER是可以大于100%的。

参考:

https://blog.csdn.net/quhediegooo/article/details/56834417

语音识别评估标准-WER

声学模型进阶

语音质量

更高的采样率可以降低WER。一般来说,16KHz相比8KHz的WER要小10%左右。

Voice Detection

长时间的silence会增加WER,因此我们需要判断当前是否在说话。

Voice Detection包括两个方面:

1.Beginning-Point Detection。也叫做Voice Activity Detection(VAD)。有些类似于唤醒检测,但并不局限于设备的开机时刻。

2.End-Point Detection。

参考:

https://zhuanlan.zhihu.com/p/24432663

Voice Active Detection(VAD)的过去时与现在时

https://blog.csdn.net/wxb1553725576/article/details/78069089

Kaldi特征提取之-VAD

https://blog.csdn.net/shichaog/article/details/78257068

VAD综述

Feature normalization

有时候需要对Feature进行normalization。例如,对MFCC特征减去均值,可以有效提升在噪声环境下的识别率。

Tri-phone Models

英语一般包含43个音素,因此Tri-phone共有433≈80K433≈80K43^3\approx 80K种不同组合。

但是这些组合的概率是众寡悬殊的,有些组合很常见,而有些组合很罕见。因此我们需要合并相似的发音组合。这通常采用CART决策树来进行聚类。这样做还可以减少状态数量,提高计算效率。

发音词典

Pronunciation Dict用于将文本转换成对应的发音。比较常用的有CMU的发音词典,用于美国英语,包含了100K的单词。用法参见《LSTM Speech Recognition实战》。

然而,无论多大的词典都会有遇到Unknown Words的情况。一般可根据现有发音构建统计模型,来预测发音。这也是符合人们的认知规律的:人遇到一个陌生的新词,也会根据过往的经验,来预测词的发音。通常这样做,会有70%~85%的准确率。

语音识别(五)——Mel-Frequency Analysis, FBank, 语音识别的评价指标, 声学模型进阶相关推荐

  1. 语音识别基础(二):语音识别方法

    语音识别的全称是自动语音识别(Automatic Speech Recognition,ASR),说得多了, 就把"自动"省去了,认为"自动"是理所当然的了.语 ...

  2. 2021-08-13 【翻译】Mel Frequency Cepstral Coefficient (MFCC) tutorial

    原文http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coeff ...

  3. 【语音识别】基于matlab GUI智能语音识别门禁系统【含Matlab源码 596期】

    ⛄一.案例简介 本文基于Matlab设计实现了一个文本相关的声纹识别系统,可以判定说话人身份. 1 系统原理 a 声纹识别 这两年随着人工智能的发展,不少手机App都推出了声纹锁的功能.这里面所采用的 ...

  4. 语音识别系统报告_2018-2024年中国语音识别系统行业市场发展格局及投资价值评估研究报告_中国产业信息网...

    报告目录: 章语音识别系统行业相关概述 第一节语音识别系统行业相关概述 一.产品概述 二.产品特点 三.产品分类 四.产品用途 第二节语音软件行业经营特征 第三节语音识别系统行业经营模式分析 第二章语 ...

  5. 语音识别遇到的困难 - 浅谈语音识别技术的发展趋势与应用前景

    四.语音识别遇到的困难 目前,语音识别研究工作进展缓慢,困难具体表现在: (一)语音识别系统对环境敏感,采集到的语音训练系统只能应用于与之对应的环境,而且当用户输入错误时不能正确响应,应用起来相对困难 ...

  6. 语音识别——基于深度学习的中文语音识别系统框架

    本文搭建一个完整的中文语音识别系统,包括声学模型和语言模型,能够将输入的音频信号识别为汉字. 该系统实现了基于深度框架的语音识别中的声学模型和语言模型建模,其中声学模型包括CNN-CTC.GRU-CT ...

  7. python基于百度接口的语音识别_Python基于百度接口的语音识别

    1. 主要模块介绍 1) 使用pyaudio 模块来调用麦克风录制音频 2) 使用百度提供的密钥获取access_token 3) 使用百度的语音识别接口,识别语音 2.pyaudio模块的安装 pi ...

  8. 语音识别模型_语音 识别_语音识别 - 云+社区 - 腾讯云

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 语音识别模型wavenet介绍这篇文章介绍了wavenet,一种原始音频 ...

  9. 在线语音识别_腾讯云在线语音识别_在线语音识别成文字 - 云+社区 - 腾讯云

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 为您提供高精度的语音识别服务,融合领先的自然语言处理技术. (备注:如需使用,请先 ...

  10. 语音识别的两个方法_语音识别的应用有哪些

    语音识别的两个方法 通过微软的SAPI,不仅仅可以实现语音合成TTS,同样可以实现语音识别SR.下面我们就介绍并贴出相关代码.主要有两种方式: 1.使用COM组件技术,不管是C++,C#,Delphi ...

最新文章

  1. 每天AI资讯这么多,该看哪些?推荐一份优质AI内参!
  2. Android recovery支持adb shell
  3. html5 json转字符串,web前端-js小记(5)-字符串及json
  4. axios请求接口http_Vue实战038:api接口模块化统一管理
  5. Git之深入解析如何使用Git的分布式工作流程与如何管理多人开发贡献的项目
  6. socket网络编程——套接字地址结构
  7. php 接口怎么响应,Stripe PHP API方法响应的结构是什么?
  8. 两台电脑usb直连传数据_如何通过一根USB数据线把手机/平板充当电脑的第二个显示器...
  9. CentOS7设置静态ip地址的两种方式
  10. 面试官:自己搭建过vue开发环境吗?
  11. 证明的思路 —— 数形结合
  12. Verilog 教程
  13. 51单片机学习--数字时钟数字电压表
  14. 低成本,高效率,更成熟的实时数据采集方案来了
  15. 策划运营分会场:巴别时代 CEO--放开偏执,拥抱变革
  16. python批量修改图片大小--pathlib库
  17. 背诵考研英语单词计划总览
  18. 画坦克__坦克可移动
  19. 数据挖掘的10个常见问题
  20. 惠普暗夜精灵2怎么打开后盖_散热为何如此优秀?HP暗影精灵II代拆解

热门文章

  1. 重试利器Guava Retrying
  2. html中怎么去除多余的代码,去除HTML代码中所有标签的两种方法
  3. 完美解决Python 发送邮件126,136,QQ等,都会报•554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件
  4. 巴菲特致股东的一封信:2000年
  5. html a3纸大小,A3和A4的纸大小都是多大的?
  6. 踩坑指南!pytorch1.2.0安装!又是猛男落泪的一天!
  7. CentOS 7下限制ip访问
  8. 博客在微博中怎么添加html,新浪微博怎么进博客
  9. 第11章-ThreadSpecificStorage
  10. 国外 广告牌_广告牌下一首流行歌曲的分析和预测,第1部分