热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【自动语音识别课程】第二课语音信号分析

【传送门】【自动语音识别课程】第一课统计语音识别介绍原文地址:http:blog.csdn.netjoey_suarticledetails36414877转载请注明出处,欢迎交流。概述

【传送门】

【自动语音识别课程】第一课 统计语音识别介绍


原文地址:http://blog.csdn.net/joey_su/article/details/36414877

转载请注明出处,欢迎交流。


概述

针对ASR的语音信号分析

  • 特征
  • 频谱分析
  • 倒谱分析
  • 标准特征:MFCC和PLP分析
  • 动态特征


第一课的结尾提到了语音识别的框图,下图展示了信号分析技术在语音识别系统中的位置:


我们先来认识下语音的产生过程

语音是在发音器官和声道共同作用下产生的。说话时,声带振动发出具有一定周期特性(基音周期T0)的声音,通过喉,咽,鼻腔,口腔等发音器官,以及在嘴唇的摩擦作用下形成语音信号x(t),对x(t)进行傅立叶变换,得到频谱X(Ω ),X(Ω )由共振峰(F1,F2,F3)组成。


发出的语音属于模拟信号,为了对语音信号进行分析和处理,需要进行模数转换。

采样,即把模拟信号转换为数字的形式:

语音引起空气振动,是一种声压波,用麦克风进行录制。

是经过麦克风录制后的语音信号,用一个周期为,幅度为1的冲击函数与相乘,得到,将脉冲转换为离散时间序列即得到周期为

其中,采样频率为,根据奈奎斯特采样定理,采样频率要大于或等于信号最高频率,实际应用中,采样频率选取如下:

需要注意的是在这里采用模拟低通滤波的作用是抗混叠。


数字化后,下一步的工作是提取语音信号的声学特征:

采样后的信号通过前处理后进行声学特征向量提取,得到声学模型。

用于语音识别的声学特征应包含以下特性:

  • 特征应包含区分音素与音素之间的有效信息
    • 良好的时间分辨率(10ms)
    • 良好的频率分辨率(~20 channels)
  • 分离基因频率以及它的谐波成分
  • 对不同说话人具有鲁棒性
  • 对噪音或者信道失真具有鲁棒性
  • 有着良好的模式识别特性
    • 低维特征
    • 特征独立


下图为基于MFCC的前处理

原始语音信号经过A/D转换得到数字信号,经过预加重提升高频成分,接着是加窗,对加窗后的信号进行两个方面的处理,一个方面是提取倒谱特征,即经过离散傅立叶变换后,对频谱幅度进行平方,通过梅尔滤波器组,再进行对数变换,最后进行离散傅立叶变换的逆运算得到倒谱特征;另一方面是求加窗后信号的能量,将这两个方面结合起来形成动态特征,最后再进行特征变换得到声学模型。


下面对每个步骤进行分析

A/D转换在前面已经讲过了,在这里就不赘述。我们从预加重开始。

我们知道,语音是由声门激励通过系统(声道等)产生的,声门激励属于低频,所以语音的能量主要集中在低频,相对于低频来说,高频的能量较低,提升高频分量有助于提高信噪比,可采用预加重的方法,这种方法在通信系统中经常使用。

预加重(第一级)滤波器提升高频,公式如下:

下图对元音进行预加重操作:

从图中可看到,高频部分有一定的提升。


加窗

我们知道语音信号是不断改变的(非平稳),但是非平稳的信号不好处理,所以语音处理算法通常假定信号是稳定的。

分段(短时)平稳性:将语音信号看成是由一帧帧构成(假定被帧是平稳的)

加窗:在时域上,波形乘以窗函数即可得到加窗后的波形,公式为

如果我们简单地将语音信号分成很多小段,那么这些小段(帧)就是矩形窗,而矩形窗的边缘是陡峭的,即不连续的,所以应该选取边缘连续的窗函数,使得相邻两帧可以平滑过渡。

在语音处理中,通常使用锥形的窗代替矩形窗,比如汉明窗(Hamming)或者汉宁窗(Hanning),窗函数如下:

其中,为窗函数的系数,汉明窗为,汉宁窗为

时域上的加窗效果如下:

可见锥形窗边缘部分过渡更加平滑了。


频域上的加窗效果如下:


离散傅立叶变换(DFT)

DFT的目的:从一个加窗的信号的中提取频谱信息(如在每个频带上的能量)

输入:加窗后的信号(时域)

输出:复数,表示N个频带上的第k个频率成分的幅度和相位

DFT公式:

快速傅立叶变换(FFT):是一种计算DFT的有效算法,其中N是以2为底的指数,N>L


加窗与频谱分析

首先对语音信号x[n]加窗,加窗后的信号为,t为时域信号的时间点,m表示第m个窗,然后对每帧进行傅立叶变换,得到短时功率谱

这个过程中,需要注意的有两点,之一是帧长,对于使用较短的帧,其具有较宽的频带,较高的时间分辨率和较低的频率分辨率,而对于较长的帧,则具有较窄的频带,较低的时间分辨率和较高的频率分辨率;另一点要注意的是为了是帧与帧之间的过渡更加平稳,采用了帧移的方法,即两帧之间有个重叠区域。

