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单片机上电或者复位。
-
发出语音,测试语音识别结果
最后输出文章来源:https://www.toymoban.com/news/detail-454808.html
- {“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模块使用详解文章来源地址https://www.toymoban.com/news/detail-454808.html
到了这里,关于LD3320语音识别模块分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!