基于MATLAB的说话人语音识别

基于MATLAB的说话人语音识别   

             

     目录

  • 系统设计任务及要求………………………………………………3
  • 语音识别的简介……………………………………………………3

三、语音识别原理………………………………………………………3

3.1语音识别系统总体框架……………………………………………4

3.2语音信号预处理……………………………………………………4

  3.3特征参数的提取…………………………………………………6

  3.4用矢量量化聚类法生成码本……………………………………7

  3.5 VQ的说话人识别 ………………………………………………8

  • 仿真实现……………………………………………………………9
  • 总结……………………………………………………………………9

附录1………………………………………………………………………10

附录2………………………………………………………………………14

一.系统设计任务及要求

1.用MATLAB实现50个特定人的语音识别功能;

  2.语音识别的正确率在百分之九十以上;

二.语音识别的简介

说话人识别就是根据说话人的语音信号来判别说话人的身份。语音是人的自然属性之一,由于说话人发音器官的生理差异以及后天形成的行为差异,每个人的语音都带有强烈的个人色彩,这就使得通过分析语音信号来识别说话人成为可能。用语音来鉴别说话人的身份有着许多独特的优点,如语音是人的固有的特征,不会丢失或遗忘;语音信号的采集方便,系统设备成本低;利用电话网络还可实现远程客户服务等。因此,近几年来,说话人识别越来越多的受到人们的重视。与其他生物识别技术如指纹识别、手形识别等相比较,说话人识别不仅使用方便,而且属于非接触性,容易被用户接受,并且在已有的各种生物特征识别技术中,是唯一可以用作远程验证的识别技术。因此,说话人识别的应用前景非常广泛:今天,说话人识别技术已经关系到多学科的研究领域,不同领域中的进步都对说话人识别的发展做出了贡献。说话人识别技术是集声学、语言学、计算机、信息处理和人工智能等诸多领域的一项综合技术,应用需求将十分广阔。

说话人识别系统设计中的根本问题是如何从语音信号中提取表征人的基本特征。即语音特征矢量的提取是整个说话人识别系统的基础,对说话人识别的错误拒绝率和错误接受率有着极其重要的影响。同语音识别不同,说话人识别利用的是语音信号中的说话人信息,而不考虑语音中的字词意思,它强调说话人的个性。因此,单一的语音特征矢量很难提高识别率,所以语音信号的时候如何提取信号中关键的成分尤为重要。语音信号的特征参数的好坏直接导致了辨别的准确性。

系统在说话人的识别中采用基于Mel的频率倒谱系数的模板匹配的说话人识别方法。具体的实现过程当中,采用了matlab软件来帮助完成这个项目。在matlab中实现采集,分析,特征提取,配对,识别。

三.语音识别原理

3.1 语音识别系统总体框架

说话人识别系统的总体结构如图1所示。首先通过语音的录制作为输入信号,输入的模拟语音信号要进行预处理,包括预滤波、采样和量化、加窗、端点检测、预加重等等。经过预处理后,接下来就是重要的一环:特征参数提取。具体要求是:

  1. 提取的特征参数要能有效地代表语音特征,具有很好的区分性。
  2. 各阶参数之间有良好的独立性。
  3. 特征参数要计算方便,最好有高效的计算方法,以保证语音识别的实时实现。

图1  说话人语音识别系统总体框图

考虑到数据量、实时性以及识别率的问题,本文采用基于矢量量化的方法识别语音。对于特征参数的选取,我们使用mfcc的方法来提取。

3.2语音信号预处理

3.2.1 滤波

在模/数转换之前,通常要进行滤波处理,滤波的作用主要有两个:一是用高通滤波器抑制50Hz电源噪声的干扰;二是用低通滤波器滤除语音信号中频率分量超过采样频率一半的部分,防止采样信号的混叠。

3.2.2 模数转换

将原始采集得来的语音模拟信号转换为计算机能够处理的数字信号,就需要对其进行数字化,此过程成为数/模转换,最常见的方式就是脉冲编码调制(Palse

Code Modulation ),它的过程分为采样、量化和编码;