对于语音识别来说,我们选用20ms的帧长,10ms的帧移。

下图为宽带和窄带的语谱图对比:

这里有个概念叫语谱(spectrogram),实际上就是把每帧的频谱图向左旋转90度,用颜色的深浅表示幅度的大小,幅度越大颜色越深,然后把每帧的颜色信息按照时间(帧)的顺序列出来,所以,语谱的横坐标为时间(帧),纵坐标为频率,颜色为频率的幅度。


短时频谱分析

如果语谱图对我们来说还是不好理解,那么看看上图的类似广西著名景点龙脊梯田(打广告嫌疑)的三维图片。x轴,y轴已经很清楚了,那么z轴呢?由上面的语谱图可知,z轴代表频率的大小,也就是说,山越高,频率越大。


DFT频谱

上图为元音的25ms汉明窗,它的频谱由DFT计算得到。


DFT频谱特征

从前面的介绍中,我们看到频带是等间隔的,但是我们知道,人类的耳朵其实是一个超级强大的语音识别系统,我们研究语音识别时,很大程度是从人类自身来寻找答案的,从人类听觉系统上看,我们的耳朵对声音的获取是有选择性的,对于大于1000Hz的声音,人类的听觉敏感度会降低,具体为什么是1000Hz,应该是跟耳朵的生理构造有关吧。


功率谱包含F0的基频(前面讲过的),正因为这样,使得估计频谱的包络变得困难,但还是有办法的。

短时傅立叶变换的频率与频率之间是高度相关的,例如,功率谱表示高度冗余。


人类听觉

好高大上的感觉,我们再来感受下人类强大的听觉系统吧

生理 感知
强度 响度
基本频率 基音
频谱形状 音色
开合时间 时间
双耳相位差 位置

技术术语:

  • 等响度轮廓
  • 临界带宽
  • 听觉滤波器(临界频带滤波器)
  • 临界带宽

等响度轮廓


非线性频率刻度

前面提到人类的听觉系统对越高频率的敏感度越低,这就说明了人类的频率的感知是非线性的,也就是说人耳自身对声音的频率有所划分,并且这些划分的频段是非线性的(不是等间隔的)。

下面是三种非线性刻度,分别是Mel刻度和Bark刻度和ln刻度,实际语音处理中常用到Mel刻度:

实际语音处理中常用到Mel刻度。


Mel滤波器组

先贴图再说话,个人觉得一个好的图可以代替很多废话(包括这句哈哈)。

首先要明白为什么要设置Mel滤波器组。在这里,我们用到了若干个间隔不等的三角低通滤波器构成的滤波器组,由上面的介绍中我们了解到可以使用Mel刻度来代替线性的频率刻度,以满足人类的听觉特性。所以,我们需要对频率刻度的频点(Frequency bins)进行分类,分类是按顺序进行的,这个分类就需要Mel滤波器组来实现,上图一共12个三角形,所以可以理解为将一大段频点分成了12类,也就是12中Mel刻度功率谱。需要注意的是小于1000Hz的部分为线性间隔,而大于1000Hz的部分为对数间隔。


对数能量

为什么要计算对数能量呢?

  • 可以使用对数来压缩动态范围
  • 人类对于信号能量的敏感度是呈对数的,例如,人类对于高能量中的小变化表现出相对于低能量更低的敏感度,也就是说人类低能量区的变化更敏感
  • 对数使得声学耦合的变化对于特征来说是不可变的,也就是对数使得声学耦合的变化在特征提取中变得可有可无。
  • 移除相位信息,相位信息对于语音识别来说不是很重要(不过不是所有的人都认同这一点)

可通过计算每个Mel滤波器组输出的对数功率谱的平方来得到对数能量。


倒谱分析

什么是倒谱?倒谱倒谱,倒过来的频谱,将频谱(Spectrum)的前四个字母倒过来就变成了倒谱(Cepstrum)。所以我们可以近似理解为倒谱是频谱的一种特殊的逆变换,专业说法是同态处理。

语音产生模型可看成是发声源-滤波器(Source-Filter)模型:

发声源(Sourse):声带振动产生声门源波形

滤波器(Filter):发声源波形通过声道:舌头的位置,下巴等。给定一个特定的形状就会有一个特定的滤波特性(你往我脸上打一拳,脸上的某个部位就会肿出来,求别打脸)。

需要注意的是发声源的特性(F0,动态的声门脉冲)对区分音素并没有帮助;

而滤波器指定了发音器官的位置,这些都是固定的,所以可以区分音素。

说了那么多,倒谱究竟能干嘛呢?

倒谱分析可以帮助我们分离发声源和滤波器!这样,我们就可以把滤波器分离出来,就可以区分音素了,这就是非常重要的倒谱特征,语音识别最基本的单元就是音素,即phone(不是手机啊囧),后面就会有Bi-phone,Tri-phone...要是我们能把最基本的单元区分(识别)了,就可以做后面的工作了。


姗姗来迟的图——将功率谱分离成频谱包络和F0谐波。

