简单语音信号识别的MATLAB仿真

简单语音信号识别的MATLAB仿真

摘要: 隐马尔可夫模型(HMM)作为描述语音信号的一种统计模型,在现代语音处理中获得了广泛应用。本文概述了基于HMM的语音识别技术,阐述了预处理,特征提取以及训练,识别的算法思想。最后利用MATLAB仿真设计了语音识别系统,实现了数字0—9的识别。

关键词:语音识别;特征提取;HMM;MATLAB;

1引言

语音识别技术为人们提供了一种更方便的人机交互,使人与计算机之间、人与人之间的通信更加方便、快捷。随着对语音识别技术的深入研究,它已经发展为一门跨越多个领域的综合学科,显示了巨大的应用前景。目前应用最为成功的语音识别系统大多是基于隐马尔可夫模型构造的。HMM在数学上是一个双重随机过程,一个是用具有有限状态数的马尔可夫链来模拟语音信号统计特性变化的隐含的随机过程,另一个是与马尔可夫链的每一个状态相关联的观测序列的随机过程,而人的言语过程实际上就是一个双重随机过程,语音信号本身是一个可观测的时变序列,它是由大脑根据语法知识和言语需要这些不可观测的状态发出的音素的参数流。因此HMM合理的模仿了这一过程,能够实现较高的语音识别能力。基于HMM进行语音识别的案例有:CMU的Kai-Fulee等研制的SPHINX语音识别系统成功的达到识别率96%,IBM构造的Tangora2000词语音识别系统得到95%的识别率。本文根据HMM的语音识别思想利用MATLAB编程对数字0—9进行识别。

2语音识别基础理论和算法

完整的语音识别系统可以大致分成3个部分:(1)语音信号的预处理和特征提取;(2)语音信号的建模;(3)语音信号的模式匹配。其系统结构框图如图1所示。从本质上讲,语音识别由训练和识别两个过程完成。将用作训练的语音信号预处理后提取语音特征、建立语音信号0—9的参考模型,此过程为训练过程;从待识别语音信号中提取语音特征,与参考模型进行匹配,通过比较和判决的过程称为识别过程。

图 1 语音识别系统结构框图

目前语音识别中的预处理主要是预加重、分帧和端点检测,常用的语音特征是基于Mel频率的倒谱系数(即MFCC参数),它能更好的提高系统的识别性能。语音的训练,识别均是基于HMM模型的3个基本问题求解展开的。

2.1语音预处理及特征提取

语音从嘴唇辐射会有6dB/oct的衰减,因此在对语音信号进行处理之前,希望能按6dB/oct的比例对信号加以提升(或加重),以使得输出的信号电平相近似。可采用公式(2.1)的差分方程所定义的数字滤波器进行预加重处理:

 (2-1)

式中,系数

常选取为0.9375。预加重可以直接利用MATLAB中的filter函数实现。

语音信号是准稳态信号,在处理时常把信号进行分帧,每帧长度约20ms~30ms,在这一区间内把语音信号看作为稳态信号,其频谱特性和某些物理特征参量可以近似认为是不变的。分帧一般采用交叠分段的方法,即帧与帧之间有交叠,交叠的目的是使得帧与帧之间过渡平滑,保持其连续性。

同时语音信号起止点的判别是语音识别系统必不可缺少的一部分,只有准确的找出语音段的起止点,才能对真正有效的语音信号进行分析,这样不仅减小了运算量,运算时间,同时有利于提高系统的识别率。通常采用的端点检测是基于短时能量和过零率的。短时能量是对分帧的信号的平均幅度求和。过零率是求出每帧信号过零的个数。整个端点检测分为四段:静音段,过渡段,语音段,结束段。用一个变量表示当前状态,根据能量和过零率与门限值的比较,判断下一个状态,从而更加准确的确定语音信号的起止段。

MFCC参数在大多数的语音识别系统中广泛应用。因为人耳对声音音调的感受与其频率并不成线性关系,倒谱系数更符合人耳的听觉特性。而且MFCC参数在噪声环境下表现出更强的鲁棒性,在非特定人语音识别方面有利于减小因说话人不同的差异可能带来的影响。MFCC参数其提取的基本过程如图2。这些处理均可以通过MATLAB的voice工具箱中的自带函数实现。即利用enframe,melcepst,melbankm等函数实现MFCC参数的提取。

图 2 MFCC特征参数提取流程图

2.2 HMM的三个基本问题

2.3 训练识别算法

