1. matlab中的特定人语音识别算法DTW算法的应用例程
语音识别原理
语音识别系统的本质就是一种模式识别系统,它也包括特征提取、模式匹配、参考模式库等基本单元。由于语音信号是一种典型的非平稳信号,加之呼吸气流、外部噪音、电流干扰等使得语音信号不能直接用于提取特征,而要进行前期的预处理。预处理过程包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。经过预处理的语音数据就可以进行特征参数提取。在训练阶段,将特征参数进行一定的处理之后,为每个词条得到一个模型,保存为模板库。在识别阶段,语音信号经过相同的通道得到语音参数,生成测试模板,与参考模板进行匹配,将匹配分数最高的参考模板作为识别结果。后续的处理过程还可能包括更高层次的词法、句法和文法处理等,从而最终将输入的语音信号转变成文本或命令。
DTW算法原理
DTW是把时间规整和距离测度计算结合起来的一种非线性规整技术,它寻找一个规整函数im=Ф(in),将测试矢量的时间轴n非线性地映射到参考模板的时间轴m上,并使该函数满足:
D就是处于最优时间规整情况下两矢量的距离。由于DTW不断地计算两矢量的距离以寻找最优的匹配路径,所以得到的是两矢量匹配时累积距离最小所对应的规整函数,这就保证了它们之间存在的最大声学相似性。
DTW算法的实质就是运用动态规划的思想,利用局部最佳化的处理来自动寻找一条路径,沿着这条路径,两个特征矢量之间的累积失真量最小,从而避免由于时长不同而可能引入的误差。
2. 浅谈语音识别技术论文
语音识别技术研究让人更加方便地享受到更多的社会信息资源和现代化服务,对任何事都能够通过语音交互的方式。 我整理了浅谈语音识别技术论文,欢迎阅读!
语音识别技术概述
作者:刘钰 马艳丽 董蓓蓓
摘要:本文简要介绍了语音识别技术理论基础及分类方式,所采用的关键技术以及所面临的困难与挑战,最后讨论了语音识别技术的 发展 前景和应用。
关键词:语音识别;特征提取;模式匹配;模型训练
Abstract:This text briefly introces the theoretical basis of the speech-identification technology,its mode of classification,the adopted key technique and the difficulties and challenges it have to face.Then,the developing prospect ion and application of the speech-identification technology are discussed in the last part.
Keywords:Speech identification;Character Pick-up;Mode matching;Model training
一、语音识别技术的理论基础
语音识别技术:是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高级技术。语音识别以语音为研究对象,它是语音信号处理的一个重要研究方向,是模式识别的一个分支,涉及到生 理学 、心理学、语言学、 计算 机 科学 以及信号处理等诸多领域,甚至还涉及到人的体态语言(如人在说话时的表情、手势等行为动作可帮助对方理解),其最终目标是实现人与机器进行 自然 语言通信。
不同的语音识别系统,虽然具体实现细节有所不同,但所采用的基本技术相似,一个典型语音识别系统主要包括特征提取技术、模式匹配准则及模型训练技术三个方面。此外,还涉及到语音识别单元的选取。
(一) 语音识别单元的选取
选择识别单元是语音识别研究的第一步。语音识别单元有单词(句)、音节和音素三种,具体选择哪一种,由具体的研究任务决定。
单词(句)单元广泛应用于中小词汇语音识别系统,但不适合大词汇系统,原因在于模型库太庞大,训练模型任务繁重,模型匹配算法复杂,难以满足实时性要求。
音节单元多见于汉语语音识别,主要因为汉语是单音节结构的语言,而 英语 是多音节,并且汉语虽然有大约1300个音节,但若不考虑声调,约有408个无调音节,数量相对较少。因此,对于中、大词汇量汉语语音识别系统来说,以音节为识别单元基本是可行的。
音素单元以前多见于英语语音识别的研究中,但目前中、大词汇量汉语语音识别系统也在越来越多地采用。原因在于汉语音节仅由声母(包括零声母有22个)和韵母(共有28个)构成,且声韵母声学特性相差很大。实际应用中常把声母依后续韵母的不同而构成细化声母,这样虽然增加了模型数目,但提高了易混淆音节的区分能力。由于协同发音的影响,音素单元不稳定,所以如何获得稳定的音素单元,还有待研究。
(二) 特征参数提取技术
语音信号中含有丰富的信息,但如何从中提取出对语音识别有用的信息呢?特征提取就是完成这项工作,它对语音信号进行分析处理,去除对语音识别无关紧要的冗余信息,获得影响语音识别的重要信息。对于非特定人语音识别来讲,希望特征参数尽可能多的反映语义信息,尽量减少说话人的个人信息(对特定人语音识别来讲,则相反)。从信息论角度讲,这是信息压缩的过程。
线性预测(LP)分析技术是目前应用广泛的特征参数提取技术,许多成功的应用系统都采用基于LP技术提取的倒谱参数。但线性预测模型是纯数学模型,没有考虑人类听觉系统对语音的处理特点。
Mel参数和基于感知线性预测(PLP)分析提取的感知线性预测倒谱,在一定程度上模拟了人耳对语音的处理特点,应用了人耳听觉感知方面的一些研究成果。实验证明,采用这种技术,语音识别系统的性能有一定提高。
也有研究者尝试把小波分析技术应用于特征提取,但目前性能难以与上述技术相比,有待进一步研究。
(三)模式匹配及模型训练技术
模型训练是指按照一定的准则,从大量已知模式中获取表征该模式本质特征的模型参数,而模式匹配则是根据一定准则,使未知模式与模型库中的某一个模型获得最佳匹配。
语音识别所应用的模式匹配和模型训练技术主要有动态时间归正技术(DTW)、隐马尔可夫模型(HMM)和人工神经元 网络 (ANN)。
DTW是较早的一种模式匹配和模型训练技术,它应用动态规划方法成功解决了语音信号特征参数序列比较时时长不等的难题,在孤立词语音识别中获得了良好性能。但因其不适合连续语音大词汇量语音识别系统,目前已被HMM模型和ANN替代。
HMM模型是语音信号时变特征的有参表示法。它由相互关联的两个随机过程共同描述信号的统计特性,其中一个是隐蔽的(不可观测的)具有有限状态的Markor链,另一个是与Markor链的每一状态相关联的观察矢量的随机过程(可观测的)。隐蔽Markor链的特征要靠可观测到的信号特征揭示。这样,语音等时变信号某一段的特征就由对应状态观察符号的随机过程描述,而信号随时间的变化由隐蔽Markor链的转移概率描述。模型参数包括HMM拓扑结构、状态转移概率及描述观察符号统计特性的一组随机函数。按照随机函数的特点,HMM模型可分为离散隐马尔可夫模型(采用离散概率密度函数,简称DHMM)和连续隐马尔可夫模型(采用连续概率密度函数,简称CHMM)以及半连续隐马尔可夫模型(SCHMM,集DHMM和CHMM特点)。一般来讲,在训练数据足够的,CHMM优于DHMM和SCHMM。HMM模型的训练和识别都已研究出有效的算法,并不断被完善,以增强HMM模型的鲁棒性。
人工神经元 网络 在语音识别中的 应用是现在研究的又一 热点。ANN本质上是一个自适应非线性动力学系统,模拟了人类神经元活动的原理,具有自学、联想、对比、推理和概括能力。这些能力是HMM模型不具备的,但ANN又不个有HMM模型的动态时间归正性能。因此,现在已有人研究如何把二者的优点有机结合起来,从而提高整个模型的鲁棒性。
二、语音识别的困难与对策
目前,语音识别方面的困难主要表现在:
(一)语音识别系统的适应性差,主要体现在对环境依赖性强,即在某种环境下采集到的语音训练系统只能在这种环境下应用,否则系统性能将急剧下降;另外一个问题是对用户的错误输入不能正确响应,使用不方便。
(二)高噪声环境下语音识别进展困难,因为此时人的发音变化很大,像声音变高,语速变慢,音调及共振峰变化等等,这就是所谓Lombard效应,必须寻找新的信号分析处理方法。
(三)语言学、生 理学 、心理学方面的研究成果已有不少,但如何把这些知识量化、建模并用于语音识别,还需研究。而语言模型、语法及词法模型在中、大词汇量连续语音识别中是非常重要的。
(四)我们对人类的听觉理解、知识积累和学习机制以及大脑神经系统的控制机理等分面的认识还很不清楚;其次,把这方面的现有成果用于语音识别,还有一个艰难的过程。
(五)语音识别系统从实验室演示系统到商品的转化过程中还有许多具体问题需要解决,识别速度、拒识问题以及关键词(句)检测技术等等技术细节要解决。
三、语音识别技术的前景和应用
语音识别技术 发展 到今天,特别是中小词汇量非特定人语音识别系统识别精度已经大于98%,对特定人语音识别系统的识别精度就更高。这些技术已经能够满足通常应用的要求。由于大规模集成电路技术的发展,这些复杂的语音识别系统也已经完全可以制成专用芯片,大量生产。在西方 经济 发达国家,大量的语音识别产品已经进入市场和服务领域。一些用户交机、电话机、手机已经包含了语音识别拨号功能,还有语音记事本、语音智能玩具等产品也包括语音识别与语音合成功能。人们可以通过电话网络用语音识别口语对话系统查询有关的机票、 旅游 、银行信息,并且取得很好的结果。
语音识别是一门交叉学科,语音识别正逐步成为信息技术中人机接口的关键技术,语音识别技术与语音合成技术结合使人们能够甩掉键盘,通过语音命令进行操作。语音技术的应用已经成为一个具有竞争性的新兴高技术产业。
参考 文献 :
[1]科大讯飞语音识别技术专栏. 语音识别产业的新发展. 企业 专栏.通讯世界,2007.2:(总l12期)
[2]任天平,门茂深.语音识别技术应用的进展.科技广场.河南科技,2005.2:19-20
[3]俞铁城.科大讯飞语音识别技术专栏.语音识别的发展现状.企业专栏.通讯世界,2006.2 (总122期)
[4]陈尚勤等.近代语音识别.西安: 电子 科技大学出版社,1991
[5]王炳锡等.实用语音识别基础.Practical Fundamentals of Speech Recognition.北京:国防 工业 出版社,2005
[6](美)L.罗宾纳.语音识别基本原理.北京:清华大学出版社,1999
点击下页还有更多>>>浅谈语音识别技术论文
3. 基于单片机的特定语音识别的DTW算法 怎样用C语言实现 跪求!
建议,非特定人语音识别芯片 LD3320,
或者索性 思索语音识别模块V280,已经开发完毕,直接可以用了。
4. EMSR 具体含义是什么
嵌入式汉语语音识别引擎
(Embedded Mandarin Speech Recognition Engine)
1. 语音识别技术简介
从20世纪50年代的Bell实验室的研究开始,语音识别技术经过了半个世纪的发展,科研工作者对此进行了孜孜不倦的研究。语音识别的参数经历了共振峰分析、线性预测倒谱参数,到现获得主流应用的MFCC倒谱参数,基本上是以短时谱估计为主的。识别算法上,经历了简单的模版匹配、动态时间弯折,目前的主流方法是隐含马尔科夫模型(HMM)。尽管也有学者对人工神经网络、支持向量机、遗传算法等进行了研究,但是其识别性能始终不能超越HMM。
目前,以HMM为基础的语音识别理论体系已经基本成熟。换句话说,目前语音识别的理论研究基本上没有什么新意了。然而目前各种语音识别系统的性能却仍然不能满足自然对话的需要,这与得到广泛应用和认可的文字识别的现状形成了鲜明对比。种种证据表明,以倒谱参数和HMM为基础的理论体系并没有抓住语音识别技术的核心,这个理论所模仿的是人的嘴巴,而不是耳朵,更不是大脑。
不过,不要因此就把语音识别全盘否定。尽管HMM不是最优的,但它是可用的。在目前的技术条件下,HMM还是可以很好地解决一些语音识别的具体问题的。当然这需要我们把要求降低一点,适当配合,我们将看到,语音识别在有些场合十分适用,尤其是小词表、短语语音识别系统的性能可以做得很高。
2. 嵌入式语音识别系统
HMM有很多种变形,具体实现时也有很多优化技巧。以个人计算机为平台的语音识别系统的模型以连续混合高斯HMM为主流,模型复杂、参数众多,需要占用大量的系统资源,包括硬盘、内存和CPU时间。而以MCU、DSP、SoC芯片为平台的嵌入式系统的资源有限,不可能将PC平台的语音识别系统简单移植过来,必须要进行大量的模型简化和算法优化工作。
嵌入式语音识别主要有下面几类:
特定人、小词表:这是最简单的语音识别算法,多以DTW及其变形为主。使用前需要使用者对每个命令词进行训练,更换使用者需要重新训练。
非特定人、小词表:这类系统目前用途比较广泛,词表不大且固定,其模型参数是事先训练好的,使用者不需训练就可直接使用。优点是识别率很高,缺点是系统开发成本高,周期长,因为更换词表需要重新训练。
非特定人、动态词表:这是一种最有应用前景的语音识别系统,使用前也不用训练。虽然词表也不大,但是可以随时调整,只要输入拼音串就可以改变词表,因此适应性很强。
非特定人、大词表:这种系统类似于PC上的高性能语音识别软件,对系统资源要求高,即便是在PDA、PPC等资源较大的平台上实现也有难度。
3. EMSR简介
EMSR就是一个高性能的嵌入式语音识别系统引擎。EMSR分四个子系统,分别对应上述四类应用。其中前三个子系统的核心代码已经开发完毕,第四类则仍处于开发中。
EMSR的开发始于1996年,最初的EMSR-1为特定人、孤立词识别系统,实际上是不分语种的。
在2001年,EMSR-2进入实用化。这是一种专用的语音识别算法,由于对每个词汇独立建模和训练,因此它实际上也是语种无关的。
2002年开始EMSR-3的开发,目前其性能已经可以超过EMSR-2。该引擎可以提供二次开发接口,方便开发各种不同的应用系统。由于EMSR-3采用汉语拼音为基元,用汉语语音库进行训练,因此该系统主要面向汉语普通话使用者。
目前正在开发的EMSR-4仍然是孤立词识别系统,但是它支持超大词库,类似于基于键盘的汉字输入法。该系统非常适合手机短信的语音输入。
4. EMSR性能
EMSR引擎的特点是识别率高、资源占用小、运行速度快。EMSR的算法以定点DSP运算为基础进行了优化,模型也在不降低识别率的前提下做了压缩和定点化,整个代码短小紧凑、效率极高。
以EMSR-3为例,在ADSP-218x定点DSP芯片上实现,识别部分占用的程序空间和数据空间合计不到64K字节;语音参数的提取仅需2MIPS;词表为100时,平均响应时间<0.8S。
运行EMSR-3的ADSP-218x模块提供串行口接口,用户可以方便地通过RS232接口发送命令控制模块的工作、修改词表。
5. EMSR移植
目前EMSR已经下面平台上进行了实现:
ADSP-218X:定点16位DSP
ARM7TDMI:无任何加速的ARM7内核
BF53x:ADI的新一代高速定点16位DSP
SPL162002/2003:凌阳增强型16位单片机
Windows Mobile 6.x, 5.0, 2003se的智能手机
Palm OS智能手机
由于EMSR提供完整的定点C代码,系统可以方便地向其它平台上移植。
6. 其它技术
为了构成一个完整、实用的语音识别系统,还可提供如下技术:
用于语音提示的语音编解码算法
一般噪声环境下的维纳滤波语音增强技术
较强噪声环境下的话筒阵列语音增强技术
超强噪声环境下的抗噪声话筒
5. 语音识别技术的基本方法
一般来说,语音识别的方法有三种:基于声道模型和语音知识的方法、模板匹配的方法以及利用人工神经网络的方法。 该方法起步较早,在语音识别技术提出的开始,就有了这方面的研究,但由于其模型及语音知识过于复杂,现阶段没有达到实用的阶段。
通常认为常用语言中有有限个不同的语音基元,而且可以通过其语音信号的频域或时域特性来区分。这样该方法分为两步实现:
第一步,分段和标号
把语音信号按时间分成离散的段,每段对应一个或几个语音基元的声学特性。然后根据相应声学特性对每个分段给出相近的语音标号
第二步,得到词序列
根据第一步所得语音标号序列得到一个语音基元网格,从词典得到有效的词序列,也可结合句子的文法和语义同时进行。 模板匹配的方法发展比较成熟,目前已达到了实用阶段。在模板匹配方法中,要经过四个步骤:特征提取、模板训练、模板分类、判决。常用的技术有三种:动态时间规整(DTW)、隐马尔可夫(HMM)理论、矢量量化(VQ)技术。
1、动态时间规整(DTW)
语音信号的端点检测是进行语音识别中的一个基本步骤,它是特征训练和识别的基础。所谓端点检测就是在语音信号中的各种段落(如音素、音节、词素)的始点和终点的位置,从语音信号中排除无声段。在早期,进行端点检测的主要依据是能量、振幅和过零率。但效果往往不明显。60年代日本学者Itakura提出了动态时间规整算法(DTW:DynamicTimeWarping)。算法的思想就是把未知量均匀的升长或缩短,直到与参考模式的长度一致。在这一过程中,未知单词的时间轴要不均匀地扭曲或弯折,以使其特征与模型特征对正。
2、隐马尔可夫法(HMM)
隐马尔可夫法(HMM)是70年代引入语音识别理论的,它的出现使得自然语音识别系统取得了实质性的突破。HMM方法现已成为语音识别的主流技术,目前大多数大词汇量、连续语音的非特定人语音识别系统都是基于HMM模型的。HMM是对语音信号的时间序列结构建立统计模型,将之看作一个数学上的双重随机过程:一个是用具有有限状态数的Markov链来模拟语音信号统计特性变化的隐含的随机过程,另一个是与Markov链的每一个状态相关联的观测序列的随机过程。前者通过后者表现出来,但前者的具体参数是不可测的。人的言语过程实际上就是一个双重随机过程,语音信号本身是一个可观测的时变序列,是由大脑根据语法知识和言语需要(不可观测的状态)发出的音素的参数流。可见HMM合理地模仿了这一过程,很好地描述了语音信号的整体非平稳性和局部平稳性,是较为理想的一种语音模型。
3、矢量量化(VQ)
矢量量化(VectorQuantization)是一种重要的信号压缩方法。与HMM相比,矢量量化主要适用于小词汇量、孤立词的语音识别中。其过程是:将语音信号波形的k个样点的每一帧,或有k个参数的每一参数帧,构成k维空间中的一个矢量,然后对矢量进行量化。量化时,将k维无限空间划分为M个区域边界,然后将输入矢量与这些边界进行比较,并被量化为“距离”最小的区域边界的中心矢量值。矢量量化器的设计就是从大量信号样本中训练出好的码书,从实际效果出发寻找到好的失真测度定义公式,设计出最佳的矢量量化系统,用最少的搜索和计算失真的运算量,实现最大可能的平均信噪比。
核心思想可以这样理解:如果一个码书是为某一特定的信源而优化设计的,那么由这一信息源产生的信号与该码书的平均量化失真就应小于其他信息的信号与该码书的平均量化失真,也就是说编码器本身存在区分能力。
在实际的应用过程中,人们还研究了多种降低复杂度的方法,这些方法大致可以分为两类:无记忆的矢量量化和有记忆的矢量量化。无记忆的矢量量化包括树形搜索的矢量量化和多级矢量量化。 利用人工神经网络的方法是80年代末期提出的一种新的语音识别方法。人工神经网络(ANN)本质上是一个自适应非线性动力学系统,模拟了人类神经活动的原理,具有自适应性、并行性、鲁棒性、容错性和学习特性,其强的分类能力和输入-输出映射能力在语音识别中都很有吸引力。但由于存在训练、识别时间太长的缺点,目前仍处于实验探索阶段。
由于ANN不能很好的描述语音信号的时间动态特性,所以常把ANN与传统识别方法结合,分别利用各自优点来进行语音识别。
6. 机器人的内部传感器有哪些外部传感器有哪些
内部传感器有:检测位置和角度的传感器。
外部传感器有:物体识别传感器、物体探伤传感器、接近觉传感器、距离传感器、力觉传感器,听觉传感器等。
1、内部传感器:用来检测机器人本身状态(如手臂间角度)的传感器。
2、外部传感器:用来检测机器人所处环境(如是什么物体,离物体的距离有多远等)及状况(如抓取的物体是否滑落)的传感器。
(6)dtw语音识别算法扩展阅读
主要传感器
1、力觉
检测内容:机器人有关部件(如手指)所受外力及转矩。
应用目的:控制手腕移动,伺服控制,正解完成作业。
传感器件:应变片、导电橡胶。
2、接近觉
检测内容:对象物是否接近,接近距离,对象面的倾斜。
应用目的:控制位置,寻径,安全保障,异常停止。
传感器件:光传感器、气压传感器、超声波传感器、电涡流传感器、霍尔传感器。
7. 翻译 。成英文的。。。。
随着时代的发展,人们越来越注重生活的品质。便捷时尚成为当代人们的追求目标。现在,语音信号处理的技术趋于完善,语音识别技术的应用有两个发展方向:一个是大词汇量连续语音识别系统,主要应用于计算机的听写输入等;另一个是小型化﹑便携式语音模块的应用,如手机的拨号﹑汽车设备的语音控制等方面的应用,这些应用大多都需要使用硬件实现。
With the development of The Times, people pay more and more attention to the quality of the life. Convenient fashion become the contemporary people's pursuit of the goal. Now, the speech signal processing technology, perfect speech recognition technology application has two development direction: a large vocabulary continuous speech recognition system, mainly applies in the computer's dictation input, etc.; Another is miniaturization, portable speech mole of applications, such as mobile phone dialer, auto equipment voice control of the application, these applications are mostly need to use hardware implementation.
在此次课程设计中,我们引用现今较为成熟的语音信号处理技术,设计一个简单的非实时语音信号识别系统。其主要技术指标是识别率和计算量,其关键是特征参数的提取和模式识别方法。测试模板将预先录制好的0-9的语音文件用按键方式输入,经过A/D转换芯片0809后转化为数字信号,在单片机AT89C52中,先用端点检测将语音中有用的语音部分提取出来(即将头部和尾部的静音部分除掉),然后用LPC算法提取语音信号的特征参数,进行动态归整(DTW算法)后与模板库里面的标准语音作比较,最后将识别结果进行D/A转化后播放出来。 本文将以一个能识别数字0~9的语音识别系统的实现过程为例,阐述了基于DTW算法的特定人孤立词语音识别的基本原理和关键技术。其中包括对语音端点检测方法、特征参数计算方法和DTW算法实现的详细讨论,最后给出了在Matlab下的编程方法和实验结果。
In this course design, we quoted today a mature voice signal processing technology, design a simple the real-time speech signal recognition system. The main technical indexes is recognition rate and computational complexity, its key is feature parameters extraction and pattern recognition. Test template will advance the recorded audio file 0-9 with key way input, after A/D conversion chip after 0809 into digital signals, the microcontroller AT89C52 single, use first endpoint detection will be useful in part phonetic pronunciation is extracted from the head and tail (away), then mute the parts of speech signal LPC rules algorithm with extract the dynamic characteristic parameters, DTW algorithm) GuiZheng (after the standard pronunciation and template garage comparison, finally will identify results are D/A transformation broadcast out after. This paper will take a can identify the digits 0 ~ 9 the realization process of speech recognition system as an example, this paper expounds the DTW algorithm based on a person isolated words speech recognition of basic principle and key technology. Including speech endpoint detection methods, characteristics parameters calculation method and a detailed discussion of DTW algorithm, and finally presents the programming method in Matlab and experimental results.
8. 求助语音识别代码的注释,要每一句都写明意思,谢谢
这个是完整的代码,我自己的账号发不了这么长,希望好心人帮忙注释啊,非常感谢!!!
(1)端点检测部分(vad):
function [x1,x2] = vad(x)
%语音信号x幅度归一化到[-1,1]
x = double(x);
x = x / max(abs(x));
%常数设置
FrameLen = 240; %帧长度为240
FrameInc = 80; %帧移为80
amp1 = 10; %短时能量高门限10
amp2 = 2; %短时能量低门限为2
zcr1 = 10; %短时过零率高门限为10
zcr2 = 5; %短时过零率低门限为5
maxsilence =3;%静音时间门限3*10ms= 30ms
minlen= 15;%最小语音时间长度15*10ms = 150ms
status= 0; %
count= 0; %语音时间累计
silence = 0; %静音时间累计
%计算过零率
tmp1= enframe(x(1:end-1), FrameLen, FrameInc);
tmp2= enframe(x(2:end), FrameLen, FrameInc);
signs =(tmp1.*tmp2)<0;%符号数组,用于存储相邻两个采样点符号是否相同,即是否穿越0电平
diffs = (tmp1-tmp2)>0.02;%度量相邻两个采样点之间距离,如果大于门限0.02(经验值),则1,否则0
zcr = sum(signs.*diffs,2);%过零率
%计算短时能量
amp =sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2);
%调整能量门限
amp1 = min(amp1,max(amp)/4);
amp2 = min(amp2,max(amp)/8);
%开始端点检测
x1 = 0;
x2 = 0;
for n=1:length(zcr)
goto = 0;
switch status
case {0,1}% 0 =静音, 1 =可能开始
if amp(n) > amp1%确信进入语音段
x1 = max(n-count-1,1);
status= 2;
silence = 0;
count= count + 1;
elseif amp(n) > amp2 || ... %可能处于语音段
zcr(n) > zcr2
status = 1;
count= count + 1;
else%静音状态
status= 0;
count= 0;
end
case 2,% 2 =语音段
if amp(n) > amp2 || ...%保持在语音段
zcr(n) > zcr2
count = count + 1;
else%语音将结束
silence = silence+1;
if silence < maxsilence %静音还不够长,尚未结束
count= count + 1;
elseif count < minlen%语音长度太短,认为是噪声
status= 0;
silence = 0;
count= 0;
else%语音结束
status= 3;
end
end
case 3,
break;
end
end
count = count-silence/2;
x2 = x1 + count -1;
subplot(311)
plot(x)
axis([1 length(x) -1 1])
xlabel('语音信号');
line([x1*FrameIncx1*FrameInc ],[-1,1],'Color','red');
line([x2*FrameIncx2*FrameInc ],[-1,1],'Color','red');
subplot(312)
plot(amp);
axis([1 length(amp) 0max(amp)])
xlabel('短时能量');
line([x1,x1],[min(amp),max(amp)],'Color','red');
line([x2,x2],[min(amp),max(amp)],'Color','red');
subplot(313)
plot(zcr);
axis([1 length(zcr) 0max(zcr)])
xlabel('过零率');
line([x1,x1],[min(zcr),max(zcr)],'Color','red');
line([x2,x2],[min(zcr),max(zcr)],'Color','red');
(2)MFCC部分:
function ccc = mfcc(x)
%归一化mel滤波器组系数
bank=melbankm(24,256,8000,0,0.5,'m');%24滤波器个数,8000采样频率
bank=full(bank);
bank=bank/max(bank(:));
% DCT系数,12*24
for k=1:12
n=0:23;
dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));
end
%归一化倒谱提升窗口
w = 1 + 6 * sin(pi *(1:12) ./ 12);
w = w/max(w);
%预加重滤波器
xx=double(x);
xx=filter([1-0.9375],1,xx);
%语音信号分帧,xx是输入语音信号;256是帧长;80是帧移
xx=enframe(xx,256,80);
%计算每帧的MFCC参数
for i=1:size(xx,1)
y = xx(i,:);
s = y' .* hamming(256);%加汉明窗
t = abs(fft(s));%fft变换
t = t.^2;
c1=dctcoef * log(bank * t(1:129));
c2 = c1.*w';
m(i,:)=c2';
end
%差分系数
dtm = zeros(size(m));
for i=3:size(m,1)-2
dtm(i,:) = -2*m(i-2,:) - m(i-1,:) + m(i+1,:)+ 2*m(i+2,:);
end
dtm = dtm / 3;
%合并mfcc参数和一阶差分mfcc参数
ccc = [m dtm];
%去除首尾两帧,因为这两帧的一阶差分参数为0
ccc =ccc(3:size(m,1)-2,:);
(3)dtw计算部分:
function dist = dtw2(test, ref)
global x y_min y_max
global t r
global D d
global m n
t = test;
r = ref;
n = size(t,1);
m = size(r,1);
d = zeros(m,1);
D =ones(m,1) *realmax;
D(1) = 0;
%如果两个模板长度相差过多,匹配失败
if (2*m-n<3) || (2*n-m<2)
dist =realmax;
return
end
%计算匹配区域
xa = round((2*m-n)/3);
xb = round((2*n-m)*2/3);
if xb>xa
%xb>xa,按下面三个区域匹配
%1:xa
%xa+1:xb
%xb+1:N
for x =1:xa
y_max= 2*x;
y_min= round(0.5*x);
warp
end
for x =(xa+1):xb
y_max= round(0.5*(x-n)+m);
y_min= round(0.5*x);
warp
end
for x =(xb+1):n
y_max= round(0.5*(x-n)+m);
y_min= round(2*(x-n)+m);
warp
end
elseif xa>xb
%xa>xb,按下面三个区域匹配
%0:xb
%xb+1:xa
%xa+1:N
for x =1:xb
y_max= 2*x;
y_min= round(0.5*x);
warp
end
for x =(xb+1):xa
y_max= 2*x;
y_min= round(2*(x-n)+m);
warp
end
for x =(xa+1):n
y_max= round(0.5*(x-n)+m);
y_min= round(2*(x-n)+m);
warp
end
elseif xa==xb
%xa=xb,按下面两个区域匹配
%0:xa
%xa+1:N
for x =1:xa
y_max= 2*x;
y_min= round(0.5*x);
warp
end
for x =(xa+1):n
y_max= round(0.5*(x-n)+m);
y_min= round(2*(x-n)+m);
warp
end
end
%返回匹配分数
dist = D(m);
function warp
global x y_min y_max
global t r
global D d
global m n
d = D;
for y = y_min:y_max
D1 = D(y);
if y>1
D2= D(y-1);
else
D2 =realmax;
end
if y>2
D3= D(y-2);
else
D3 = realmax;
end
d(y) =sum((t(x,:)-r(y,:)).^2) + min([D1,D2,D3]);
end
D = d;
(4)测试函数testdtw部分;
disp('正在计算参考模板的参数...')
for i=1:10
fname = sprintf('G:\\石东东\\语音\\%da.wav',i-1);
x = wavread(fname);
[x1 x2] = vad(x);
m = mfcc(x);
m = m(x1-2:x2-2,:);
ref(i).mfcc = m;
end
disp('正在计算测试模板的参数...')
for i=1:10
fname = sprintf('G:\\石东东\\语音\\%db.wav',i-1);
x = wavread(fname);
[x1 x2] = vad(x);
m = mfcc(x);
m = m(x1-2:x2-2,:);
test(i).mfcc = m;
end
disp('正在进行模板匹配...')
dist = zeros(10,10);
for i=1:10
for j=1:10
dist(i,j) = dtw2(test(i).mfcc, ref(j).mfcc);
end
end
disp('正在计算匹配结果...')
for i=1:10
[d,j] = min(dist(i,:));
fprintf('测试模板%d的识别结果为:%d\n', i-1, j-1);
end
9. 时间序列分析——DTW算法详解
DTW(dynamic time warping)是时间序列分析中一个很早(1994年,论文的年纪比我都大)也很经典的算法了。它其实借用的是经典算法的“动态规划”的思想。一般来说,时间序列数据如果要做分类,那么大体可以将实验步骤分为:数据预处理(去噪或数据增强),数据表征,选取分类器(机器学习算法还需要选取合适的距离计算方法)。虽然DTW算法也给出了路径,但我实在想不出如何利用path,因此我更倾向于将DTW算法归为距离计算方法。
第一部分Introction不再介绍。直接介绍第二部分:Dynamic Time Warping
作者首先提到,dtw算法成功应用在了语音识别领域——研究者将现实中一个单词的发音(其实就是一条时间序列)与模板库中单词的发音去一个个匹配。怎么衡量匹配程度的大小呢?