对数频谱(频域)通过傅立叶变换的逆变换变成倒谱(时域)(逆频率),同态滤波得到高低两部分(其实就是指在倒谱域中加入两个滤波器来完成),然后再进行傅立叶变换即可得到平滑的频谱(频域),这个是倒谱中较低的部分,还得到对数频谱,也就是倒谱中较高的部分。

从图中我们可知道第三个图就是我们想要的,它就是原功率谱的包络(Envelope),而第四个图的Residue呢就是分离出来的发声源了,这部分可扔掉。就好比榨橙汁,把渣渣过滤掉就是我们可口的橙汁啦。


倒谱

前面已经介绍什么是倒谱了,大家应该有了一定的了解,下面我们再看下倒谱的细节。

正如上面所说,倒谱是通过对对数幅度谱进行逆离散傅立叶变换而得到的,倒谱是时域的谱,我们通常说是逆频率(quefrency),因为是频谱的逆DFT嘛。

逆离散傅立叶变换的公式:

需要注意的是,因为因为对数功率谱是实数的,所以对应的,逆DFT可等价为离散余弦变换,又因为离散余弦变换具有很强的能量集中性,可把能量集中的低(逆)频成分提取出来。


Mel-frequency cepstral coefficients(MFCCs)——梅尔频率倒谱系数

还是来个自问自答吧,什么是MFCCs?

梅尔,也就是前面提到的梅尔刻度;频率,也就是它是一种非线性的频率,即梅尔;倒谱,经倒谱分析后得到的特征;系数,呃,这个不用解释了吧。

给出一个平滑频谱(smoothed spectrum)的概念:变换到倒谱域,截断,再变换回频域。

那么,MFCCs有什么用呢?

  • 作为声学特征被广泛用于基于HMM的语音识别系统
  • 前12个MFCCs通常被用作特征向量(也就是移除F0的信息)
  • 相对频谱特征有着更小的相关性,也就是说比频谱特征更容易建立模型
  • 它的表示非常紧凑(挤挤更健康),因为这12个特征描述了一段语音数据中的一个20ms的帧,再回去看看上面的语谱图就明白了
  • 对于标准的基于HMM的系统,MFCCs在语音识别的性能比滤波器组或者语谱特征更优越
  • 可惜的是MFCCs抵抗噪声的鲁棒性不强(哎呀为什么让我看到这个)


Perceptual Linear Prediction(PLP)——感知线性预测

这是什么家伙?先上图。


PLP (Hermansky, JASA 1990)

这家伙呢利用等响度预加重以及立方根压缩(由感知的结果),而不是MFCCs用到的对数压缩;利用线性预测自回归模型获得倒谱系数。

已经被证明的是PLP跟MFCCs比较,其具有更好的语音识别准确度以及更好的噪声鲁棒性。

貌似很牛X的样子,看看它怎么实现的吧:

将语音信号通过傅立叶变换得到频谱,再对幅度求平方,然后进行临界频带积分(critical-band intergration),接着进行等响度预加重,接着求立方根(对强度进行等响度压缩),然后是进行逆傅立叶变换,最后再经过线性预测即可得到PLP。


动态特征

PLP看起来好高端的样子,我们还是回到MFCCs,研究它的动态特征吧。

我们知道,语音不是恒定的帧到帧(frame-to-frame)的,所以我们可以加入一些特征,表示倒谱系数随时间的变化而变化,也就是说我们要让语音动起来(而不是上面画的那些静态的波形图)。

我们把称为delta特征,也就是动态特征/对时间的导数(time derivatives)。

下面我们就来简单地计算倒谱特征在t时刻的delta特征:

更复杂的方法是:使用回归估计斜率来估计对时间的导数(通常每帧使用4帧)。(果然是复杂,水平有限都不知道怎么翻译囧)

”标准的“语音识别特征为39维:


看不懂啊,写的是什么啊,贴个图就好了。

估计动态特征


我们都知道斜率可以表示变化的快慢,也就是说它可以在一定程度上反映语音信号的动态特征,当然,这里的语音信号指的是特征参数,而不是实际信号。

需要注意的是能量(0阶,1阶,2阶)也是特征参数,为什么会有能量?我们来回顾下MFCCs提取流程就知道啦:

哈哈,看到Energy了吗?


特征转换

正交变换

  • DCT(discrete cosine transform)——离散余弦变换
  • PCA(principal component analysis)——主成分分析

基于类之间的最大可分性

  • LDA (linear discriminant analysis)/ Fisher’s linear discrminant——线性判别分析/费希尔线性判别
  • HLDA (heteroscedastic linear discriminant analysis)——异方差线性判别分析

总结

ASR特征的良好特性

  • MFCCs
    • 短时离散傅立叶分析
    • 梅尔滤波器组
    • 对数幅度平方
    • 逆离散傅立叶变换(离散余弦变换)
    • 使用前12维系数
  • Delta特征
  • 39维特征向量:
    MFCC-12 + energy; + Deltas; + Delta-Deltas

推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
author-avatar
神秘怪我咯_525
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有