采样是对模拟信号进行周期性的扫描,将实际上连续变化的信号转换为时间上离散的信号,从而便于表示为计算机的语言。根据Nyquist采样定理,当采样频率高于信号最高频率的一倍时,原来的连续信号就可以从采样样本中完全重建出来。人耳可以分辨的声音频率范围为(20Hz,20KHz),因此,当采样的频率高于40KHz时,采样的过程就不会丢失信息,但考虑到设备的实际性能,且说话人语音频率主要集中在3.4KHz,故本系统以8KHz为采样率。 量化就是把经过采样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用最接近的电平值来表示出来,最终用整数倍的数字表示的过程。经过时间上的采样后,连续的模拟信号变成了离散信号,再经过振幅的量化,把量化好的采样值用二进制代码表示出来,就转换成了数字信号。

编码:就是用一组二进制码组来表示每一个有固定电平的量化值。然而,实际上量化是在编码过程中同时完成的,故编码过程也就称为模/数转换,

该系统以实验者50人的声音为分析样本,将语音信号都保存为符合RIFF规范的wav文件格式,便于在windows环境下处理。语音信号是利用PC机录制,音频文件采用8000kHz采样频率、16bit量化、单声道的PCM录  音,用MATLAB本身wavread函数来读取语音文件,直接将语音数据转化为数字信号。 

3.2.3预加重、分帧及加窗

   预处理是指对语音信号的特殊处理:预加重,分帧处理。预加重的目的是提升高频部分,使信号的频谱变得平坦,以便于进行频谱分析或声道参数分析。用具有 6dB/倍频程的提升高频特性的预加重数字滤波器实现。虽然语音信号是非平稳时变的,但是可以认为是局部短时平稳。故语音信号分析常分段或分帧来处理。

在语音参数计算之前,一般要将其通过一个预加重滤波器,预加重目的是为了对语音的高频部分进行加重增加其高频分辨率,其函数为:

x=filter([1 -0.9375],1,x);

“帧”,将语音信号截断的过程称之为“分帧”。为了保持帧之间的平滑过渡,常相邻的两帧之间有少部分的重叠,这些重叠的部分叫做帧移。在以后的语音信号识别过程中,都是依赖于每一帧多对应的数据序列所描述的语音信号特征来处理。

分帧操作主要是提取语音短时特性便于建模,一般取帧长30ms,帧移10ms;在对语音信号进行截断处理形成帧后,通常会产生泄露( Gibbs)现象,为了防止此种现象的发生,我们通常运用一个长度有限的窗函数w(n)对语音短段进行变换或运算。对于语音信号的每一帧来说,窗函数的宽度会影响语音信号的平滑性。越宽的窗函数,对信号的平滑作用就会越显著,效果越好,窗函数过窄,则基本

对信号不起作用。语音信号经过加窗处理后,两端的坡度会减小,窗口边缘两端也不会引起急剧变化,截取出的语音波形两端就会缓慢的过渡为零,这就有

效的减小语音帧的截断效应。

因此对于语音信号时域分析来说,窗函数的选择很重要,虽说矩形窗平滑比较好,但是容易丢失波形细节,并有可能造成泄漏现象。而Hamming窗可以有效的克服泄漏现象。所以在加窗方面常以Hamming窗为主,即:

3.3特征参数的提取

对于特征参数的选取,我们使用mfcc的方法来提取。

MFCC(Mel-sealed Cepstrum Coefficients),即Mel频率倒谱参数,也叫做Mel尺度倒谱参数。MFCC参数是基于人的听觉特性利用人听觉的屏蔽效应,在Mel标度频率域提取出来的倒谱特征参数。 这个参数的提取是将语音从时域变换至倒谱域,通过构造人的听觉模型,用滤波器组模仿人耳的滤波,语音通过滤波器组的输出为语音基本特征参数,然后做傅里叶变换

