语音识别的matlab实现
利用Matlab进行语音合成和语音识别技术实现

利用Matlab进行语音合成和语音识别技术实现人类的语音交流是一种非常重要的沟通方式。
然而,由于各种原因,有些人可能会失去语音能力,这给他们的生活带来了极大的困扰。
幸运的是,现代技术的快速发展为这些人提供了帮助的可能性。
利用Matlab进行语音合成和语音识别技术的实现,为失去语音能力的人提供了一种有效的解决方案。
语音合成技术是指根据既定的文本或输入内容,生成人工合成语音的过程。
Matlab是一个功能强大的工具,可以用于语音合成的实现。
它具有丰富的信号处理和声音处理函数,可以通过调用这些函数来进行语音合成。
首先,我们需要选择一种合适的语音合成算法。
一个常用的算法是基于傅里叶变换的加法合成算法。
这个算法将输入文本转化为一个频谱图,然后将频谱图转换为时域信号,最后通过声音设备输出。
在Matlab中,我们可以使用fft函数进行频谱分析,并使用ifft函数进行逆傅里叶变换以转换为时域信号。
在进行语音合成之前,我们还需要合适的语音库。
语音库通常包含一系列基本音素以及它们的语音特征。
通过指定一个特定的文本,我们可以根据语音库中的音素选择相应的语音特征,然后使用合成算法生成相应的语音。
除了语音合成,Matlab还可以用于语音识别技术的实现。
语音识别是指将语音信号转化为文本或其他形式的过程。
这在现代通信和人机交互中非常常见,例如,语音助手和电话自动接听系统。
语音识别的实现通常依赖于声学模型和语言模型。
声学模型主要用于建模和识别不同语音特征,在Matlab中可以利用模式识别算法来实现声学模型。
语言模型则主要用于识别和解析语音信号的上下文信息。
在进行语音识别之前,我们需要收集一些训练数据用于模型的训练。
这些训练数据包括多个语音样本以及相应的文本转录。
通过这些数据,我们可以使用Matlab中的机器学习算法进行模型的训练和优化。
常用的机器学习算法包括HMM (隐马尔可夫模型)和DNN(深度神经网络)等。
一旦完成了语音识别模型的训练和优化,我们就可以使用这个模型进行实际的语音识别。
基于MATLAB的语音信号处理与识别系统设计与实现

基于MATLAB的语音信号处理与识别系统设计与实现一、引言语音信号处理与识别是人工智能领域中的重要研究方向之一,随着深度学习和人工智能技术的不断发展,基于MATLAB的语音信号处理与识别系统设计与实现变得越来越受到关注。
本文将介绍如何利用MATLAB进行语音信号处理与识别系统的设计与实现。
二、MATLAB在语音信号处理中的应用MATLAB作为一种强大的科学计算软件,提供了丰富的工具箱和函数库,可以方便地进行语音信号处理。
在语音信号处理中,MATLAB可以用于语音信号的采集、预处理、特征提取、模型训练等各个环节。
通过MATLAB提供的工具,可以高效地对语音信号进行分析和处理。
三、语音信号处理流程1. 语音信号采集在语音信号处理系统中,首先需要对语音信号进行采集。
通过MATLAB可以实现对声音的录制和采集,获取原始的语音信号数据。
2. 语音信号预处理采集到的语音信号数据通常包含噪声和杂音,需要进行预处理以提高后续处理的准确性。
预处理包括去噪、降噪、滤波等操作,可以有效地净化语音信号数据。
3. 特征提取在语音信号处理中,特征提取是一个关键步骤。
通过MATLAB可以提取出语音信号的频谱特征、时域特征等信息,为后续的模式识别和分类打下基础。
4. 模型训练与识别利用MATLAB可以构建各种机器学习模型和深度学习模型,对提取出的特征进行训练和识别。
通过模型训练,可以实现对不同语音信号的自动识别和分类。
四、基于MATLAB的语音信号处理与识别系统设计1. 系统架构设计基于MATLAB的语音信号处理与识别系统通常包括数据采集模块、预处理模块、特征提取模块、模型训练模块和识别模块。
这些模块相互配合,构成一个完整的系统架构。
2. 界面设计为了方便用户使用,可以在MATLAB中设计用户友好的界面,包括数据输入界面、参数设置界面、结果展示界面等。
良好的界面设计可以提升系统的易用性和用户体验。
五、基于MATLAB的语音信号处理与识别系统实现1. 数据准备首先需要准备好用于训练和测试的语音数据集,包括正样本和负样本。
Matlab在语音识别中的应用示例

