2015-01-05 16:56:22 u012637501 阅读数 18264
  • 机器学习算法实战——神秘奥妙的支持向量机

    支持向量机算法是机器学习的重要算法,如今已应用在图像处理、 语音识别和自然语言处理等方面。本课程详细讲解支持向量机的原理、相关概念、 推导过程和代码实战。包括:Logistic函数、最大化间隔、凸二次优化、核函数、 数据中的噪声点处理等知识。最后用了手写字分类实例,详细讲解了相关的代码实战。

    184 人正在学习 去看看 穆辉宇
一、语音识别技术
转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空)
    语音识别技术,广泛来说是指语意识别和声纹识别;从狭义上来说指语音语义的理解识别,也称为自动语音识别(ASR)。其关键技术包括选择识别单元、语音端点检测、特征参数提取、声学模型及语音模型的建立。语音识别技术目前在桌面系统、智能手机、导航设备等嵌入式领域均有一定程度的应用。其主要技术难题是识别系统的适应性较差、受背景噪声影响较大,未来的发展方向应是无限词汇量连续语音非特定人语音识别系统。
(1)信号处理及特征提取模块
    该模块的主要任务是从输入信号中提取特征,供声学模型处理。同时,它一般也包括了一些信号处理技术,以尽可能降低环境噪声、信道、说话人等因素对特征造成的影响。
(2)统计声学模型
    典型系统多采用基于一阶隐马尔科夫模型进行建模。
(3)发音词典
    发音词典包含系统所能处理的词汇集及其发音。发音词典实际提供了声学模型建模单元与语言模型建模单元间的映射。
(4)语言模型
    语言模型对系统所针对的语言进行建模。理论上,包括正则语言,上下文无关文法在内的各种语言模型都可以作为语言模型,但目前各种系统普遍采用的还是基于统计的N元文法及其变体。
(5)解码器
    解码器是语音识别系统的核心之一,其任务是对输入的信号,根据声学、语言模型及词典,寻找能够以最大概率输出该信号的词串,从数学角度可以更加清楚的了解上述模块之间的关系。
    当今语音识别技术的主流算法,主要有基于动态时间规整(DTW)算法、基于非参数模型的矢量量化(VQ)方法、基于参数模型的隐马尔可夫模型(HMM)的方法、基于人工神经网络(ANN)和支持向量机等语音识别方法.

二、非特定人、大词汇量、连续语音识别系统
       连续数字语音识别系统经过训练和识别两个部分。此训练可以看作是对 HMM 建立模型的过程。通过对参数重新评估,调整模型的各种参数,得到具有较好鲁棒性的模型。对基本模型进行改进和优化,可以有效提高精确度,获得更好的识别率。识别过程则可以认为是使用现有的 HMM 模型库、数据字典和语法控制组成识别网络,运用搜索算法寻找最佳匹配过程。 首先对等待识别的语音信号进行采样,然后通过转换变成电信号。预处理这 些电信号,也就是对信号进行增加预重、帧数分离、检测端点等操作。处理过后,对语音信号提炼生成特征的矢量数据。按识别模块中的 HMM 模型和词典要求组合,形成合词模型后完成识别,将结果和语言模型进行匹配,淘汰那些不符合语法限制的句子和词组,最后输出符合规范的识别的过程,就是语音识别的全过程。特征值、HMM 模 型、语法和数据字典都是影响识别率高低的重要因素。
    语音识别过程通常包括"前段"和"后端"两部分:“前端”模块 主要的作用是进行端点检测(去除多余的静音和非说话声)、降噪、 特征提取等;“后端”模块的作用是利用训练好的声学模型和语言模型对用户说话的特征向量进行统计模式识别(又称解码),得到其包含的文字信息,此外,后端模块还存在一个自适应的反馈模块,可以对用户的语音进行自学习,从而对声学模型和语音模型进行必要的校正,进一步提高识别的准确率。一个完整的非特定人大词汇量连续语音识别系统可大致分为三部分:语音信号预处理与特征提取、声学模型训练、语言模型训练、搜索算法与识别。
0.识别单元的选择

   选择识别单元是语音识别研究的第一步,分为单词、音节、音素。

(1)单词单元:广泛应用于中小词汇语音识别系统,但不适合大词汇系统,原因在于模型库太庞大,训练模型任务繁重、模型匹配算法复杂,难以满足实时性要求。

(2)音节单元:多见于汉语语音识别,主要因为汉语是单音节结构的语言,而英语是多音节。虽然汉语大约有1300个音节,但若不考了声调只有约408个无调音节。

(3)音素单元:目前广泛被应用到大词汇量语音识别系统中,原因是在于汉语音节仅有声明和韵母构成,并且声明和韵母的声学特性相差很大。

    总结,对大词汇量语音识别系统来说,通常识别单元越小,则计算量也越小,所需的模型存储量也小,要求的训练数量也少,但对应语音段的定位和分割较困难,因此识别模型规则也变得更复杂。

