失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > LD3320语音识别模块分析

LD3320语音识别模块分析

时间:2021-05-05 09:30:21

相关推荐

LD3320语音识别模块分析

LD3320语音识别模块分析

LD3320是非特定人语音识别芯片,即语音声控芯片。最多可以识别50条预先内置的指令。

识别原理

 声音分帧:

声音是一种波,常见的mp3等格式都是压缩格式,必须转为非压缩的纯波形文件来处理,比如Windows PCM文件,也就是wav文件。wav文件李存储的除了一个文件头以外就是声音波形的一个个点。比如下图一个波形示例:

在语音开始识别之前,需要把首尾端的静音切除,降低对后续步骤造成的干扰。而这个静音切除的操作叫做VAD。

对声音分析,即需要对声音进行分帧——把声音切开成一小段一小段,每一小段就是一帧。而分帧需要使用移动窗函数来实现。

语音数据和视频数据不同,本没有帧的概念,但是为了传输与存储,我们采集的音频数据都是一段一段的。为了程序能够进行批量处理,会根据指定的长度(时间段或者采样数)进行分段,结构化为我们编程的数据结构,这就是分帧。

 观察序列提取:

分帧后,语音就变成了很多小段。但波形在时域上几乎没有描述能力,因此必须将波形作变换。常见的一种变换方法是提取MFCC特征,根据人耳的生理特性,把每一帧波形变成一个多维向量,可以简单地理解为这个向量包含了这帧语音的内容信息。这个过程叫做声学特征提取。实际应用中,这一步有很多细节,声学特征也不止有MFCC这一种,具体这里不讲。

至此,声音就成了一个12行(假设声学特征是12维)、N列的一个矩阵,称之为观察序列,这里N为总帧数。观察序列如下图所示,图中,每一帧都用一个12维的向量表示,色块的颜色深浅表示向量值的大小。

 矩阵变文本:

基本概念:

音素:单词的发音由音素构成。对英语,一种常用的音素集是卡内基梅隆大学的一套由39个音素构成的音素集,参见The CMU Pronouncing Dictionary‎。汉语一般直接用全部声母和韵母作为音素集,另外汉语识别还分有调无调,不详述。

状态:这里理解成比音素更细致的语音单位。通常把一个音素划分成3个状态。

三个步骤:①帧识别成状态②状态组合成音素③音素组合成单词

每个小竖条代表一帧,若干帧语音对应一个态,每三个状态组合成一个音素,若干个音素组合成一个单词。也就是说,只要知道每帧语音对应哪个状态了,语音识别的结果也就出来了。

每帧音素对应的状态就看某帧对应哪个状态的概率最大。

而概率的来源涉及到“声学模拟”,里面存了一大堆参数,通过这些参数就可以找到帧对应状态的概率。同时这些参数来源于模型训练。

 隐马尔可夫模型(Hidden Markov Model,HMM)

由于会有多余的音素对应状态影响最终结果,因此为了解决这个问题,提高准确率,使用HMM。

该模型主要步骤:①构建状态网络, ②从状态网络中寻找与声音最匹配的路径。

搭建状态网络,是由单词级网络展开成音素网络,再展开成状态网络。语音识别过程其实就是在状态网络中搜索一条最佳路径,语音对应这条路径的概率最大,这称之为“解码”。路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。

这里所说的累积概率,由三部分构成,分别是:

观察概率:每帧和每个状态对应的概率;

转移概率:每个状态转移到自身或转移到下个状态的概率;

语言概率:根据语言统计规律得到的概率。

其中,前两种概率从声学模型中获取,最后一种概率从语言模型中获取。语言模型是使用大量的文本训练出来的,可以利用某门语言本身的统计规律来帮助提升识别正确率。语言模型很重要,如果不使用语言模型,当状态网络较大时,识别出的结果基本是一团乱麻。这样基本上语音识别过程就完成了。

模块处理与应用

工作模式

普通模式:直接说话,模块直接识别。

按键模式:按键触发开始ASR进程。

口令模式:需要一级唤醒词(类似于苹果手机中的唤醒Siri,“嗨,Siri”。

代码移植

 向LD模块中添加关键词

 用户执行函数User_handle(nAsrRes); 处理语音识别结果

 根据不同结果,串口打印不同的指令

 MCU根据指令不同,执行不同的动作

以JSON格式发送数据至串口,与语音识别模块相连的MCU接收此结果,然后对此字符串进行解析,进而得到当前识别的命令是什么,进而做相应的动作。

 LDV7模块固件下载:

打开编译后的.hex文件

选对串口号,芯片型号后,选择“下载/编程”按钮,然后给STC单片机上电或者复位。

发出语音,测试语音识别结果

最后输出

{“VoiceCommandCode”:0}收到{“VoiceCommandCode”:1}“报时吧”命令识别成功{“VoiceCommandCode”:0}收到{“VoiceCommandCode”:2}“现在时间”命令识别成功{“VoiceCommandCode”:0}收到{“VoiceCommandCode”:3}“报时”命令识别成功{“VoiceCommandCode”:0}收到{“VoiceCommandCode”:4}“今天温度”命令识别成功{“VoiceCommandCode”:0}收到{“VoiceCommandCode”:6}“当前湿度”命令识别成功{“VoiceCommandCode”:0}收到{“VoiceCommandCode”:7}“当前天气”命令识别成功

引用:LD3320语音识别模块:LDV7模块使用详解

如果觉得《LD3320语音识别模块分析》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。