在语音识别系统的设计中先进行参考模型训练,首先确定HMM的初始参数:N,M,A,B,π。再根据HMM的第三个问题用Baum-welch算法对参数进行调整重估。

初始状态的重估:

  (2-2)

状态转移矩阵的重估:

(2-3)

某个状态下可观测序列概率分布的重估:

(2-4)

将重估的模型作为新模型进行HMM第二个问题的求解,用Viterbi算法选择最佳的状态序列。多次对模型参数进行重估,直到产生观测序列O的概率

的变化足够小或者重估次数达到一定值后停止重估。则认定此模型是训练得到的参考模型,存储到语音信号参考模型库中。每个数字均训练出一个模型。

语音识别则是将输入的语音信号作为观测序列,对10个模型进行HMM第一个问题的求解即进行模式匹配,找出输出概率最大的。最大的对应的模型数字即为判别结果。

3 计算结果及分析

我们的语音信号识别是基于MATLAB编程仿真实现的。识别涉及到的大部分内容都有成熟的算法。我们的主要工作是理解各个模块的算法思想,根据实际的语音信号调整影响识别的参数并且创建主函数调用各个模块实现语音信号的识别。MFCC特征提取部分利用MATLAB工具箱中的自带函数,采用通常的语音识别参数设置即可。对HMM而言,选取好的初始模型是很有意义的。状态转移概率分布A的初始值一般对结果影响不大,可以随机选取或者均匀取值,只要满足概率要求即可。而某个状态下观测序列的概率分布B的选取对训练出的HMM影响较大,本仿真中采用“K均值分割”算法。选择好的初始状态分布

可以在一定程度上训练出更好的HMM,提高识别率,但是涉及复杂的遗传算法。此处不采用,仅选用最简单的

,认为第1个状态分布概率为1,其他状态为0。下面主要分析端点检测算法的有效性以及HMM中可观测序列数M和状态数N对识别结果的影响。

  1. 端点检测

首先对语音信号进行分帧,由于可认为当每帧长度约20ms~30ms的语音信号是稳态信号,采集的语音信号在MATLAB中的采样频率为12KHz,所以对应的帧长在240~360之间,考虑到FFT计算时的快速性,取帧长为256。每帧的间隔即增量取为80。端点检测中涉及的其他参数采用文献中通常设定值。

任选一个语音信号检测端点检测算法的有效性。图3表示的数字6的原始信号和经过端点检测后截断的信号。两条红线为端点检测算法判断得到的信号起止点,判断准确,并且消除了原始信号前端的小噪声。经过截断的信号在不丢失有效信息的情况下将计算量降低为原始的1/5。所以端点检测算法的各参数设置合理,算法有效,能够准确识别信号的起止点。

图 3 数字6的原始信号和经过端点检测后截断的信号

  1. 观测序列数M的选取

由图4可以看出,同样的语音数字信号3,说话人1和说话人2的发音波形是有明显区别的。所以训练的语音信号越多即观测序列数M越大,得到的语音信号特征才能够越丰富,才能使训练得到的HMM的模型参数具有一般性,保证识别准确率大。

图 4 说话人1和说话人2的数字3的发音信号波形

但是考虑实验的限制,采集的样本有限,计算量有限,所以M不可能无限大。我们分别选取了M为4以及M为6时进行识别,对比了识别的错误个数。由表格1可以得到观测序列数增大,可以有效的降低识别错误个数,提高识别率。所以仿真最终选择的训练样本数也就是M为6。

表格 1  在M=6和M=4的情况下,4个人的0—9语音信号的3次识别错误个数

第1次识别

第2次识别

第3次识别

第1个人

M=6

1

1

2

M=4

2

2

2

第2个人

M=6

1

1

2

M=4

2

1

2

第3个人

M=6

4

3

3

M=4

5

4

4

第4个人

M=6

2

3

2

M=4

3

3

1

  1. 状态数N的选取

参考文献中给出的状态数选取一般为4~10,并且指出状态数并不是越多越好。在M=6时,实验仿真对比了状态数N为4,5,6三种情况下识别的错误个数。由表格2得到增加了状态数并没有稳定的降低识别错误个数。但是状态数的增加会使得计算量变大,所以我们选择状态数N为4。

表格 2  在N=4,5,6三种情况下4个人的0—9语音信号的3次识别错误个数

第1次识别

第2次识别

第3次识别

第1个人

N=4

1

1

2

N=5

1

2

2

N=6

2

3

1

第2个人

N=4

1

1

2

N=5