1、预处理模块

       对输入的原始语音信号进行处理(输入的语言信号首先要进行反混叠滤波 采样 A/D 转换 等过程进行数字化, 之后要进行预处理, 包括预加重 加窗和 分帧 端点检测等。),滤除掉其中的不重要的信息以及背景噪声,并进行语音信号的端点检测(找出语音信号的始末)、语音分帧(近似认为在10-30ms内是语音信号是短时平稳的,将语音信号分割为一段一段进行分析)以及预加重(提升高频部分)等处理。

目前主流的语音信号端点检测方法:

(1)短时能量En:反应语音振幅或能量随着事件缓慢变化的规律;

(2)短时平均过零率Zn:对于离散信号而言,是样本改变符号的次数,可以粗略分别清音和浊音;

(3)双门限端点检测:短时平均能量和过零率两者结合可以起到区分语音信号中的静音与语音信息的作 用,完成端点检测。一段完整的语音信号的可以分为三段:静音段、过渡段、语音段。 在静音段,过零率或能量越过了低门限,进入过渡段。在过渡段,过零率或能量都降低至低门限以下,则恢复到静音态;过零率或能量中的其中一个越过了高门限,则为进入了语音段。在低噪声情况下,双门限端点检测简单可靠。但在噪声较大的情况下,该方法失去判断能力,所以此方法的抗噪能力较差。 

2、声学特征提取

       语音信号是一种典型的时变信号,然而如果把音频的参考时间控制在几十毫 秒以内,则得到一段基本稳定的信号。去除语音信号中对于语音识别无用的冗余信息,保留能够反映语音本质特征的信息,并用一定的形式表示出来。也就是提取出反映语音信号特征的关键特征参数形成特征矢量序去掉那些相对无关的信息如背景噪声、信道失真等,以便用于后续处理目前的较常用的提取特征的方法还是比较多的,不过这些提取方法都是由频谱衍生出来的。

目前主流的语音信号特征提取方法:

(1)线性预测系数(LPCC):很好的模拟语音信号,语音信号是由声带振动发出的, 声带可以不振动也可以有周期的振动,分别对应清音(consonants)和浊音(vowels),每一段声管则对应一个 LPC 模型的极点。通常极点个数在 12-16 个左右,即可清晰地描述信号的特征了。

(2)Mel频率倒谱系数(MFCC)参数

   人的听觉系统却是一种特殊的非线性系 统,它对不同频率信号的响应灵敏度有较大区别。 MFCC参数比 LPC 参数更能够充分利用人耳的感知特性提高系统的识别性能因其良好的抗噪性和鲁棒性而应用广泛。MFCC的计算首先用FFT将时域信号转化成频域,之后对其对数能量谱用依照Mel刻度分布的三角滤波器组进行卷积,最后对各个滤波器的输出构成的向量进行离散余弦变换DCT,取前N个系数。在sphinx中也是用MFCC特征的,用帧frames去分割语音波形,每帧大概10ms,然后每帧提取可以代表该帧语音的39个数字,这39个数字也就是该帧语音的MFCC特征,用特征向量来表示

(3)小波分析

3、声学模型训练(模版匹配方法)

      声学模型的训练,即为建模过程。声学模型是识别系统的底层模型,是语音识别系统中最关键的部分。声学模型表示一种语言的发音声音,可以通过训练来识别某个特定用户的语音模式和发音环境的特征。根据训练语音库的特征参数训练出声学模型参数,在识别时可以将待识别的语音的特征参数同声学模型进行匹配与比较,得到最佳识别结果。

目前主流的声学模型训练方法

(1)动态时间规整(DTW):现实生活中语音信号的 随机性较强,就是同一人说的话,也不太可能说出一句一模一样的话来。就算字词都一样,发音的时间长短也可能不一样。因此,需要寻找一种变换关系来削除这种时间上的距离偏差,这种结合时间变换关系求特征序列之间距离的技术算法 称为动态时间规整算法(DTW:DynamicTimeWarping)。动态时间规整(DTW)算法 的算法的思想,就是将待识别的语音信号均匀的升长或缩短,使其与参考模板的长度一致。同时,使语音信号的时间轴进行不均匀的扭曲和弯折,最终达到与模板的特征对齐。DTW 是较早的一种模式匹配和模型训练技术, 它把整个单词作为识别单元,在训练阶段将词汇表中每个词的特征矢量序列作为模板存入模板库,在识别阶段将待识别语音的特征矢量序列依次与库中的每个模板进行相似度比较,将相似度最高者作为识别结果输出。DTW 应用动态规划方法成功解决了语音信号特征参数序列比较时时长不等的难题,在小词汇量、孤立词语音识别中获得了良好性能。但因其不适合连续语音大词汇量语音识别系统, 目前已逐渐被 HMM 和 ANN模型替代。
(2)矢量量化(VQ)技术
    矢量量化(VectorQuantization)是一种适用于小词汇量、孤立词的语音识别的 信号压缩方法 。矢量量化器的设计其核心思想是:为某一个特定的信源设计一 个优化的码书,那么来自同一个信息源所产生的信号与该码书的平均量化失真就应远远小于他与其他信息的信号与该码书的平均量化失真,也就是说编码器本身存在一定的区分能力。 
