赞
踩
这也引出了声纹识别,同时也是传统的语音识别框架下的一个很合理的假设:将语音拆分到音素(phone)的级别,狭义的现代汉语只需要32个音素就已经足够用了。
如果考虑到每个音素的形态还会受到前后音素的影响,构建三音素模型(tri-phone)的话,那至多也只有几千个备选的三音素集合(不是简单的32的三次方,我们也会去掉一些稀有的和根本不会出现的搭配),而不同说话人的三音素样本尽管有明显的差异,但都能在空间中的某个区域内聚类。由语音和对应的声学特征的这些性质启发,1995年DA Reynolds首次将混合高斯模型(Gaussian Mixture Model,GMM)成功地应用于文本无关的声纹识别任务,至此之后的20多年,奠定了GMM在声纹识别中地基的地位,后续声纹的发展演进都是以GMM作为基础进行改进和拓展的。
实际应用中,从用户体验和成本的角度上考虑,针对目标用户可采集到的语料是极其有限的(按照学术上的定义,实际可用的语音是稀疏(sparse)的),如何在有限的数据中完成稳定的建模与识别。
对于同一个用户,即便采集到的两段语音内容都是相同的,但由于情绪、语速、疲劳程度等原因,语音都会有一些差异性。如何补偿这种说话人自身语音的差异性
声音是通过录音设备进行采集的,不同的型号的录音设备对语音都会造成一定程度上的畸变,同时由于背景环境和传输信道等的差异,对语音信息也会造成不同程度的损伤,一般在研究中将这些外界影响语音的效应称为信道易变性(Channel Variability)。
有研究表明,当GMM中高斯分量的数量足够多的时候,GMM可以模拟任意的概率分布。
科大讯飞
出门问问
云知声
思必驰
百度(度秘)
腾讯小鲸(消息较少)
Google(Google Now)
微软(小冰、小娜Cortana)
苹果(Siri)
HTK
李开复团队实现,老牌的基于HMM的语音识别工具箱
Juicer
Julius
Kaldi
据说是目前最好的开源工具箱,而且可以商业化,有用到DNN
Alize
说话人识别框架
http://mistral.univ-avignon.fr/mediawiki/index.php/Main_Page
https://github.com/ibillxia/VoicePrintReco/tree/master/Demo
http://dblp.l3s.de/d2r/directory/Publications
gmm-ubm
i-vevtor-plda
deep feature
bottleneck feature
d-vector
特征主要由两个因素决定,第一个是 声腔的尺寸 ,具体包括咽喉、鼻腔和口腔等,这些器官的形状、尺寸和位置决定了声带张力的大小和声音频率的范围。因此不同的人虽然说同样的话,但是声音的频率分布是不同的,听起来有的低沉有的洪亮。每个人的发声腔都是不同的,就像指纹一样,每个人的声音也就有独特的特征。
第二个决定声音特征的因素是 发声器官被操纵的方式 ,发声器官包括唇、齿、舌、软腭及腭肌肉等,他们之间相互作用就会产生清晰的语音。而他们之间的协作方式是人通过后天与周围人的交流中随机学习到的。人在学习说话的过程中,通过模拟周围不同人的说话方式,就会逐渐形成自己的声纹特征
从语音字典是否受限的角度上来区分声纹文本无关识别和文本相关识别,文本无关就是说系统对于输入的语音的内容并不做限制,识别系统应当可以克服语音中字典信息的多变性和差异性,对语音背后的身份做出准确判断;而文本相关识别,意思是我们预先会限制语音的字典集合的规模。
如下图是说话人A,B分别说“四”和“九”的声谱图
A对应“四”的语音波形 B对应“四”的语音波形 A对应“九”的语音波形
A说“四”和“九”的声谱图看上去比A说“四”B说“四”的差异还大。
10--30ms内可以认为语音信号近似不变
语音中最小的基本单位是音素,音素是人类能区别一个单词和另一个单词的基础。音素构成音节,音节又构成不同的词和短语。音素又分为元音和辅音。狭义的现代汉语只需要32个音素就已经足够用了。如果考虑到每个音素的形态还会受到前后音素的影响,构建三音素模型(tri-phone)[a1] 的话,那至多也只有几千个备选的三音素集合(不是简单的32的三次方,我们也会去掉一些稀有的和根本不会出现的搭配)
元音,又称母音,是音素的一种,与辅音相对。元音是在发音过程中由气流通过口腔而不受阻碍发出的音。不同的元音是由口腔不同的形状造成的。(元音和共振峰关系密切)
辅音,气流在口腔或咽头受到阻碍而形成的音叫做辅音,又叫子音。不同的辅音是由发音部位和发音方法的不同造成的。
清音:清音和浊音的概念在文献中涉及较多。严格来讲,很多特征的提取都需要区分清音和浊音。当气流通过声门时,如果声道中某处面积很小,气流高速冲过此处时产生湍流,当气流速度与横截面积之比大于某个临界速度便产生摩擦音,即清音。简单来说,发清音时声带不振动,因此清音没有周期性。清音由空气摩擦产生,在分析研究时等效为噪声。
浊音:语音学中,将发音时声带振动的产生音称为浊音。辅音有清有浊,而多数语言中的元音均为浊音。浊音具有周期性。
发清音时声带完全舒展,发浊音时声带紧绷在气流作用下作周期性动作
响度,音高,音色都是一种主观心理量
目前自己的理解:
不同频率上的能量分布决定了音色
不同的频率高低决定了音调
不同的振幅决定了响度
语音信号——短时傅里叶变换à频率和能量(幅度)——幅度映射到一个灰度级表示à形成声谱图
共振峰是指在声音的频谱中能量相对集中的一些区域,共振峰不但是音质的决定因素,而且反映了声道(共振腔)的物理特征。声音在经过共振腔时,受到腔体的滤波作用,使得频域中不同频率的能量重新分配,一部分因为共振腔的共振作用得到强化,另一部分则受到衰减。由于能量分布不均匀,强的部分犹如山峰一般,故而称之为共振峰。在语音声学中,共振峰决定着元音的音质。
共振峰是表征语音信号特征的基本参数之一。它在语音信号合成、语音识别和语音编码等方面起着重要作用。共振峰可以等效为声道系统函数的复极点对,由于人的声道平均长度为17cm,而语音信号的能量主要集中在0-5kHz。因此语音通常包含4到5个稳定的共振峰,一般只需要研究前三个共振峰。
共振峰的一个示意图
从图中可以看到:1语音信号的能量在频率上存在频谱倾斜;2共振峰位置与谱包络位置很一致(这也是谱包络法提取共振峰的原理)
普通话10个元音共振峰均值数据表(Hz)
声带振动的频率称为基音频率,相应的周期就成为基音周期。
语音信号分为清音跟浊音,浊音又称有声语言,携带者语言中大部分的能量,浊音在时域上呈现出明显的周期性;而清音类似于白噪声,没有明显的周期性。发浊音时,气流通过声门使声带产生张弛震荡式振动,产生准周期的激励脉冲串。这种声带振动的频率称为基音频率,相应的周期就成为基音周期。基音周期信息在语音识别、说话人识别、语音分析与语音合成,以及低码率语音编码、发音系统疾病诊断、听觉残障者的语言指导等多个领域有着广泛的应用。(因为女性基频比男性高,所以有些算法中使用基频来区分性别,还挺准的)
一般的声音都是由发音体发出的一系列频率、振幅各不相同的振动复合而成的。这些振动中有一个频率最低的振动,由它发出的音就是基音(fundamental tone),其余为泛音。
音频采样率是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实越自然。在当今的主流采集卡上,采样频率一般共分为22.05KHz、44.1KHz、48KHz三个等级,22.05KHz只能达到FM广播的声音品质,44.1KHz则是理论上的CD音质界限,48KHz则更加精确一些,关于大小的计算:
实际上大小是26460552字节,:
44100(每秒采样率)*4(左右声道,每个声道两字节)*150(音频长为150)
任何模拟信号由各种不同频率的成份所组成。最简单的情形是正弦波,其中所有的信号能量在某一频率集中。实际上,模拟信号通常有复杂的波形,有许多频率的成分。模拟信号的最高频率成份决定那个信号的带宽。如果所有的其他因素不变,则频率愈高,带宽也愈大。
假设给定的模拟信号的最高的频率成份(用赫兹表示)是 fmax。依照 Nyquist 定理,取样率必须至少是 2 fmax,或最高的模拟频率成份的两倍如果那个取样率少于 2 fmax,模拟输入信号的一些最高的频率成份将不能在数字输出中正确表现。当一个这样的数字信号被数模转换器转换回模拟形式的时候,错误的频率成份看起来不是最初的模拟信号中的频率成分。这种不合需要的情况是失真的一种形式叫做混淆现象。
如果采样率为44100 = 2*fmax,则可以得到fmax = 44100/2;
人的发声系统大致如下:
对应的语音信号产生的时域模型如下:
气流通过声道摩擦形成清音,类似于噪声,声带开关闭合震动形成浊音,我们听到的声音是清音和浊音的混合,而浊音因为不同人的声带,发音方式,声道共振相异而不一,其周期,通过声道形成的共振锋,轨迹等是语音识别,声纹识别的重要特征,频率倒谱系数是将浊音和清音频率分开,并进一步分析共振峰,轨迹,周期的一种方法。
清音+浊音在时域表现为“+”,在频率表现为“*”,在时域我们能观测到的是清音+浊音的结果,无法将他们分离,因此需要转换到频域,即所谓的声谱图。下面是一段音频采样的频谱。
这里会与图像不同,图像系统的噪点很大程度是与有效信息并存,并可观测到,影响我们对图像内容的判断,这种噪声很多在高频内,因此在频域用低通滤波就可以去除噪点(同时边缘等有用的高频信息也会受影响)
语音由于清音(噪声)与浊音混合在一起,需要更进一步的处理,如果原始信号为 ,浊音为 ,噪声为 有:
频率取log后,叫做倒谱,英文Cepstrum(频谱spectrum的前面四个字母顺序倒过来就是倒谱了),进一步,我们将频率再看成时域,经过傅里叶变换得到倒谱的频域(伪频域pseudo-frequency),将伪频域的低频和高频分离再做IFFT逆傅里叶变换,即可得到分离的 。
对于人类听觉感知的实验表明,人类听觉的感知只聚焦在某些特定的区域,而不是整个频谱包络。
而Mel频率分析就是基于人类听觉感知实验的。实验观测发现人耳就像一个滤波器组一样,它只关注某些特定的频率分量(人的听觉对频率是有选择性的)。也就说,它只让某些频率的信号通过,而压根就直接无视它不想感知的某些频率信号。但是这些滤波器在频率坐标轴上却不是统一分布的,在低频区域有很多的滤波器,他们分布比较密集,但在高频区域,滤波器的数目就变得比较少,分布很稀疏。
人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的。在语音特征的提取上,人类听觉系统做得非常好,它不仅能提取出语义信息, 而且能提取出说话人的个人特征,这些都是现有的语音识别系统所望尘莫及的。如果在语音识别系统中能模拟人类听觉感知处理特点,就有可能提高语音的识别率。
梅尔频率倒谱系数(Mel Frequency CepstrumCoefficient, MFCC)考虑到了人类的听觉特征,先将线性频谱映射到基于听觉感知的Mel非线性频谱中,然后转换到倒谱上。
将普通频率转化到Mel频率的公式是:2595*log10(1+f/700)
由下图可以看到,它可以将不统一的频率转化为统一的频率,也就是统一的滤波器组。
在Mel频域内,人对音调的感知度为线性关系。举例来说,如果两段语音的Mel频率相差两倍,则人耳听起来两者的音调也相差两倍。
梅尔频率滤波原理(三角帶通濾波器)计算过程:
三角帶通濾波器在「梅爾頻率」(Mel Frequency)上是平均分佈的,先将频率转到梅尔频率,然后按滤波器组个数平均分布得到每个滤波器的两端的梅尔频率,再转换到普通频率域计算每个滤波器的端点频率。
三角帶通濾波器有兩個主要目的:
對頻譜進行平滑化,並消除諧波的作用,突顯原先語音的共振峰。(因此一段語音的音調或音高,是不會呈現在 MFCC 參數內,換句話說,以 MFCC 為特徵的語音辨識系統,並不會受到輸入語音的音調不同而有所影響。
1)先对语音进行预加重、分帧和加窗;
2)对每一个短时分析窗,通过FFT得到对应的频谱;
3)将上面的频谱通过Mel滤波器组得到Mel频谱;
4)在Mel频谱上面进行倒谱分析(取对数,做逆变换,实际逆变换一般是通过DCT离散余弦变换来实现,取DCT后的第2个到第13个系数作为MFCC系数),获得Mel频率倒谱系数MFCC,这个MFCC就是这帧语音的特征;
这时候,语音就可以通过一系列的倒谱向量来描述了,每个向量就是每帧的MFCC特征向量。
语音信号具有相当大的随机性,即使同一个人在不同时刻发同一个音,也不可能具有完全的时间长度,大部分情况下,两个序列整体上具有非常相似的形状,但是这些形状在x轴上并不是对齐的。
所以我们在比较他们的相似度之前,需要将其中一个(或者两个)序列在时间轴下warping扭曲,以达到更好的对齐。而DTW就是实现这种warping扭曲的一种有效方法。DTW通过把时间序列进行延伸和缩短,来计算两个时间序列性之间的相似性。动态时间规整DTW是一个典型的优化问题,其使用满足一定条件的时间规整函数W(n)描述测试模板和参考模板的时间对应关系,求解两模板匹配时累计距离最小所对应的规整函数。DTW的约束条件为:
1.边界条件:任何一种语音的发音快慢都有可能变化,但是其各部分的先后次序不可能改变,因此所选的路径必定是从左下角出发,在右上角结束;
2.连续性:一个特征点不可能跨过某个点去匹配,只能和自己相邻的点对齐;
3.单调性:点必须是随着时间单调进行的。
DTW过程大致如下:
设有两个时间序列:
Q =q1,q2,…,qi,…,qn;
C =c1,c2,…,cj,…,cm;
为了对齐这两个序列,DTW需要构造一个n x m的矩阵网格,其中n,m为两个序列的长度,矩阵元素(i, j)表示序列Q的每一个点和序列C的每一个点之间的相似度,距离越小则相似度越高,一般采用欧式距离表示。每一个矩阵元素(i, j)表示点qi和cj的对齐。DP算法可以归结为在约束条件下寻找一条通过此网格中若干格点的路径,路径通过的格点即为两个序列进行计算的对齐的点。
理解I-vector需要先理解:
1、 Total-Variability Modeling全变异模型
2、 JFA算法
3、 信号的子空间表示
信道补偿算法有很多,先说一下LDA。关于LDA的资料很多,这里简单说一下为什么LDA能够用在说话人识别而且是如何进行信道补偿的。
首先,LDA至多可生成C-1维子空间(C为分类类别数),LDA降维后的度区间在 [1,C-1] ,与原始特征数n无关,因此二分类问题至多可以降维到一维,导致有些线性不可分数据分布情况无法分类。在说话人识别中,大部分情况是二分类问题,所以这里LDA的作用是将原始高维特征数据降维到一维,这样每一个样本特征向量映射为一维上的一个点,这个点的数值表示该点到原点的距离。
当一个说话人有很多语音时,表现为这些语音在说话人空间中聚集为一簇。如果这些语音收到信道的影响,那么就表现为这个说话人的语音的方差很大。然后,LDA尝试着找到一个新的方向,将原来的所有数据投影到这个方向,使得在这个方向中同一说话人的数据具有最小的类内方差,同时不同说话人之间的距离尽量大。这样,就达到减小信道差异的影响了。
LDA其实也是一种降维方法。它尽量去移除不需要的方向,最小化类内的方差信息量。也就是,LDA寻找一个新的方向去更好地对不同的类做出分类。可见,LDA非常适合作为说话人识别系统的信道补偿算法。
当使用LDA对测试数据和模型的I-vector进行重新投影后,然后计算它们之间的cosine距离,就可以作为最后的得分。
最后简单说一下,LDA如何找到这个映射方向。前面不是说LDA的目的是最大化类间距离,最小化类内距离么。我们很容易认为只要定义一个目标函数然后去用一般的最优化方法去求近似解就好了。其实,不用这么麻烦的,LDA是可以直接求取解析解的。具体方法就是对目标函数求导并且令导数为零。但是在求导之前,记得对分母进行归一化,因为如果不归一化的话,映射方向扩大任意倍等成立,所以不好确定映射方向的具体值。
OK,求解析解的过程中,经过一系列变化,我们最终只要求出原始样本的均值和方差就可以最佳映射方向 w,这就是Fisher 于 1936年提出的线性判别分析。
因为短时平稳特性,所以进行分帧
随机加高斯噪声,这样处理后,训练出的模型抗干扰性要强点
一定程度的解决音量归一化问题
语音信号的预加重,目的是为了对语音的高频部分进行加重,去除口唇辐射的影响,增加语音的高频分辨率。一般通过传递函数为 一阶FIR高通滤波器来实现预加重,其中a为预加重系数,0.9<a<1.0。设n时刻的语音采样值为x(n),经过预加重处理后的结果为y(n)=x(n)-ax(n-1),这里取a=0.98。
将语音信号分为一些较短片段来进行处理,这就是分帧,通常使用加窗来实现。分帧是避免在傅里叶变换的过程中损失时域信息,因为如果对整个音频信息进行傅里叶变换的话,时域信息是没有保存的,小波也是使用类似的方法保存时域信息。另外就是语音固有的短时平稳特性,即语音信号一般在10ms到30ms之间,我们可以把它看成是平稳的明智的解决办法就是每次取一段数据,进行分析,然后再取下一段数据,再进行分析。
窗口函数有:
1.矩形窗
2.三角窗
3.Hanning窗
4.Hamming窗
5.Blackman窗
6.Kaiser窗
等,语音常用的是Hamming窗,函数如下:
在傅里叶变换的过程中,因为是假设处理的数据在时间维度上是周期信号,这一假设实际上是引入了误差,和频率泄露,窗口函数一定程度的减少了这种情况,窗口函数的选择主要取决于窗口函数频谱的主瓣宽度和旁瓣衰减强度。
说话人确认和说话人辨认
我们说话是连续的,20ms是构成说话内容的音素。例如说“我们”,时间上在时间维度上是【我-我-我-们-们…】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。