热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LD3320的嵌入式语音识别系统的应用

摘要:语音交互系统是比较人性化的人机操作界面,它需要语音识别系统的支持。LD3320就是这样一款语音识别芯片。介绍了该芯片的工作原理及应用,

摘要:语音交互系统是比较人性化的人机操作界面,它需要语音识别系统的支持。LD3320就是这样一款语音识别芯片。介绍了该芯片的工作原理及应用,给出了LD3320与微处理器的硬件接口电路及软件程序。随着MCU的不断出现,以MCU为的嵌入式语音交互系统会有非常好的应用前景。

1 概述

在现代社会,"懒人科技"大行其道。当面临众多繁琐的按键操作和菜单选择的时候,简单地说出指令,是有人情味的人机操作界面。让身边的各种电子设备可"听从"人类的语音,是从电影"星球大战"就开始的科技发展目标。虽然目前的科技还不能做到让计算机完全理解人类的所有自然语音,但是可以在一定程度上实现这个梦想。

2 特定人语音识别技术及原理

特定人语音识别(ASR,Auto Speech Recognition)技术是基于"关键词语列表"的识别技术,它是对大量的语音数据(相当于对数千人采集的数万小时的有效声音数据)经语言学家语音模型分析,建立数学模型,并经过反复训练提取基元语音的细节特征,以及提取各基元间的特征差异,得到在统计概率化意义上的各个基元语音特征,才由资深工程师将算法以及语音模型转换成硬件芯片并应用在嵌入式系统中。

ASR技术每次识别的过程就是把用户说出的语音内容,通过频谱转换为语音特征,再将这个转换后的语音特征和"关键词语列表"中的条目一一进行匹配,匹配的一条即作为识别结果。比如ASR技术在语音控制的手机应用中,这个"关键词语列表"的内容就是电话本中的人名、手机的菜单命令或手机存储卡中的歌曲名字。不论这个列表的条目内容是什么,只需要用户设置相关的寄存器,就可以把相应的待识别条目内容以字符形式传递给识别引擎。

由此可见,语音识别芯片完成的工作就是:把MIC(麦克风)输入的声音进行频谱分析后提取语音特征,再和关键词语列表中的关键词语进行对比匹配,找出得分的关键词语作为识别结果输出。

通常基于ASR技术的语音识别芯片能在两种情况下给出识别结果:

①外部送入预定时间的语音数据(比如5 s的语音数据),芯片对这些语音数据运算分析后,给出识别结果。

②外部送入语音数据流,语音识别芯片通过端点检测(VAD,Voice Activity Detection)技术检测出用户停止说话,把用户开始说话到停止说话之间的语音数据进行运算分析后,给出识别结果。

对于种情况,可以理解为设定了一个定时录音(如5 s的语音数据),芯片在5 s后会停止把声音送入识别引擎,并且根据已送入引擎的语音数据计算出识别结果。

对于第二种情况,需要了解VAD的工作原理:VAD技术是在一段语音数据流中,判断出哪个时间点是人声音的开始,哪个时间点是人声音的结束。判断的依据是,在背景声音的基础上有了语音发音,则视为声音的开始。而后,检测到一段持续时间的背景音(比如600 ms),则视为人声说话结束。通过VAD判断出人声说话的区域后,语音识别芯片会把这期间的声音数据进行识别处理,计算出识别结果。

除了以上两种情况外,语音识别算法无法"主动"地判断出是否识别出了一个结果。这是因为,在计算过程中的任何时刻,语音识别器都会对已送人识别芯片的声音数据进行分析,并根据匹配程度为识别列表中的关键词语进行打分,匹配的打分。但是,由于识别算法不知道用户后面是否还继续说话,所以无法主动地判断已经识别出的结果。

3 语音识别芯片LD3320的工作原理

3.1 语音识别系统原理结构

LD3320语音识别芯片采用的就是ASR技术,图1就是由LD3320和单片机(或嵌入式系统)组成的语音识别系统原理框图。图中给出了LD3320的内部原理结构,本文中选用的MCU是STC10L08XE单片机。

2012222111126194.jpg

图1 语音识别系统原理框图

语音识别芯片LD3320是ICRoute公司的产品,它采用ASR技术,提供了一种脱离按键、键盘、鼠标、触摸屏等GUI操作方式且基于语音的用户界面VUI(Voice User Interface),使得用户对该系统的操作更简单、快速和自然。