在语音识别处理信号过程中,MFCC参数是按照帧计算的。其特征提取及计算过程如图2所示。

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
语音识别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。 八、与原设计方案的比较: 我们的整个方案基本是按照原设计方案来进行的,各项指标也基本达到了预定目标。 九、经费使用情况: 主要分为两部分: 第一, 由于我们都没有学过语音识别方面的知识,所以一开始我们就买了一些参考书和资料。 第二, 在软件部分初步成型后,在对小车进行改装时购买了一些电子元器件以及其他一些工具。 十、致谢: 感谢华为研究所为我们提供这样好的锻炼机会,我们从中学到了很多书本上学不到的知识。 感谢铁伟涛同学为我们提供方案支持。 感谢我的导师魏衡华老师和314实验室的所有负责人为我们提供PC机和其它硬件条件以及方便的实验环境。 感谢所有的评委老师在开题和中期评审中给我们提供很多宝贵的意见。
### 回答1: 语音情感识别是目前计算机科学领域的研究热点之一,它可以识别语音中表现出的情感。基于MATLAB(Matrix Laboratory)平台的语音情感识别主要采用信号处理技术和机器学习算法来实现。其中,信号处理技术主要包括语音分析、预处理、特征提取等方面,而机器学习算法则主要利用支持向量机、人工神经网络等模型进行情感分类。具体实现流程包括: 1. 语音采集及预处理:通过调用 MATLAB 中的录音函数实现语音采样,并通过滤波等方法进行信号预处理,以去除背景噪声、滤除杂音等。 2. 语音信号分析:基于MATLAB平台的语音信号分析工具箱,对信号进行分析,提取语音的基本特征,如基频、声道长度等。 3. 特征提取:基于上一步提取的语音基本特征,提取更高级别的特征,如音高、语速、语调等,以用于情感分类。 4. 情感分类:利用支持向量机、人工神经网络等机器学习算法建立情感分类模型,并对语音特征进行训练,以实现对语音情感的分类识别。 总的来说,基于MATLAB的语音情感识别能够对语音中所表现的情感进行准确的判断和识别,可以广泛应用于人机交互、情感识别等领域。 ### 回答2: 语音情感识别是一项非常有意义的研究领域,对于帮助人们更好地理解和识别语音中的情感信息有重要作用。近年来,利用机器学习算法和深度学习模型进行语音情感识别的研究越来越受到关注,并取得了不错的成果。 基于matlab的语音情感识别研究可以从以下几个方面入手: 1. 特征提取:语音情感识别的关键是如何提取有效的特征信息。常用的特征包括语调、语速、音量、音调等。在matlab中,可以使用信号处理工具箱对语音进行预处理,如去噪、降噪、滤波等操作,然后提取各种特征信息。 2. 模型建立:根据提取的特征信息,可以建立不同的机器学习或深度学习模型进行训练和预测。如支持向量机、朴素贝叶斯、决策树、神经网络等。其中,基于深度学习的模型,如卷积神经网络(CNN)、循环神经网络(RNN)和长短时记忆网络(LSTM)等,由于其在语音情感识别中的优异性能,被广泛应用。 3. 数据集获取:`语音情感识别的模型需要使用大量的训练和测试数据集进行训练和验证,可以从公开数据集中获取,如EmoDB、RAVDESS、IEMOCAP等。 综上所述,基于matlab的语音情感识别需要在特征提取、模型建立和数据获取等方面进行深入的研究和探索,以提高识别性能和效果。 ### 回答3: 语音情感识别是指通过分析人的语音信号,来判断说话者表达的情感状态,包括愉快、悲伤、愤怒等。基于matlab的语音情感识别主要是通过语音信号处理、特征提取、模式分类等方法来实现。 在语音信号处理中,主要是对语音进行去噪、预重、分帧、窗函数等处理,目的是为了使得后续的处理更准确。在特征提取中,需要提取出语音信号的频域特征和时域特征,如MFCC、LPC、Pitch、Energy等特征,可以通过matlab的语音处理工具箱中的函数进行提取。特征提取完成后,需要进行特征归一化,将特征缩放到同一尺度,减少特征之间的差异。 在分类模型的选择上,常见的方法包括SVM、KNN、神经网络等。基于matlab的语音情感识别主要采用的是SVM分类模型,其优点是对处理非线性数据具有较高的效率和准确性。 综合以上,基于matlab的语音情感识别主要分为以下几个步骤:语音信号处理、特征提取、特征归一化、模型训练、模型测试等。通过这些步骤的实现,可以对说话者的情感状态进行准确的判断和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值