(3)隐马尔可夫模型HMM 

     HMM是对语音信号的时间序列结构建立统计模型,将其看作一个数学上的双重随机过程:一个是用具有有限状态数的Markov链来模拟语音信号统计特性变化的隐含(马尔可夫模型的内部状态外界不可见)的随机过程,另一个是与Markov链的每一个状态相关联的外界可见的观测序列(通常就是从各个帧计算而得的声学特征)的随机过程。

    HMM 模型是语音信号时变特征的有参表示法。它由相 互关联的两个随机过程共同描述信号的统计特性,其中一个 是隐蔽的 (不可观测的) 具有有限状态的 Markor 链, 另一个是 与 Markor 链的每一状态相关联的观察矢量的随机过程 (可观测的) 。HMM 很好的模拟了人得语言过程, 目前应用十分广泛。目前的主流语音识别系统多采用隐马尔可夫模型HMM进行声学模型建模。声学模型的建模单元,可以是音素,音节,词等各个层次。对于小词汇量的语音识别系统,可以直接采用音节进行建模。而对于词汇量偏大的识别系统,一般选取音素,即声母,韵母进行建模。识别规模越大,识别单元选取的越小。 

        人的言语过程实际上就是一个双重随机过程,语音信号本身是一个可观测的时变序列,是由大脑根据语法知识和言语需要(不可观测的状态)发出的音素的参数流(发出的声音)。HMM合理地模仿了这一过程,是较为理想的一种语音模型。用HMM刻画语音信号需作出两个假设,一是内部状态的转移只与上一状态有关,另一是输出值只与当前状态(或当前的状态转移)有关,这两个假设大大降低了模型的复杂度。所以 HMM 可以 非常精确地描述语音信号的产生过程。 

       语音识别中使用HMM通常是用从左向右单向、带自环、带跨越的拓扑结构来对识别基元建模,一个音素就是一个三至五状态的HMM,一个词就是构成词的多个音素的HMM串行起来构成的HMM,而连续语音识别的整个模型就是词和静音组合起来的HMM。总之 HMM 模型较为完整的表达了语音的声学模型,采用统计的训练方法将 上层的语言模型和底层的声学模型融入统一的语音识别搜索算法中,并获得更好 的效果。

(4)人工神经网络模型(ANN)

     神经网络是由许多被称为节点的简单非线性模拟处理要素密集互连配置而成的,是 一种模仿了生物神经元的系统模型。网络通过令每一个节点的输出与一些其他的节点输入连接形成,类似于真实神经元的突触连接。每个神经元表达了一种特定的输出函数,称为激励函数,每两个神经元之间的连接都包含一个连接强度,也就是作用于通过该连接的信号的加权值。经过训练之后的神经网络,具有信息特征抽取、知识概括和学习记忆的能力,而模型学习到的信息或知识则储存在每个单元节点之间的连接矩阵上。一个神经网络的表现是由节点定义,拓扑结构以及学习算法这三个特征组成的集体性质决定的。 

   ANN本质上是一个自适应非线性动力学系统,是由结点互连组成的计算网络, (优点)人工神经网络(ANN) 基本上能够模拟人类神经的活动原理,具有学习特性、容错性、并行性、自适应性和鲁棒性,是一个自适应非线性动力学系统,且具有较强的分类能力和输入输出映射能力。这些能力是 HMM 模型不具备的, 可用于处理一些环境信息十分复杂, 背景知识不清楚, 推理规则不明确的问题, 允许样品有较大的缺损、 畸变, 因此对于噪声环境下非特定人的语音识别问题来说是一种很好的解决方案。(缺点)由于语音训练和识别时间太长,实现和应用较难等不利因素,所以到目前为止该方法停留在实验阶段,目前大部分应用神经网络的语音识别系统都采用了 BP 网并取得了较好的识别效果.将 ANN 与 HMM 结合分别利用各自优点进行识别将是今后的一条研究途径。ANN 具有 较好的区分复杂分类边界的能力,显然它十分有助于模式识别。在这些研究中,大部分 

采用基于反向传播算法(BP 算法)的多层感知网络。 

a.BP神经网络:BP 神经网络在训练的时候,正向传播之后输出层没有得到期望输出,则采用反向传 播算法,提高网络系统对样本的似然度(Likelihood)。将样本的实际输出与期望输出之间的差值即误差信号,并在逐层反向传播的过程中由误差反馈不断调整网络的权值。网络学习效果的提升可以由增加隐藏层层数实现。 在诸多神经网络中,BP 是应用较多的一种,用于语音识别时也具有较好的效果,这 是由于 BP 神经网络具有许多独特的优点:(1)它可以联想模式对,将复杂的声学信号映射为不同级别的语音学和音韵学的表示;(2)可以通过插值进行归纳,因此相关特征 