Matlab在语音识别中的应用示例1. 引言语音识别是一项广泛应用于人机交互中的技术,其应用范围从智能助理到语音控制等众多领域。
而Matlab作为一种强大的数学建模与仿真工具,也在语音识别领域扮演着重要的角色。
本文将通过几个具体的应用示例,探讨Matlab在语音识别中的应用。
2. 语音信号的预处理语音信号的预处理对于后续的语音识别至关重要。
在Matlab中,我们可以使用数字滤波器对语音信号进行去噪和增强。
通过使用滤波器设计工具箱,我们可以根据语音信号的频谱特性,设计合适的数字滤波器。
另外,还可以利用Matlab中的时频分析工具对语音信号进行频谱分析,以了解信号的时域和频域特性。
3. 基于模板匹配的语音识别模板匹配是一种常见的语音识别方法,其基本思想是通过比较未知语音信号与预先录制的模板信号的相似度来进行识别。
在Matlab中,我们可以使用相关性分析函数corrcoef来计算两个语音信号的相关系数。
首先,我们需要将语音信号转化为MFCC(Mel频率倒谱系数),然后将其与预先录制的模板信号进行相关性分析。
通过设置阈值,我们可以判断未知语音信号是否匹配某个模板信号,从而进行语音识别。
4. 基于隐马尔可夫模型的语音识别隐马尔可夫模型(Hidden Markov Model, HMM)是一种常用的语音识别技术。
在Matlab中,我们可以使用HMM工具箱对语音信号进行建模和识别。
首先,我们需要根据不同的语音类别,建立对应的HMM模型。
然后,通过计算待识别语音信号与不同HMM模型的概率,选取概率最大的模型进行识别。
通过调整模型参数和训练样本,我们可以提高语音识别的准确率。
5. 基于深度学习的语音识别近年来,深度学习在语音识别领域取得了重大突破。
在Matlab中,我们可以使用深度学习工具箱进行语音信号的处理和特征提取。
深度学习网络(如卷积神经网络和循环神经网络)可以有效地学习语音信号的特征表示,提高语音识别的准确性。
如何使用MATLAB进行语音识别与合成

如何使用MATLAB进行语音识别与合成引言:随着人工智能技术的迅速发展,语音识别与合成逐渐成为我们日常生活中不可或缺的一部分。
借助于MATLAB这一强大的工具,我们可以轻松实现语音识别与合成的功能。
本文将介绍如何使用MATLAB进行语音识别与合成,以及一些相关的算法和技巧。
一、MATLAB中的语音处理工具箱MATLAB提供了一系列强大的语音处理工具箱,其中包括音频数据导入、音频显示、频谱分析、语音识别、语音合成等功能。
我们可以使用这些工具箱来快速进行语音处理的各个环节。
二、语音信号的特征提取与预处理语音信号是一种时间序列信号,我们需要将其转化为数值特征来进行处理。
常用的语音特征包括语音音素、频率、时域和频域特征等。
在MATLAB中,我们可以使用MFCC(Mel-Frequency Cepstral Coefficients)来提取语音信号的特征。
MFCC是一种重要且有效的语音特征提取方法,可以在一定程度上帮助我们区分不同的语音信号。
三、语音识别算法的实现语音识别是将语音信号转化为相应的文本或命令的过程。
常见的语音识别算法包括模型基于高斯混合模型(Gaussian Mixture Model,GMM)的HMM(Hidden Markov Model)、深度神经网络(Deep Neural Networks,DNN)等。
在MATLAB 中,我们可以使用Speech Recognition Toolbox来实现这些算法。
例如,我们可以使用HMM来训练一个语音识别模型,然后将新的语音信号输入模型中进行识别。
四、语音合成算法的实现语音合成是将文本或命令转化为相应的语音信号的过程。
主流的语音合成算法包括基于规则的方法和基于统计的方法。
基于规则的方法是通过事先定义一些语音合成的规则来实现,而基于统计的方法则是通过学习大量的语音样本来生成合成语音。
在MATLAB中,我们可以使用Speech Synthesis Toolbox来实现语音合成算法。
如何在Matlab中进行语音识别与处理