用户只需要把识别的关键词语以字符串的形式传送进芯片,即可以在下次识别中立即生效。比如,用户在51等主控MCU的编程中,简单地通过设置芯片的寄存器,把诸如"你好"这样的识别关键词语的内容动态地传入芯片中,芯片就可以识别所设定的关键词语了。每个关键词语可以是单字、词组、短句或者任何的中文发音的组合。基于LD3320的语音识别系统可以随着使用流程,在运行时动态地更改关键词语列表的内容,这样可以用一个系统支持多种不同的场景,同时也不需要用户作任何的录音训练。

3.2 LD3320的用户使用模式

LD3320有两种用户使用模式,即"触发识别模式"和"循环识别模式".用户可以通过编程,设置两种不同的用户使用模式。

触发识别模式:系统的主控MCU在接收到外界一个触发后(比如用户按动某个按键),启动LD3320芯片的一个定时识别过程(比如5 s),要求用户在这个定时过程中说出要识别的语音关键词语。这个过程结束后,需要用户再次触发才能再次启动一个识别过程。

循环识别模式:系统的主控MCU反复启动识别过程。如果没有人说话就没有识别结果,则每次识别过程的定时到时后再启动一个识别过程;如果有识别结果,则根据识别作相应处理后(比如播放某个声音作为回答)再启动一个识别过程。

4 语音识别系统软硬件设计

4.1 硬件系统设计

由图l可知,由LD3320组成的语音识别系统硬件有单片机(或嵌入式系统)及LD33202.图2和图3分别是由单片机STC10L08XE构成的主控芯片和由LD3320A构成的语音识别主系统。

2012222111126963.jpg

图2 STC10L08XE构成的主控芯片

2012222111126709.jpg

图3 LD3320A构成的语音识别主系统

4.2 软件系统设计

语音识别的操作顺序是:先进行语音识别的初始化,然后写入识别列表,系统即开始进行语音识别,并准备好中断响应函数,打开中断允许位。这里如果不用中断方式,也可以通过查询方式工作。在"开始识别"后,读取寄存器B2H的值,如果为21H就表示有识别结果产生。

下面是语音识别的初始化程序段,按照以下序列来设置寄存器:

2012222111126108.jpg

初始化后是写入识别列表。识别列表的规则是:每个识别条目对应一个特定的编号(1个字节),不同识别条目的编号可以相同,而且不用连续。LD3320芯片多支持50个识别条目,每个识别条目是标准普通话的汉语拼音(小写),每2个字(汉语拼音)之间用1个空格间隔。表1是一个简单的例子。

2012222111126785.jpg

图4是由LD3320组成的语音识别系统主程序流程,图5是语音识别系统中断服务程序流程。

2012222111126626.jpg

图4 语音识别系统主程序流程图

2012222111126810.jpg

图5 语音识别系统中断程序流程

5 声控电视遥控器

声控电视遥控器有用的地方是,在更换频道时可以直接说出频道名称,而不是去记忆频道名称和频道数字的联系。同时,在使用电视遥控器时,遥控器是用电池工作,不能让识别芯片一直处于工作状态。因此在设计时,可以在遥控器上设置一个大一点的按键,用户在使用时,按一下这个按键,启动LD3320语音识别芯片,此时可以播放一声"嘀"的提示音,然后在限定的时间内(如5s),接收用户的语音命令,并给出识别结果。比如用户说"体育台",识别芯片把识别结果提供给遥控器的主控MCU.随后遥控器的主控MCU就根据事先设定好的对应关系,发出对应频道的红外编码,实现换台。可以不加确认过程直接换台。图6为声控电视遥控器工作流程。

2012222111126989.jpg

图6 声控电视遥控器工作流程

结语

这种语音识别系统也容易引起误识别,如当用户说的内容不在识别列表内时,必然会引起误识别。为了克服这些缺点,降低误识别率,可在设定好要识别的关键词语后,再添加一些与识别列表内的单词有联系的任意其他词汇,用来吸收错误识别,从而达到降低误识别率的目的。

由LD3320组成的语音识别系统有很广泛的应用,如语音控制的点歌系统、语音控制的手机、音控智能导航仪、音控智能家电产品等。


推荐阅读
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有