可通过训练获取(3)对不同的类,他可以在超平面中形成不相交的区域,很适合捕捉细微的规律;(4)输入可以是二值或连续值,也可以是声学属性或语音特征的任意组合; (5)对数据的分布不做先验假设,对模型使用全局约束,因此能构造光滑的类边界, 识别精度好。虽然 BP 神经网络具有强大的计算能力,能够好的应用于语音识别,但随着对识别 性能要求的提高,网络本身仍有一些问题逐渐暴露出来,以下方面亟待改进: 

(1)局部极小值问题; 

(2)增加神经网络的可理解性。人们暂时仍然无法直接理解网络学习存储在连接矩阵上的知识; 

(3)加快神经网络学习速度。目前大部分神经网络算法都无法回避的一个部分就是迭代问题,为了获得好的学习效果,迭代需要大的计算开销。 

b.神经网络训练

    神经网络的学习也称为训练,是指通过神经网络所在环境的刺激作用,调整神经网 络的自由参数。能够从环境中学习和在学习中获得系统工作效果提升,是神经网络最有意义的性质。在神经网络中,一般有两类训练算法。 

(1)有监督学习算法。不但需要训练用的输入信号,同时需要与输入相对应的表示所需输出的目标信号。网络通过计算实际输出与每组输入对应的目标输出之间的差值来调整权值,做出正确反应。 

(2)无监督学习算法。不要求有目标输出,算法提供一个关于网络学习表示方法质量的测量尺度,根据尺度将自由参数最优化,当网络与输入数据统计规律性一致,就能形成内部表示方法记忆输入特征,由此进行类别识别。 

4、语言模型训练

       语音识别中的语言模型主要解决两个问题一是如何使用数学模型来描述语音中词的语音结构二是如何结合给定的语言结构和模式识别器形成识别算法。语言模型是用来计算一个句子出现概率的概率模型。它主要用于决定哪个词序列的可能性更大,或者在出现了几个词的情况下预测下一个即将出现的词语的内容。换一个说法说,语言模型是用来约束单词搜索的。它定义了哪些词能跟在上一个已经识别的词的后面(匹配是一个顺序的处理过程),这样就可以为匹配过程排除一些不可能的单词。语言模型一般指在匹配搜索时用于字词和路径约束的语言规 则,它包括由识别语音命令构成的语法网络或由统计方法构成的语言模型, 语言处理则可以进行语法、 语义分析.

       语言建模能够有效的结合汉语语法和语义的知识,描述词之间的内在关系,从而提高识别率,减少搜索范围。语言模型分为三个层次:字典知识,语法知识,句法知识。

         对训练文本数据库进行语法、语义分析,经过基于统计模型训练得到语言模型。

目前主流的语言建模方法

(1)基于规则模型
(2)基于统计模型

    统计语言模型是用概率统计的方法来揭示语言单位内在的统计规律,其中N-Gram模型简单有效,被广泛使用。它包含了单词序列的统计。N-Gram模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积(即根据前面N-1个词汇的历史来决定下一个词可能出现的概率)。这些概率可以通过直接从语料中统计N个词同时出现的次数得到常用的是二元的Bi-Gram和三元的Tri-Gram。

         Sphinx中是采用二元语法和三元语法的统计语言概率模型,也就是通过前一个或两个单词来判定当前单词出现的概率P(w2| w1),P(w3| w2, w1)。

5、语音解码和搜索算法

       解码器:即指语音技术中的识别过程。针对输入的语音信号,根据己经训练好的HMM声学模型、语言模型及字典建立一个识别网络,根据搜索算法在该网络(识别网络)中寻找最佳的一条路径,这个路径就是能够以最大概率输出该语音信号的词串,这样就确定这个语音样本所包含的文字了。所以解码操作即指搜索算法是指在解码端通过搜索技术寻找最优词串的方法。连续语音识别中的搜索,就是寻找一个词模型序列以描述输入语音信号,从而得到词解码序列。搜索所依据的是对公式中的声学模型打分和语言模型打分。在实际使用中,往往要依据经验给语言模型加上一个高权重,并设置一个长词惩罚分数。当今的主流解码技术都是基于Viterbi搜索算法的,Sphinx也是。模型参数得到后可以用 Viterbi 算法来确定与观察序列对 应的最佳的状态序列。建好模型后,在识别阶段就是要计算每个模型产生观察符号序列的输出概率,输出概率最大的模型所表示的词就是我们的识别结果。

    基于动态规划的Viterbi算法在每个时间点上的各个状态,计算解码状态序列对观察序列的后验概率,保留概率最大的路径,并在每个节点记录下相应的状态信息以便最后反向获取词解码序列。Viterbi算法本质上是一种动态规划算法,该算法遍历HMM状态网络并保留每一帧语音在某个状态的最优路径得分。

    连续语音识别系统的识别结果是一个词序列。解码实际上是对词表的所有词反复搜索。词表中词的排列方式会影响搜索的速度,而词的排列方式就是字典的表示形式。Sphinx系统中采用音素作为声学训练单元,通常字典就用来记录每个单词由哪些个音素组成,也可以理解为对每个词的发音进行标注。

     N-best搜索和多遍搜索:为在搜索中利用各种知识源,通常要进行多遍搜索,第一遍使用代价低的知识源(如声学模型、语言模型和音标词典),产生一个候选列表或词候选网格,在此基础上进行使用代价高的知识源(如4阶或5阶的N-Gram、4阶或更高的上下文相关模型)的第二遍搜索得到最佳路径。