如何在Matlab中进行语音识别与处理引言语音识别与处理是计算机科学领域中一项重要的技术,它旨在帮助计算机理解人类语言,并能够对语音进行分析与处理。
Matlab作为一种流行的科学计算软件,提供了强大的语音处理功能,为开发语音识别算法提供了便捷的工具和环境。
本文将介绍如何在Matlab中进行语音识别与处理的基本方法和步骤。
一、语音数据的获取和处理1.语音数据的获取在进行语音识别与处理之前,我们首先需要获取语音数据。
语音数据可以通过麦克风或外部录音设备进行采集,也可以从公共数据库或其他可用资源中获得。
Matlab提供了一系列的函数和工具箱,方便读取和处理不同格式的音频文件,如WAV、MP3等。
2.语音数据的预处理获取到语音数据后,我们需要对其进行预处理。
这包括去除噪声、降低采样率、抽取语音特征等操作。
Matlab提供了丰富的音频信号处理函数和算法,例如消噪滤波、谱分析、时频分析等,可用于对语音信号进行预处理和特征提取。
二、语音信号的特征提取1.短时能量和过零率短时能量和过零率是最常用的语音特征之一。
短时能量表示语音信号在短时间内的能量大小,过零率表示语音信号在短时间内过零的次数。
Matlab提供了一系列函数用于计算短时能量和过零率,如enframe、frame2sample等。
2.梅尔频率倒谱系数(MFCC)MFCC是一种常用的语音特征提取方法,它使用了梅尔滤波器组对频谱进行映射,并通过离散余弦变换(DCT)将频谱转换为倒谱系数。
Matlab提供了mfcc函数用于计算MFCC特征,并可通过调整滤波器组的参数来优化特征提取效果。
3.线性预测编码(LPC)LPC是一种基于线性预测模型的语音分析方法,它通过对语音信号进行线性预测来估计语音信号的参数。
Matlab提供了lpc函数用于计算LPC系数,并可通过解线性方程组来估计语音信号的预测残差。
三、语音识别算法的开发与实现1.基于模板匹配的识别算法模板匹配是一种简单而有效的语音识别方法,它通过比较输入语音信号和事先存储的模板语音信号进行匹配,找出最相似的模板。
Matlab在语音分割与语音识别中的应用实践

Matlab在语音分割与语音识别中的应用实践引言语音分割和语音识别是语音处理领域中的重要问题。
语音分割是指将一段连续的语音信号切分成独立的语音片段,而语音识别则是利用机器学习和模式识别技术,将语音转化为文本或命令。
本文将介绍Matlab在语音分割和语音识别方面的应用实践。
一、语音分割语音分割是语音处理的第一步,它的目标是将连续的语音信号切分成单独的语音片段。
这对于诸如语音识别、语音合成和语音增强等任务都是至关重要的。
在Matlab中,语音分割可以通过多种方法完成。
一种常用的方法是基于能量阈值的分割。
该方法基于语音信号的能量变化,在信号中找到能量高于某个阈值的片段,将这些片段切分出来。
另一种常用的方法是基于短时过零率的分割。
这种方法通过计算语音信号的短时过零率(即信号通过零点的次数),找到过零率高于某个阈值的片段,并将其切分。
此外,还有一些更高级的方法可以在Matlab中应用于语音分割,如基于隐马尔可夫模型(HMM)的分割和基于小波变换的分割。
这些方法在处理复杂语音场景时表现优异。
二、语音识别语音识别是将语音信号转化为文字或命令的过程。
它是自然语言处理领域中的一个重要任务,具有广泛的应用。
Matlab在语音识别中提供了丰富的工具和技术。
在Matlab中,语音识别的核心算法是基于隐马尔可夫模型(HMM)的方法。
HMM是一种用于建模序列数据的统计模型,它在语音识别中可以用于建模语音帧之间的转移概率和语音帧和文本之间的转移概率。
为了提高语音识别的准确性,Matlab还提供了一些常用的技术,如声学模型训练和优化、特征提取和降维等。
这些技术可以帮助我们从语音信号中提取更有用的信息,并减少不必要的噪声。
此外,在Matlab中还可以使用深度学习算法进行语音识别。
深度学习是一种基于神经网络的机器学习方法,它在语音识别中取得了很大的成功。
Matlab提供了一些常用的深度学习工具箱,如深度学习工具箱和音频工具箱,可以帮助我们进行高效的语音识别。
如何使用Matlab进行语音识别和自然语言理解