2

2

2

N=6

2

2

2

第3个人

N=4

4

3

3

N=5

2

4

3

N=6

4

5

4

第4个人

N=4

2

3

2

N=5

4

3

3

N=6

2

3

2

在M=6,N=4的条件下,得到的识别准确率大约为79.1%。通过对比多次识别的结果,发现有的语音信号总是会识别错误,并且基本上都会错误的识别为一个固定的数字。比如第3个人的数字0发音总是被识别为数字9。对原语音信号分析得到原因是这个样本采集的效果差,0的发音太过短促。分析其他的错误识别原因也基本上如此。因此可以推断整个语音识别系统的设计在采集的语音信号质量比较高,即无噪声,信号完整的情况下识别准确率会很大,但是当语音质量下降时会极大的降低识别准确率。

4 结束语

本文基于HMM训练识别思想,利用MATLAB仿真,实现了简单语音信号0-9较高的识别率,为79.1%。通过本次语音识别系统的设计对HMM有了更深的理解,第一次真实的体会到复杂艰涩的数学理论应用于实践中的有效性。同时熟练了MATLAB的使用,了解了大量语音处理函数及其背后的算法思想。

参考文献

  1. 沈泉波, 韩慧莲. 基于 HMM 的语音识别系统的 Matlab 仿真[J]. 电声技术, 2012, 36(10): 56-57.
  2. 王一平. 用遗传算法改进 HMM 的语音识别算法研究[D]. 太原理工大学, 2007.
  3. 张仁志, 崔慧娟. 基于短时能量的语音端点检测算法研究[J]. 电声技术, 2005, 7: 52-54.
  4. 王华朋, 杨洪臣. 声纹识别特征 MFCC 的提取方法研究[J]. 中国人民公安大学学报: 自然科学版, 2008 (1): 28-30.
  5. 张杰,黄志同.语音识别中隐马尔可夫模型状态数的选取原则及研究[J].计算机工程与应用, 2000, 36(1): 67-69.
  6. 段红梅,汪军,马良河,等.隐马尔可夫模型在语音识别中的应用[J].工科数学, 2002, 18(6): 16-20.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3365.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

童年玩具:两款线绳陀螺

1,2图是过去用来安装明线电线的瓷夹。现在应该找不到了。过去安装电线后,家里留下了一些,拿来做线陀螺非常好。 因为它非常重,旋转起来很有力,那声音呼呼响。 3,4图是现在都能看到的一个圆木片,两个孔,穿绳…

AntFlow一款开源免费且自主可控的仿钉钉工作流引擎

在现代企业管理中,流程审批的高效性直接影响到工作的流畅度与生产力。最近,我发现了一个非常有趣的项目——AntFlow。这个项目不仅提供了一个灵活且可定制的工作流平台,还能让用户以可视化的方式创建和管理审批流程。 如果你寻找一个快速集成…

光纤资源APP开发及二次开发说明

光纤资源APP主要由以下几部分组成: 登录界面选择项目界面地图创建节点界面填写详细信息界面成端及端口表界面接续及接续表界面 其中1、2、4界面不需要涉及到ht,故用原生界面即可实现,但是3、5、6涉及到ht,而ht在app中是不兼容的…

鉴源实验室·如何通过雷达攻击自动驾驶汽车-针对点云识别模型的对抗性攻击的科普

01 引 言 随着自动驾驶技术的迅速发展,雷达和激光雷达等传感器在自动驾驶汽车中的作用愈发重要。它们能够生成3D点云数据,帮助车辆实时感知周围环境并做出安全决策。然而,尽管这些传感器对驾驶环境的检测非常精确,它们也面临一种…

Stable Diffusion(2024)Ai绘画AIGC最新安装包资源下载+自学教程

以下内容为整理的Stable Diffusion保姆级教学内容,请购买的资料的同学务必认真学习!按以下步骤操作快速掌握Stable Diffusion这个工具! Stable Diffusion(简称SD)是一款地表最强AI绘图工具(AIGC)之一,Stab…

基于单片机的宠物自动喂食系统的设计

本设计以STM32单片机为核心控制器,搭载了OLED显示屏作为显示交互模块,HX711称重模块获取食物重量,ESP8266与手机APP通信从而远程控制,PWM输出控制舵机模拟投喂食物开关打开,驱动继电器控制水泵打开加水,HC-…

vue+websocket实现即时聊天平台