2017-10-08 09:21:11 shichaog 阅读数 6428
  • 机器学习算法实战——神秘奥妙的支持向量机

    支持向量机算法是机器学习的重要算法,如今已应用在图像处理、 语音识别和自然语言处理等方面。本课程详细讲解支持向量机的原理、相关概念、 推导过程和代码实战。包括:Logistic函数、最大化间隔、凸二次优化、核函数、 数据中的噪声点处理等知识。最后用了手写字分类实例,详细讲解了相关的代码实战。

    184 人正在学习 去看看 穆辉宇

CSND已永久停更,最新版唯一来源点击下面链接跳转:
语音增强和语音识别网页书

连接前端和后端的语音识别(ASR)的关键是给到后端(根据特征判定词/句)系统的特征类型和特征质量,对于传统的语音识别系统常采用MFCC(mel-frequency ceptral coefficients),这个特征对于高斯白噪声和混响具有鲁棒性,对于有色和相干干扰,常采用一阶和二阶微分减小其对MFCC系数的影响,该方法计算量相对较小;对于深度学习,通常采用Fbank做为特征而非MFCC,MFCC做了离散余弦变换,对于深度学习情况,反而是丢失了特征。

##VAD
###VAD方法

  • 基于能量的方法
  • 基于波形和谱估计法
    • 音调和谐波检测
    • 周期测量
    • 过零率
  • 高阶统计量

由于噪声是随着环境变化的量,其值并非固定的,在ASR系统中,通常不会采用能量的方法,WebRTC采用的是基于高斯混合模型的高阶统计量,VAD常用在AEC,NS模块以及做为后端特征提取的开关。

##DOA估计
DOA在波束形成中非常关键,波束形成就是用于增强某个空间方向而抑制其它方向的声音,当前的DOA估计基于麦克风阵元之间接受到的时间差来估计方向。
这里写图片描述
基本原理如上图,
这里写图片描述
上述对于近场语音效果较好,但是对于远场情况,混响比近场严重的多,这将导致语音空间位置分布受到较大的影响,这一混响取决于说话人和麦克在空间的分布,所以,说话人位置变动,空间的传输函数也会变动,随着而来的是混响也会变化,在这种情况下,单一统计模型的VAD并不是很准确,可以使用多个统计模型的混合模型做为VAD的判决准则(而非经验模型)。
统计模型的概率分布取决于帧长,DFT长度以及选用的窗函数。
这里写图片描述
语音概率密度分布图
如上图可以看到,和统计模型相比填充的幅度直方图的概率密度函数主瓣较窄,使用多统计模型的混合分布可以增加算法本身的健壮性。
##波束形成
很多地方采用了MVDR(Minimum Variance Distortionless Response)算法,如该算法的名称,该算法是无失真的。该算法的目标是最小化麦克风采集到的信号的方差,通常麦克风采集到的信号的语音和噪声成分是不相关的,所以最小方差是语音信号最小方差和噪声信号最小方差之和,这样经过MVDR后可以获得消除噪声影响后的语音信号。
MVDR的权重最优解是:
KaTeX parse error: \tag works only in display equations
其中Rxx\bf R_{xx}是输入信号的自相关矩阵,CC是约束矩阵, f\bf f是期望的响应向量。
权重递归跟新如下:
KaTeX parse error: \tag works only in display equations
###MVDR波束
MVDR波束方向图依赖于麦克风阵元和FIR滤波器阶数,
这里写图片描述

这里写图片描述

这里写图片描述

##de-reberation
在时间上将混响分为“早”和“晚”两种,这里的早和晚是相对直接到达声音的滞后时间,由于人耳的时域掩码作用,“早”混响实际上增强了直达的声音,所以大部分去混响是针对“晚”这种情况的,以下就以针对“晚”这种情况。混响会严重影响ASR识别结果,google的识别系统中前端就做了de-reberation算法。

基于信道和均衡技术
###MMSE(最小均方误差)算法
这里写图片描述
minimization of the mean square error and least-squares ,该方法计算了输入和输出的差异;MMSE目标函数是:
MMSE(e)=E[e2(m)]=m=0M1e2(m)MMSE(e)=E[e^2(m)]=\sum_{m=0}^{M-1}e^2(m)
MM是观测到的信号的长度,e(m)=s(mk)s(k)=s(mk)h(m)x(m)e(m)=s(m-k)-\underline s(k)=s(m-k)-h(m)*x(m)
这个方法要求参考通道的信号是纯净的,这在实际中并不能总是得到。
###多通道
这里写图片描述
MINT(Multi-channel Inverse Theorem)