如何使用Matlab进行语音识别和自然语言理解语音识别和自然语言理解是人工智能领域的重要研究方向之一。
随着计算机处理能力的不断提升和深度学习技术的发展,这两个领域的研究也取得了显著的进展。
本文将介绍如何使用Matlab进行语音识别和自然语言理解的相关工作。
一、语音识别基础语音识别是将人类的语音信号转化为计算机可处理的文本形式的过程。
它通常涉及到声学模型和语言模型两个重要的组成部分。
在Matlab中,我们可以使用语音处理工具箱来实现语音识别。
首先,在进行语音识别之前,我们需要将语音信号进行预处理,包括去除噪声、进行特征提取等。
Matlab提供了丰富的函数和工具,如音频滤波、时频分析等,可用于实现这些预处理步骤。
接下来,我们需要设计声学模型来对语音信号进行建模。
常用的声学模型包括隐马尔可夫模型(Hidden Markov Model,HMM)和深度神经网络(Deep Neural Network,DNN)。
在Matlab中,我们可以使用统计和机器学习工具箱来构建并训练这些声学模型。
最后,我们需要根据语言模型对识别结果进行解码和修正。
语言模型用于对识别结果的语言合理性进行评估,帮助我们选择最佳的识别结果。
Matlab提供了自然语言处理工具箱,可用于对文本进行分析和处理。
二、自然语言理解基础自然语言理解是指计算机对人类自然语言进行理解和解释的过程。
它涉及到文本分析、语义解析、语义推理等多个任务。
在Matlab中,我们可以利用自然语言处理工具箱来实现自然语言理解的相关任务。
首先,我们可以使用文本分析工具箱对文本进行分词、词性标注和命名实体识别等处理。
这些预处理操作有助于建立文本的语义表示,并为后续的任务提供基础。
接下来,我们可以使用语义解析和语义推理技术来对文本进行语义分析和推理。
语义解析的目标是将自然语言表达式转化为语义表示,而语义推理则旨在根据这些语义表示进行推理和推断。
Matlab提供了一些自然语言处理算法和模型,如词向量模型、句法分析模型等,可用于实现这些任务。
基于MATLAB的特定人语音识别软件开发与设计

