LD3320语音识别模块分析

LD3320语音识别模块分析

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

识别原理

 声音分帧:
  声音是一种波,常见的mp3等格式都是压缩格式,必须转为非压缩的纯波形文件来处理,比如Windows PCM文件,也就是wav文件。wav文件李存储的除了一个文件头以外就是声音波形的一个个点。比如下图一个波形示例:
LD3320语音识别模块分析_第1张图片

  在语音开始识别之前,需要把首尾端的静音切除,降低对后续步骤造成的干扰。而这个静音切除的操作叫做VAD。
  对声音分析,即需要对声音进行分帧——把声音切开成一小段一小段,每一小段就是一帧。而分帧需要使用移动窗函数来实现。
  语音数据和视频数据不同,本没有帧的概念,但是为了传输与存储,我们采集的音频数据都是一段一段的。为了程序能够进行批量处理,会根据指定的长度(时间段或者采样数)进行分段,结构化为我们编程的数据结构,这就是分帧。
LD3320语音识别模块分析_第2张图片

 观察序列提取:
  分帧后,语音就变成了很多小段。但波形在时域上几乎没有描述能力,因此必须将波形作变换。常见的一种变换方法是提取MFCC特征,根据人耳的生理特性,把每一帧波形变成一个多维向量,可以简单地理解为这个向量包含了这帧语音的内容信息。这个过程叫做声学特征提取。实际应用中,这一步有很多细节,声学特征也不止有MFCC这一种,具体这里不讲。
  至此,声音就成了一个12行(假设声学特征是12维)、N列的一个矩阵,称之为观察序列,这里N为总帧数。观察序列如下图所示,图中,每一帧都用一个12维的向量表示,色块的颜色深浅表示向量值的大小。
 矩阵变文本:
基本概念:
  音素:单词的发音由音素构成。对英语,一种常用的音素集是卡内基梅隆大学的一套由39个音素构成的音素集,参见The CMU Pronouncing Dictionary‎。汉语一般直接用全部声母和韵母作为音素集,另外汉语识别还分有调无调,不详述。
  状态:这里理解成比音素更细致的语音单位。通常把一个音素划分成3个状态。

  三个步骤:①帧识别成状态②状态组合成音素③音素组合成单词
LD3320语音识别模块分析_第3张图片

   每个小竖条代表一帧,若干帧语音对应一个态,每三个状态组合成一个音素,若干个音素组合成一个单词。也就是说,只要知道每帧语音对应哪个状态了,语音识别的结果也就出来了。
  每帧音素对应的状态就看某帧对应哪个状态的概率最大。
LD3320语音识别模块分析_第4张图片

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

 隐马尔可夫模型(Hidden Markov Model,HMM)
  由于会有多余的音素对应状态影响最终结果,因此为了解决这个问题,提高准确率,使用HMM。
  该模型主要步骤:①构建状态网络, ②从状态网络中寻找与声音最匹配的路径。
  搭建状态网络,是由单词级网络展开成音素网络,再展开成状态网络。语音识别过程其实就是在状态网络中搜索一条最佳路径,语音对应这条路径的概率最大,这称之为“解码”。路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。
LD3320语音识别模块分析_第5张图片

  这里所说的累积概率,由三部分构成,分别是:
  观察概率:每帧和每个状态对应的概率;
  转移概率:每个状态转移到自身或转移到下个状态的概率;
  语言概率:根据语言统计规律得到的概率。
  其中,前两种概率从声学模型中获取,最后一种概率从语言模型中获取。语言模型是使用大量的文本训练出来的,可以利用某门语言本身的统计规律来帮助提升识别正确率。语言模型很重要,如果不使用语言模型,当状态网络较大时,识别出的结果基本是一团乱麻。这样基本上语音识别过程就完成了。

模块处理与应用

工作模式
普通模式:直接说话,模块直接识别。
按键模式:按键触发开始ASR进程。
口令模式:需要一级唤醒词(类似于苹果手机中的唤醒Siri,“嗨,Siri”。
LD3320语音识别模块分析_第6张图片

代码移植
 向LD模块中添加关键词
LD3320语音识别模块分析_第7张图片

 用户执行函数User_handle(nAsrRes); 处理语音识别结果
LD3320语音识别模块分析_第8张图片

 根据不同结果,串口打印不同的指令
LD3320语音识别模块分析_第9张图片

 MCU根据指令不同,执行不同的动作
  以JSON格式发送数据至串口,与语音识别模块相连的MCU接收此结果,然后对此字符串进行解析,进而得到当前识别的命令是什么,进而做相应的动作。
LD3320语音识别模块分析_第10张图片

 LDV7模块固件下载:

  • 打开编译后的.hex文件
    LD3320语音识别模块分析_第11张图片

  • 选对串口号,芯片型号后,选择“下载/编程”按钮,然后给STC单片机上电或者复位。
    LD3320语音识别模块分析_第12张图片

  • 发出语音,测试语音识别结果
    LD3320语音识别模块分析_第13张图片

最后输出

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

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

你可能感兴趣的:(学习整理资料,硬件)