基于谱减法

2015-05-24 17:38:46 xiaoding133 阅读数 4340
  • 机器学习算法实战——神秘奥妙的支持向量机

    支持向量机算法是机器学习的重要算法,如今已应用在图像处理、 语音识别和自然语言处理等方面。本课程详细讲解支持向量机的原理、相关概念、 推导过程和代码实战。包括:Logistic函数、最大化间隔、凸二次优化、核函数、 数据中的噪声点处理等知识。最后用了手写字分类实例,详细讲解了相关的代码实战。

    184 人正在学习 去看看 穆辉宇

              本文主要采用matlab和C语言设计并实现了一个鲁棒性语音识别实验系统,通过该系统验证各种抗噪语音特征在不同信噪比的噪声环境下的识别率,并详细介绍了系统的结构以及开发工具与平台,最后介绍了系统的功能、实验流程以及该系统的实现。

系统演示下载路径:http://pan.baidu.com/s/1o61Kaa2

一、系统结构

        本文研究的是非特定人鲁棒性语音识别,采用的是小词汇量孤立词语音。本系统使用了两种语音识别模型,分别为HMM模型和VQ模型。在系统中,利用HMM模型进行抗噪鲁棒性语音识别,采用VQ模型进行SLVQ算法的评估。通过语音库的训练得到识别模型,然后对待测试语音进行识别。其系统结构如图1-1。


图1-1系统结构图

在图1-1所示的结构图中,语音预处理与特征和模型训练器是整个系统的核心。特征提取是训练器的前提,同时也是识别器的前提。语音采集模块完成录音,可以作为语音库来训练识别模型。结果输出模块主要用于将中间识别结果以及系统其他状态信息显示出来。

二、开发工具与平台

本文的语音识别系统在PC上,采用Matlab(R2010b)作为开发工具。语音识别模型HMM采用PMT(Probabilistic Model Toolkit)[97]工具包进行二次开发。下面简单介绍下Matlab和PMT。

Matlab是一个功能强大的科学及工程计算工具,它将矩阵运算、数值分析、图形处理、编程技术等功能有机地结合在一起,被广泛应用于自动控制、系统仿真、图形图像分析、数字信号处理、人工智能、虚拟现实等领域。本系统采用Matlab的主要原因如下:

(1) 丰富的数学函数库;Matlab包含了大量的数学函数库,有求和、复数运算、矩阵运算以及傅里叶变换等函数,这些都为语音信号的处理带来了方便。

(2) 强大的图形功能;它提供了丰富的图形函数库,用一些简单的命令就可以完成多维数据的显示以及图像处理,也可以完成图形用户界面的设计,很方便地完成自己的运算和控制代码。

(3) 应用程序接口(API);它提供了应用程序接口函数库,允许用户使用C或C++语言编写程序与Matlab连接,本系统多处采用C语言编写的程序,采用MEX接口调用,弥补了Matlab速度慢的缺点。

PMT工具包是惠普开发公司提供的一个Matlab和C语言编写的概率模型包,它可以用来建立基本的静态和动态概率模型,目前支持的概率模型包括高斯混合、马尔可夫链、隐马尔可夫模型、线性动态系统等。对于每个概率模型都包括推理、学习的函数,采用最大似然估计来计算模型参数。由于工具包中很多核心函数是采用C语言编写的,提高了运行速度并且可以进行功能扩展。

2.1C-MEX技术

所谓MEX是Matlab Executable的缩写,即Matlab的可执行程序。在Windows操作系统中,它是以DLL为后缀名的文件。MEX文件是Matlab调用其他语言编写的程序算法接口。通过它,用户可以完成以下功能[98]

(1)代码重用

可以在Matlab系统中像调用Matlab的内在函数一样调用已经存在的用C语言或C++语言编写完成的算法,通过添加入口程序mexFunciton,而无须将这些函数重新编写为Matlab的M文件,从而使资源得到充分利用。

(2)速度提升

当需要进行大量的数据处理时,Matlab的执行效率往往比较低,这时可以使用其他高级编程语言进行算法的设计,然后在Matlab环境中调用,从而大幅度提高数据处理的速度。在Matlab中,可以把含有大量循环迭代的代码用C语言代替,然后编译为MEX文件。

(3)功能扩展

通过MEX文件,用户可以服Matlab对硬件访问功能不足的缺点直接对硬件进行编程,如A/D采集,D/A输出卡等,以用于数据采集或控制,进一步扩展Matlab的应用领域。

2.2MEX文件结构与执行流程

MEX文件由两个部分组成,一部分是对mex.h头文件进行包含,该文件定义了矩阵的相关操作,另一部分是入口子程序,其构成形式如下:

void  mexFunciton(int nlhs,mxArray *plhs[],intnrhs,const mxArray *prhs[]);

