新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于STM32的嵌入式语音识别模块设计

基于STM32的嵌入式语音识别模块设计

作者: 时间:2011-03-23 来源:网络 收藏


3 软件系统
软件系统的主要包括3部分:主控单元的操作系统μC/OS-II移植、LD3320的程序、对话管理单元的设计。
3.1 操作系统μC/OS-II移植
μC/OS-II是一个源码公开、可移植、可固化、可裁剪、占先式的实时多任务操作系统。它是专门为计算机的应用设计的,绝大部分代码采用C语言编写,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可至2 KB。在μC/OS-II中,任务的概念尤为重要,它是可剥夺型的内核,因此任务优先级的划分至关紧要。分层化和化的设计理念,整个系统任务的划分如表1所列。

本文引用地址:https://www.eepw.com.cn/article/150932.htm

f.jpg


表1中除OSTaskStat和OSTaskIdle任务为系统自带,其他7个任务均为用户创建。App_TaskStart是系统的第一个任务,对系统时钟和底层设备进行初始化,创建所有事件和其他各项用户任务,并对系统状态进行监测;App_TaskSR完成;App_TaskCmd完成对话集中命令的解析和执行,并通过USART1向外发送;App_TaskCom作为外围扩展任务,通过USART2向外发送指令或数据,负责控制外围扩展设备,如合成设备等;
App_TaskUpdate通过解析USART1接收的命令和数据进行对话集的更新;App_TaskPB是按键扫描任务,负责检测3个独立按键,分为短按和长按检测;App_TaskLed驱动4个LED指示灯,指示当前工作状态。
3.2 语音程序设计
语音识别程序的设计,参考了LD332X开发手册,本文中采用中断方式工作,其工作流程分为通用初始化一语音识别用初始化-写入识别列表-开始识别-响应中断。
①通用初始化和语音识别用初始化。在初始化程序里,主要完成软复位、模式设定、时钟频率设定、FIFO设定。
②写入识别列表。列表的规则是,每个识别条目对应一个特定的编号(1个字节),编号可以相同,可以不连续,但是数值要小于256(00H~FFH)。本芯片最多支持50个识别条目,每个识别条目是标准普通话的汉语拼音(小写),每2个字(汉语拼音)之间用一个空格间隔。本文中采取了连续不同编号的识别条目,表2是简单的示例。

g.jpg


③开始识别。设置几个相关的寄存器,即可开始语音的识别。图4是相关的流程。ADC通道即为麦克风输入通道,ADC增益也就是麦克风音量,可设定值00H~7FH,建议设置值为40H~6FH,值越大代表MIC音量越大,识别启动越敏感,但可能带来更多误识别;值越小代表MIC音量越小,需要近距离说话才能启动识别功能,好处是对远处的干扰语音没有反应。本文中设定值为43H。

h.jpg


④响应中断。如果麦克风采集到声音,不管是否识别出正常结果,都会产生一个中断信号。而中断程序要根据寄存器的值分析结果。读取BA寄存器的值,可以知道有几个候选答案,而C5寄存器里的答案是得分最高、最可能正确的答案。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