基于MATLAB的特定人语音识别软件开发与设计本文将详细介绍基于MATLAB的特定人语音识别软件的开发与设计,从数据采集、数据预处理、特征提取、训练模型以及测试评估等方面进行介绍。
同时,本文还会对该软件的实时性、准确性、稳定性进行分析并进行改进优化。
一、数据采集数据采集是语音识别系统开发的第一步,也是最为关键的一步。
采集到的数据质量将直接影响后续的预处理、特征提取以及模型训练。
在采集数据时,应该尽可能保证采集设备的统一性,以便后续的数据处理与模型训练。
同时,采集的语音数据应具有较高的覆盖率和多样性,以便让模型具有更好的泛化能力。
二、数据预处理在数据预处理阶段,需要对采集到的语音数据进行一系列的预处理操作,例如去除背景噪音、去除重复数据、平衡数据分布等。
这些操作有助于提高预处理的效果,从而提高后续的特征提取以及模型训练的准确度。
三、特征提取特征提取是语音识别系统中最为复杂的一步,其目的是将原始的语音信号转化为易于处理的数学特征。
在特征提取中,需要使用一些特征提取算法,例如短时傅里叶变换、梅尔倒谱系数、线性预测系数等。
这些算法可以大大减少语音信号的冗余信息,提取出信号的主要特征,从而提高模型的分类准确度。
四、训练模型在模型训练中,需要选择适当的模型算法以及调整算法的超参数。
在语音识别中,常用的模型算法有隐马尔可夫模型、深度神经网络、循环神经网络等。
训练模型的过程中,需要使用一些评估指标,例如准确率、召回率、F1值等,以评估模型的优劣。
同时,在训练过程中,需要使用一些技巧,例如交叉验证、正则化、学习率衰减等,以优化模型的泛化能力。
五、测试评估在模型训练完成后,需要使用测试数据对模型进行评估。
在测试评估中,需要使用一些评估指标,例如准确率、召回率、误判率等,以评估模型的性能。
同时,还需要针对测试结果进行分析,从而找出模型存在的问题并进行改进优化。
六、实时性、准确性、稳定性改进优化在实际应用中,需要保证语音识别系统的实时性、准确性以及稳定性,否则无法满足用户需求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
语音识别的MATLAB实现声控小车结题报告小组成员:关世勇吴庆林一、项目要求:声控小车是科大华为科技制作竞赛命题组的项目,其要求是编写一个语言识别程序并适当改装一个小型机动车,使之在一个预先不知道具体形状的跑道上完全由声控来完成行驶比赛。
跑道上可以有坡面,坑,障碍等多种不利条件,小车既要具有较快的速度,也要同时具有较强的灵活性,能够克服上述条件。
二、项目分析:由于小车只要求完成跑道上的声控行驶,所以我们可以使用简单的单音命令来操作,如“前”、“后”、“左”、“右”等。
由于路面有各种不利条件,而且规则要求小车尽可能不越过边线,这就决定了我们的小车不能以较高的速度进行长时间的快速行驶。
所以我们必须控制小车的速度和行进距离。
由于外界存在噪声干扰,所以我们必须对噪声进行处理以减小其影响。
鉴于上诉各种要求,我们决定对购买的遥控小车进行简单改造,使用PC机已有的硬件条件编写软件来完成语音的输入,采集,处理和识别,以实现对小车的控制。
三、解决思路与模块:整个程序大致可划分为三个模块,其结构框图如下图所示:整个程序我们在Visual C++ 环境下编写。
四、各模块的实现:1 声音的采集:将声音信号送入计算机,我们利用了声卡录音的低层操作技术,即对winmm.lib进行API调用。
具体编程时这一部分被写在一个类中(Soundin类)。
在构造函数中设定包括最大采样率(11025),数据缓存(作为程序一次性读入的数据,2048),声卡本身所带的一些影响采样数据等的各种参数;调用API函数waveInGetNumDevs(返回UNIT,参数为空)检察并打开声音输入设备,即声卡;并进而使用waveInGetDevCaps得到声卡的容量(在waveInCaps中存有该数据,对其进行地址引用,从DWORD dwFormats得到最大采样率、声道数和采样位);创建一个叫WaveInThreadEvent的事件对象,并赋予一个Handle,叫m_WaveInEvent,开始利用线程指针m_WaveInThread调用自定义的线程WaveInThreadProc;对结构WAVEFORMATEX中WaveInOpen开始提供录音设备。
注意设备句柄的得到是通过对HWAVEIN 型数据m_WaveIn的引用。
由于通过这种方式进行录音的文件格式是.wav,所以要先设置录音长度,以及对头文件进行一些设置:包括buffer的地址为InputBuffer的初始地址,大小为录音长度的两倍,类型。
使用waveInPrepareHeader 为录音设备准备buffer。
然后使用waveInAddBuffer函数为录音设备送出一个输入buffer。
最后使用waveInStart(m_WaveIn)打开设备。
程序中WaveInThreadProc需要提出另外说明,因为通过这个线程我们可以实现采样和数据提取。
该线程首先定义一个指向CsoundIn类的指针pParam,并将其宏定义为PT_S。
而线程参数即为空指针pParam。
使用WaitForSingleObject将录音过程设置为一旦开始就不中止(除非中止线程)。
在此线程中做如下两个工作:将数据送入buffer,并将数据传入某个参数(其调用一个函数,将buffer中的数据送入该函数的参数*pt),而这些数据正是我们要利用和处理的数字化的语音信息。
2 声音的预处理:声音信息的预处理主要包括音头和音尾的判断,声音的预加重,分帧处理和窗化处理。
A 音头音尾的判断与提取:这是该项目的一个难点。
由于我们的声音信号不是连续给出的,而且现场还有噪声的存在,所以我们必须通过适当的方法来判断采集的数据是不是我们所要的声音控制信号。
这又是该项目的一个重点。
若声音指令信号提取的不恰当,那么我们采样所得的数据就和我们实际的语音信号就会有很大的出入,这样不但会延迟语音识别的时效性,而且会降低对这些声音信号的识别率。
对声音信号的提取,主就是确定音头、音尾的位置。
常用的方法有过零率和短时距能量等几种。
我们这里采用的就是过零率这个方法。
首先对噪声取样,从这些噪声样本中得到噪声的上下限,将实时信号与这个门限进行比较,得到过零率。
定义过零率Zcr如下:其中:利用过零率的大小来判断是否有声音信号进入,若( 为预设的过零率值),则表示有声音信号进入,就找到了音头。
在找到音头的情况下,若,则表示声音结束,也就找到了音尾。
在环境噪声较大且比声音指令小的多的情况下可以对这个门限加一修正。
音头和音尾之间的部分就是我们用以作为识别用的声音指令信号了。
由于一般情况下人们所发出的单音都有一定的时间长度而大的噪声则大多是突发的,持续时间较短,所以我们可以再对所得到的声音指令信号做一次筛选,若得到的声音信号的长度小于预设值,就可认为是噪声干扰,舍弃;若得到的声音信号的常到大于预设值,则将其作为有用信号存储。
实验表明,利用过零率和预设长度相结合起来提取声音指令信号的方法很有效的。
B 语音信号的预加重:我们所采用的预加重的方法是较为常用的网络:传递函数为:得到的信号为:预加重的目的在于滤除低频干扰,尤其是50Hz或60Hz的工频干扰,将对于语音识别更为有用的高频部分的频谱进一步提升。
在计算短时能量之前应用该滤波器,还可以起到消除直流漂移、抑制随机噪声和提升清音部分能量的效果。
C 分帧处理在计算各个系数之前要先将语音信号作分帧处理。
语音信号是瞬时变化的,但在10~20ms内是相对稳定的,而我们设定的采样频率为11025所以我们对预处理后的语音信号S1(n)以300点为一帧进行处理,帧移为100个采样点。
(N=300)D 窗化处理:为了避免矩形窗化时对LPC系数在端点的误差,我们采用了汉明窗函数来进行窗化。
即:其中:3 语音数据的特征提取:语音信号的特征有多种度量标准,我们采用的是比较常用的倒谱特征。
语音信号是一种典型的时变信号,然而如果把观察时间缩短到几十毫秒,则可以得到一系列近似稳定的信号。
人的发音器官可以用若干段前后连接的声管进行模拟,这就是所谓的声管模型。
全极点线性预测模型(LPC)可以对声管模型进行很好的描述,每段声管对应一个LPC模型的极点。
一般情况下,极点的个数在12-16个之间就可以足够清晰地描述语音信号的特征了。
语音信号经过预处理,它的每个样值均可由过去若干个样值的线性组合来逼近,同时可以采用使实际语音抽样与线性预测抽样之间的均方差最小的方式,来解出一组预测的系数。
这就是LPC所提取出来的信号的初始特征。
预测值时域表达式为:其中,为加权系数,即LPC系数。
预测的误差为:使在均方误差最小的条件下,可求得唯一的,此过程即为LPC分析过程。
这里采用的是Levinson-Durbin法。
由上面的式子有:其中,为待分析与引信号的自相关序列:因此:Levinson-Durbin算法为:1.初始化:2.迭代计算:对于3.最后就算:以上式中的为反射系数。
;为最小预测误差,随着阶数的增加而减少;为模型增益常量。
在语音识别系统中,很少直接使用LPC系数,而是由LPC系数推导出另一种参数:线性预测倒谱系数(LPCC)。
倒谱实际上是一种同态信号处理方法,标准的倒谱系数计算流程需要进行FFT变换、对数操作和相位校正等步骤,预算比较复杂。
在实际计算中,他不是由原始信号x(n)得到,而是由LPC系数得到的。
LPC系数算出后,就可以直接进行倒谱系数的计算,其迭代算法如下:1.初始化:2.迭代计算:这里C(0)实际上就是直流分量,在识别中通常是不用的,也不去计算。
综合考虑识别误差和识别速度的影响,我们在计算LPC 时,LPC系数的阶数Q值取为8,而LPCC系数的阶数P值取为12。
4 DTW 算法:语音识别程序的核心部分即采用合适的算法来识别不同的语音信号,在特定人语音识别算法中,对于孤立词语语音识别而言,最为简单的方法是采用DTW(Dynamic Time Warping,动态时间弯折)算法,该算法基于动态规划)(DP)的思想,解决了发音长短不一的模本匹配问题,是语音识别中出现较早、较为经典的一种算法。
我们这里采用的就是DTW算法。
我们用R表示已存的参考模板,T表示待识别的测试模板,R(1),R(2) ,…,R(m),T(1),T(2),…,T(n)分别表示参考模板和测试模板中的各语音帧,d[T(n),R(m)]表示这两帧特征矢量之间的距离(DTW算法中通常采用欧氏距离)。
为了比较R和T之间的相似度,可以计算他们之间的距离D[T,R],距离越小则相似度越高。
D[T,R]的计算通常采用的是动态规划的方法。
将R和T的各个帧号分别在直角坐标系的横轴和纵轴上标出,则如下图可得到一个网格,网格中各点表示R和T中的一帧的交汇点。
DP算法可以归结为寻找一条通过此网格中若干格点的路径,使得沿路径的累积距离达到最小值。
为了使路径不至于过分倾斜,可以约束斜率在0.5-2范围内,如果路径已经通过了格点( ),那么下一个通过的格点( )只能是下列三种情况之一:搜索最佳路径的方法如下:搜索从( )开始,网格中任意一点只可能有一条路径通过。
对于( ),其可达到该格点的前一格点之可能是( ),( ),( ),那么( )一定选择这3个距离中的最小者所对应的格点作为其前续格点。
若用( )代表此格点,并将通过该格点的路径延伸而通过( ),这时此路径的累积距离为:其中的由下式决定:这样可以从初始点出发依次搜索直到搜索到终点便可得到最佳路径。
五、整个系统的软件流程图:见右图。
六、硬件用四个c1108型三极管来控制小车遥控手柄的前、后、左、右触点的通断。
从计算机的并口引出四根信号线,与三极管相连,与前、后、左、右一一对应。
若判断出指令信号后,则相应的信号线上输出高电平,该电路导通,发送无线信号。
若无指令,则信号线上输出低电平,电路断路,不发送无线信号。
电路示意图如下:(由于四条线路基本是一致的,这里只画出了其中的一根信号线与外电路的连接示意图)七、实现功能与技术指标:1. 软件上可以识别前、后、左、右、停等语音指令,并发出相应的控制信号。
2. 硬件上可以实时的收发无限信号,并控制小车作相应的动作。
3. 语音识别正确率大于95%,从发出语音指令到执行该指令的延时小于100ms。
八、与原设计方案的比较:我们的整个方案基本是按照原设计方案来进行的,各项指标也基本达到了预定目标。
九、经费使用情况:主要分为两部分:第一,由于我们都没有学过语音识别方面的知识,所以一开始我们就买了一些参考书和资料。
第二,在软件部分初步成型后,在对小车进行改装时购买了一些电子元器件以及其他一些工具。
十、致谢:感谢华为研究所为我们提供这样好的锻炼机会,我们从中学到了很多书本上学不到的知识。
感谢铁伟涛同学为我们提供方案支持。