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

【传送门】

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

原文地址: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

【自动语音识别课程】第二课 语音信号分析,布布扣,bubuko.com

时间: 2024-10-26 16:28:20

【自动语音识别课程】第二课 语音信号分析的相关文章

语音信号分析

所谓的语音信号分析就是提取表征语音特征的信息,以进行后续的处理:语音识别.说话人识别等.语音特征信息及特征参数的提取.由于语音信号具有短时平稳特性,及在短时内特征参数稳定不变,一般时长为10~30ms,故通常将语音分帧处理,以获得稳定的特征参数.综上,对于一段语音信号,分析时通常表示为由每一帧特征参数组成的特征参数序列. 语音信号处理基本步骤: 端点检测(VAD)切除静音 1预滤波.采样.(A\D)转换 2编码(常用格式PCM ALAW MULAW) 3预处理:(处理已经数字化的信号) 预加重加

【Cocos游戏实战】功夫小子第二课之基础类分析和实现

本节课的视频教程地址是:第二课在此 如果本教程有帮助带您,希望您能点击进去观看一下,而且现在注册成为极客学院的会员,验证手机号码和邮箱号码会赠送三天的会员时间,会员可以无限制的下载和观看所有的视频,谢谢您的支持! 在开始第二节课之前,这里需要声明的是, 首先:本系列课程是为了结合Cocos2d-x 3.x 的基本组件和核心模块的学习而制作的,开发所使用的版本是3.0,但是代码稍加修改就可以运用在3.X的其他版本上. 其次:本游戏项目是一个非商业化项目,游戏资源和代码都会在后续的课程中释放出来,供

吴恩达深度学习课程第二课-改善深层神经网络

第一周 深度学习的实用层面 1.1 训练,配置,测试训练集 学习完如何构建神经网络,接下来学习如何高效运行神经网络 数据集划分: train,dev,test: 在train中训练模型,利用dev选择最佳模型,利用test测试最终模型 1.2 偏差Bias,方差Variance 欠拟合(高偏差),过拟合(高方差) 1.3 处理欠拟合,过拟合方案 1.4 正则化Regularization 原文地址:https://www.cnblogs.com/nrocky/p/12114269.html

数字语音信号处理学习笔记——语音信号的短时时域分析(1)

3.1 概述 语音信号是一种非平稳的时变信号,它携带着各种信息.在语音编码.语音合成.语音识别和语音增强等语音处理中都需要提取语音中包含的各种信息.一般而言语音处理的目的有两种:一种是对语音信号进行分析,提取特征参数,用于后续处理:另一种是加工语音信号,例如在语音增强中对含噪语音进行背景噪声抑制,以获得相对"干净"的语音:在语音合成方中需要对分段语音进行拼接平滑,获得主观音质较高的合成语音,这方面的应用同样是建立在分析并提取语音信号信息的基础上的.总之,语音信号分析的目的就在于方便有效

2019年,这8款自动语音识别方案你应该了解!

2019年,这8款自动语音识别方案你应该了解! 原创: AI前线小组 译 AI前线 1周前 作者 | Derrick Mwiti翻译 | 核子可乐编辑 | LindaAI 前线导读: 基于计算机的人类语音识别与处理能力,被统称为语音识别.目前,这项技术被广泛用于验证系统中的某些用户,以及面向谷歌智能助手.Siri 或者 Cortana 等智能设备下达指令. 从本质上讲,我们通过存储人声与训练自动语音识别系统以发现语音当中的词汇与表达模式.在本文中,我们将一同了解几篇旨在利用机器学习与深度学习技术

语音交互技术——语音信号特征提取

1.短时能量分析(音强),决定短时能量特性有两个条件:不同的窗口的形状和长度.窗长越长,频率分辨率越高,而时间分辨率越低(N为帧长,M为步长). *典型窗函数:矩形窗谱平滑性能好,但损失高频成分,波形细节丢失,海明窗与之相反.一帧内含1~7个基音周期,10kHz下采100~200点. 2.短时平均振幅分析:计算方法简单,但清浊音的区分不如能量明显. 3.短时过零分析:可以区分清音与浊音,浊音时具有较低的平均过零数,而清音时具有较高的平均过零数:可以从背景噪声中找出语音信号,可用于判断寂静无语音和

语音信号的“短时时域”分析

语音信号的预处理 语音信号的频带范围通常是300~3400Hz,一般情况下取采样率为8kHz,本博客的部分代码采用的是已经数字化了的语音. 预加重 预加重的目的是为了对语音的高频部分进行加重,去除口唇辐射的影响,增加语音的高频分辨率. 一般通过使用一阶FIR高通数字滤波器来实现预加重,滤波器函数为: $$H(z)=1-\alpha z^{-1}$$ 其中$\alpha $为预加重系数,$0.9<\alpha<1.0$, 设n时刻的语音采样值为$x(n)$,经过预加重处理后的结果为$y(n)=x

语音信号的梅尔频率倒谱系数(MFCC)的原理讲解及python实现

梅尔倒谱系数(MFCC) 梅尔倒谱系数(Mel-scale FrequencyCepstral Coefficients,简称MFCC).依据人的听觉实验结果来分析语音的频谱, MFCC分析依据的听觉机理有两个 第一Mel scale:人耳感知的声音频率和声音的实际频率并不是线性的,有下面公式 $$f_{mel}=2595*\log _{10}(1+\frac{f}{700})$$ $$f = 700 (10^{f_{mel}/2595} - 1)$$ 式中$f_{mel}$是以梅尔(Mel)为

【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布

内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做了介绍,也带大家配置了SDL的开发环境.请大家按照上一课的步骤创建一个SDL工程,能够初步运行. 如果遇到问题,可以百度,Google相关平台SDL的配置.或者联系小编. 当然了,有些朋友可能会说开发C语言游戏还可以用GTK+这个库,但是个人认为GTK+没有SDL那么适合开发游戏,其创建图形界面的能