该函数包括四个参数,从右往左分别为一个mxArray结构体类型的指针数组prhs,该数组指向所有的输入参数;整数类型的nrhs,表示输入参数的个数;一个mxArray类型的指针数组plhs,它指向所有的输出参数;nlhs标明了输出参数的个数,为整数类型。这些参数是用来传递Matlab启动MEX文件的参数。

在该入口函数中,用户主要完成两个方面的任务。一方面,从输入的mxArray结构体中获取计算完毕的数据,然后在用户子程序中利用。另一方面,用户可以将计算完毕的结果返回给一个用于输出的mxArray的结构体,这样Matlab系统就能够识别从用户计算子程序返回的结果。

 MEX文件的执行流程图如下:


图2-2 MEX文件执行流程图

三、系统实现

系统的运行主界面如图3-3所示。从运行主界面图可以看到,系统分为四个部分:数据集区、参数设置区、结果输出区和识别控制区。下面分别介绍这四个部分。

1、数据集区:它包括新增词汇、删除词汇及语音、语音录制以及载入训练集。新增词汇和删除词汇主要为训练语音库和测试语音库增加和删除新的类别。录制语音主要为各词汇采集语音文件,用于训练和识别。录制语音界面如图3-4。

2、参数设置区:它包括特征提取参数设置、端点检测参数设置、识别器参数设置。在特征参数类型中可选择并实现了的参数有MFCC、DAS-MFCC、RASTA-PLP、PNCC、APNSCC等。端点检测参数设置主要包括是否使用端点检测以及检查方法,本系统暂不考虑端点检测给识别结果带来的影响。识别器参数设置包括识别方法的选择(VQ 、HMM)及它们的参数设置(如HMM状态个数、高斯分量数)。

图3-3 系统主界面图


图3-4 声音录制界面

3、结果输出区:主要用于输出系统操作状态信息以及识别结果信息等。

4、识别控制区:主要用于选择识别方式,主要分为测试语音数据识别、训练语音数据识别、单文件语音数据识别、批量语音数据识别、和实时语音识别(包含噪声语音识别)。测试语音数据和训练语音数据识别选项分别表示对所选数据库中的测试语音集合和训练语音集合进行识别,然后在输出模块输出该数据集的正确识别率。单语音识别对单个语音文件进行识别,给出识别结果。批量语音识别对多个语音进行识别,然后输出正确识别率(前提是这些语音文件已经加标签分类)。实时语音识别界面如图3-5所示:


图3-5 实时语音识别界面

在图3-5中,开始按钮用于实时声音采集,然后将识别结果显示在输出框,单击停止按钮,中断信号的采集。除此之外,也可以采用单文件语音识别,选择要识别的语音文件,然后单击确定按钮就可以将识别结果输出在下面。实时语音识别和单文件语音识别都可以选择是否加噪,并且可以选择不同信噪比的多种噪声类型。由于实时声音采集识别速度比较慢并且不好控制环境噪声,这里实验采用事先录制好的单文件语音识别,然后加入各种不同的噪声。

系统的流程图如图3-6所示:


图3-6 系统流程图

从图3-6可以看到,本系统的流程大致分为两部分:第一部分是直接利用现有数据库进行训练识别模型进行实验,然后保存识别模型;第二部分是载入已经保存的模型来进行实验。通过该系统可以很方便地进行鲁棒性的语音识别实验。


系统实验演示见http://pan.baidu.com/s/1o61Kaa2

四、本系统提出的一种改进的抗噪语音特征参数APNSCC提取流程