目录 1 什么是websocket 2 实现步骤 2.1 导入依赖 2.2 编写代码 1 什么是websocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它主要用于在客户端和服务器之间建立持久的连接,允许实时数据交换。WebSocket 的设计目的是为了提高 Web 应用程序的…

Spring Boot框架:大学城水电管理自动化

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

关于三色标记算法的理解

三色标记算法是一种垃圾标记的算法,用于cms和g1。 它将对象分为3种颜色: 1.白色对象:未被标记的对象 2.灰色对象:自身被标记,引用的其它对象还没被标记 3.黑色对象:自身以及所引用的对象都被标记完 标记过…

Python Matplotlib:基本图表绘制指南

Python Matplotlib:基本图表绘制指南 Matplotlib 是 Python 中一个非常流行的绘图库,它以简单易用和功能丰富而闻名,适合各种场景的数据可视化需求。在数据分析和数据科学领域,Matplotlib 是我们展示数据的有力工具。本文将详细讲…

深入探讨SEO分析技巧助力网站流量提升

内容概要 在当前的数字化时代,SEO分析的重要性不言而喻。它是提升网站流量的关键工具,帮助站长有效地优化网站内容和结构。通过系统的SEO分析,站长可以掌握用户搜索行为和需求,从而制定出更具针对性的内容策略。例如,…

配置QINQ

1. 配置公司A和公司B的私有网络&#xff0c;创建对应的VLAN&#xff0c;并且接口的链路类型 S3的配置: 系统视图进入&#xff1a; <Huawei>system-view 设置设备名称为s3&#xff1a; [huawei]sysname s3 创建VLAN 10和20&#xff1a; [s3]vlan batch 10 20 配置Gigabit…

react 中配置@寻找文件

安装插件craco npm i -D craco/craco 创建 craco.config.js文件放在根目录和package.json同级 const path require(path)module.exports {webpack: {alias: {"": path.resolve(__dirname, "src")}} }创建 jsconfig.config.js文件放在根目录和package.js…

基于Qt的独立线程创建与多线程执行实验Demo

一、多线程与线程池的应用目的[1][4] &#xff08;一&#xff09;多线程 一个进程内多个线程并发执行的情况就叫多线程&#xff0c;每一个线程是一个独立的执行流。多线程是一种编程模型&#xff0c;它与处理器无关&#xff0c;与设计机制有关。 需要多线程的原因包括&#xf…

电能质量治理产品在分布式光伏电站的应用

1.概述 随着全球对可再生能源需求的不断增长&#xff0c;分布式光伏电站的建设与扩张正迅速发展。然而&#xff0c;在其运行过程中&#xff0c;分布式光伏电站遭遇了一系列挑战&#xff0c;包括企业关口计量点功率因数降低和谐波污染等问题。这些问题不仅影响了光伏电站的运行…

如何解决导入aioredis报错TypeError: duplicate base class TimeoutError的问题(轻松解决,亲测有效)

下面是根据你的要求撰写的文章: 文章目录 📖 介绍 📖🏡 演示环境 🏡📒 aioredis导包报错 📒📝 解决方案📝 小贴士⚓️ 相关链接 ⚓️📖 介绍 📖 最近在使用Python异步redis模块aioredis的时候遇到了一个错误,导包报错提示 TypeError: duplicate base cla…

@Excel若依导出异常/解决BusinessBaseEntity里面的字段不支持导出

今天发现所有实体类继承BusinessBaseEntity里面的这些通用字段不支持导出&#xff0c;debug时发现是这样&#xff1a; 导出效果 这里我把能查到的方法都汇总了&#xff0c;如果你也遇到这个异常&#xff0c;可以去逐步排查 1.先看库里有没有数据 2.看字段名是否对齐 3.所需要…

vue组件在项目中的常用业务逻辑(2)

完成一个项目的模块总体分为四步&#xff1a; 一、先静态页面 静态组件拆分出来 二、发请求(API) 三、vuex三连环 1.导入api里的search模块请求 2.捞那个请求的数据 先用async和await 再传值给result&#xff0c;添加空对象&#xff0c;派发actions&#xff1a; 3.在mutatio…

气膜球幕展览馆:引领展示新风潮,震撼视界—轻空间

随着展览行业的不断发展&#xff0c;越来越多的创意场地应运而生&#xff0c;而气膜球幕展览馆凭借其独特的球形外观和创新的结构设计&#xff0c;迅速成为展览和活动行业中的新宠。无论是艺术展览、品牌展示&#xff0c;还是各种大型活动&#xff0c;气膜球幕展览馆都以其极具…