APNSCC特征参数提取主要代码,分为六步
wave2APNSCC (data)
{data为语音信号;
1.语音信号预处理
yPreEmp = filter([1, -FP.preEmCoef], 1, data);预加重
[framedY,Nframe]= buffer2(yPreEmp, FP.frameSize, FP.overlap);分帧
2.计算自相关序列
for k=1:Nframe
     [c,lags]=xcorr(framedY(:,k),lag, 'unbiased');计算无偏自相关序列
     Rp(:,k)=c(lag+1:end);
end
3.自相关序列滤波与Gammatone功率谱计算
Rp1=Rp; L=2; 滤波器长度 
for i=L+1:Nframe-L
    Rp1(:,i)=(-2*Rp(:,i-2)-Rp(:,i-1)+Rp(:,i+1)+2*Rp(:,i+2))/10;
end
aad_H=ComputeFilterResponse(iNumFilts,iFFTSize,dLowFreq,dHighFreq,dSampRate);
aad_H = abs(NormalizeGammaGain(aad_H, dSampRate));  计算Gammatone滤波器响应
adSpec=fft(Rp,iFFTSize,1);
 ad_X=abs(adSpec);
 fftMag=ad_X(1:iFFTSize/2,:);
for j = 1 : iNumFilts
aad_P(:, j)  = sum((fftMag.* repmat(aad_H(:, j),1,Nframe)) .^ 2)'; 
end
4.非对称滤波
aad_PBias = aad_Q* 0.9; 按照公式(4.15)进行滤波
for j=1:Nframe
   for i = 1 : iNumFilts,   
    if (aad_Q(j,i) > aad_PBias(j,i))
aad_PBias(j,i) = FP.dLamda * aad_PBias(j,i)  + (1 - FP.dLamda) * aad_Q(j,i);
    else
   aad_PBias(j,i) = FP.dLamdb * aad_PBias(j,i) + (1 - FP.dLamdb) * aad_Q(j,i);
    end
   end
end
aad_QS=aad_Q - aad_PBias; 
5.计算倒谱及频谱差分
aadSpec = aad_QHR .^1/ 15
 aadDCT= dct(aadSpec')';计算倒谱系数
[Cdelta,Cddelta] = specD(aad_QHR', deltaWindow, FP.ApnsccNum); 计算频谱差分
6.计算Gammatone谱熵
 H=ComputeEntroy(aad_P',1);  H= heq1(H);直方图均衡化


2019-07-27 15:38:50 alice_tl 阅读数 1541
  • 机器学习算法实战——神秘奥妙的支持向量机

    支持向量机算法是机器学习的重要算法,如今已应用在图像处理、 语音识别和自然语言处理等方面。本课程详细讲解支持向量机的原理、相关概念、 推导过程和代码实战。包括:Logistic函数、最大化间隔、凸二次优化、核函数、 数据中的噪声点处理等知识。最后用了手写字分类实例,详细讲解了相关的代码实战。

    184 人正在学习 去看看 穆辉宇

端点检测的概念

端点检测,也叫语音活动检测,Voice Activity Detection,VAD,它的目的是对语音和非语音的区域进行区分。通俗来理解,端点检测就是为了从带有噪声的语音中准确的定位出语音的开始点,和结束点,去掉静音的部分,去掉噪声的部分,找到一段语音真正有效的内容。

在噪声环境下使用语音识别系统,或者讲话人产生情绪或心里上的变化,导致发音失真、发音速度和音调改变,都会产生Lombard/Loud效应。研究表明,即使在安静的环境下,语音识别系统一半以上的识别错误来自端点检测器。

 

端点检测的分类

VAD 算法可以粗略的分为三类:基于阈值的 VAD、作为分类器的 VAD、模型 VAD。

基于阈值的 VAD:通过提取时域(短时能量、短期过零率等)或频域(MFCC、谱熵等)特征,通过合理的设置门限,达到区分语音和非语音的目的。这是传统的 VAD 方法。

作为分类器的 VAD:可以将语音检测视作语音/非语音的两分类问题,进而用机器学习的方法训练分类器,达到检测语音的目的。

模型 VAD:可以利用一个完整的声学模型(建模单元的粒度可以很粗),在解码的基础,通过全局信息,判别语音段和非语音段。

VAD 作为整个流程的最前端,需要在本地实时的完成。由于计算资源非常有限,因此,VAD 一般会采用阈值法中某种算法;经过工程优化的分类法也可能被利用;而模型 VAD 目前难以在本地部署应用。

 

端点检测处理的好,不仅将处理的时间序列变小,还能消除无声段道噪声。

 

端点检测的原理

为了能更清楚说明端点检测的原理,录制了一段音频,并且将语音信号截取了几部分。

开始,有片刻的准备工作,并未发出声音

 

第一次讲”你好”

 

第二次讲”你好”

 

第三次伪装了声音讲”你好”

 

可以看到如下特点:

  1. 首尾的静音部分声波的振幅很小,而有效语音”你好”部分的振幅比较大。
  2. 一个信号的振幅表示了信号能量的大小,从直观上明显看出静音的部分能量值较小,有效语音部分的能量值较大。
  3. 首尾没有讲话,缺依然有能量值,并且能量值有变化。
  4. 在没有特别的伪装和干扰的情况下,两次讲你好的振幅,即信号是一样的。
  5. 第三次由于伪装了声音,所以导致振幅同上面两次不一样,并且由于刻意的伪装,导致第三次的波长度和前两次明显不一样。

 

由此可以了解到端点检测中涉及到的一些概念:

噪声:背景音称之为噪声。有外界环境的噪声,也有设备本身的噪声。在实际使用中,如果出现长时间的静默,会使用户感到很不自然。因此接收端常常会在静音期间发送一些分组,从而生成使用户感觉舒服一些的背景噪声,即所谓的舒适噪声。

静音:连续若干帧能量值持续维持在低水平。理想情况下静音能量值为0,但实际无法做到,因为一般有背景音,而背景音有基础能量值。

端点:静音和有效语音信号变化临界点。

在实际应用中,比如说电话通话时,用户没有讲话时,就没有语音分组的发送,从而可以进一步降低语音比特率。当用户的语音信号能量低于一定门限值时就认为是静默状态,也不发送语音分组。当检测到突发的活动声音时才生成语音信号,并加以传输。运用这种技术能够获得大于50%的带宽。

同理,在实际测试过程中我们也需要考虑非连续性说话,比如口吃、犹豫、吞吞吐吐时,语言的识别准确性,避免断点检测环节处理出现异常或者不合理的情况。

没有更多推荐了,返回首页