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

发布者:trendsetter9最新更新时间:2012-02-17 来源: eefocus关键字:ARM  语音识别  对话管理  μCOS-II 手机看文章 扫描二维码
随时随地手机看文章

介绍了一种以ARM为核心的嵌入式语音识别模块的设计与实现。模块的核心处理单元选用ST公司的基于ARM Cortex-M3内核的32位处理器STM32F103C8T6。本模块以对话管理单元为中心,通过以LD3320芯片为核心的硬件单元实现语音识别功能,采用嵌入式操作系统μC/OS-II来实现统一的任务调度和外围设备管理。经过大量的实验数据验证,本文设计的语音识别模块具有高实时性、高识别率、高稳定性的优点。

服务机器人以服务为目的,因此人们需要一种更方便、更自然、更加人性化的方式与机器人交互,而不再满足于复杂的键盘和按钮操作。基于听觉的人机交互是该领域的一个重要发展方向。目前主流的语音识别技术是基于统计模式。然而,由于统计模型训练算法复杂,运算量大,一般由工控机、PC机或笔记本来完成,这无疑限制了它的运用。嵌入式语音交互已成为目前研究的热门课题。

嵌入式语音识别系统和PC机的语音识别系统相比,虽然其运算速度和内存容量有一定限制,但它具有体积小、功耗低、可靠性高、投入小、安装灵活等优点,特别适用于智能家居、机器人及消费电子等领域。

模块整体方案及架构

语音识别的基本原理如图1所示。语音识别包括两个阶段:训练和识别。不管是训练还是识别,都必须对输入语音预处理和特征提取。训练阶段所做的具体工作是通过用户输入若干次训练语音,经过预处理和特征提取后得到特征矢量参数,最后通过特征建模达到建立训练语音的参考模型库的目的。而识别阶段所做的主要工作是将输入语音的特征矢量参数和参考模型库中的参考模型进行相似性度量比较,然后把相似性最高的输入特征矢量作为识别结果输出。这样,最终就达到了语音识别的目的。

现有的语音识别技术按照识别对象可以分为特定人识别和非特定人识别。特定人识别是指识别对象为专门的人,非特定人识别是指识别对象是针对大多数用户,一般需要采集多个人的语音进行录音和训练,经过学习,达到较高的识别率。

基于现有技术开发嵌入式语音交互系统,目前主要有两种方式:一种是直接在嵌入式处理器中调用语音开发包;另一种是嵌入式处理器外围扩展语音芯片。第一种方法程序量大,计算复杂,需要占用大量的处理器资源,开发周期长;第二种方法相对简单,只需要关注语音芯片的接口部分与微处理器相连,结构简单,搭建方便,微处理器的计算负担大大降低,增强了可靠性,缩短了开发周期。

语音识别技术在国内外的发展十分迅速。目前国内在PC应用领域,具有代表性的有:科大讯飞的InterReco2.0、中科模式识别的Pattek ASR3.0、捷通华声的jASRv5.5;在嵌入式应用领域,具有代表性的有:凌阳的SPCE061A、ICRoute的LD332X、上海华镇电子的WS-117。

本文的语音识别方案是以嵌入式微处理器为核心,外围加非特定人语音识别芯片及相关电路构成。语音识别芯片选用ICRoute公司的LD33 20芯片。

硬件电路设计

如图2所示,硬件电路主要包括主控核心部分和语音识别部分。语音进入语音识别部分后,将处理过的数据并行传输到主控制器,主控制器经过处理后,发送命令数据到USART,USART可用于扩展外围串行设备,如语音合成模块等。

主控制器电路

本文的主控制器选用的是ST公司的STM32F103C8T6芯片。该芯片基于ARM Cottex-M3 32位的RISC内核,工作频率最高可达72 MHz,内置高速存储器(64 KB的闪存和20 KB的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。STM32系列提供了全新的32位产品选项,结合了高性能、实时、低功耗、低电压等特性,同时保持了高集成度和易于开发的优势,将32位MCU世界的性能和功效引向一个新的级别。

关键字:ARM  语音识别  对话管理  μCOS-II 引用地址:基于STM32的嵌入式语音识别模块设计

上一篇:富士通半导体扩充FM3家族32位微控制器产品阵容
下一篇:基于LPC2294的CAN总线主节点设计

推荐阅读最新更新时间:2024-03-16 12:53

基于MDK-ARM创建STM32L-DISCOVERY Project
本文只针对使用MDK-ARM建立软件开发环境,并基于STM32L1xx_StdPeriph_Lib_V1.1.1库及其Examples,其余情况可参考UM1451 User manual Getting started with software development toolchains for the STM32L-DISCOVERY board (后续会补充一般情况下创建STM32L MDK Project说明) 1. 安装Keil uVision4 2. 下载获得STM32L1xx_StdPeriph_Lib_V1.1.1.zip压缩包,解压到H:\STM32L1xx_StdPeriph_Lib_V1.1.1,内
[单片机]
基于MDK-<font color='red'>ARM</font>创建STM32L-DISCOVERY Project
第1天-ARM汇编指令LSL/LSR/ASL/ASR
移位 LSL ASL LSR ASR ROR RRX ARM 处理器组建了可以与数据处理指令(ADC、ADD、AND、BIC、CMN、CMP、EOR、MOV、MVN、ORR、RSB、SBC、SUB、TEQ、TST)一起使用的桶式移位器(barrel shifter)。你还可以使用桶式移位器影响在 LDR/STR 操作中的变址值。 译注:移位操作在 ARM 指令集中不作为单独的指令使用,它是指令格式中是一个字段,在汇编语言中表示为指令中的选项。如果数据处理指令的第二个操作数或者单一数据传送指令中的变址是寄存器,则可以对它进行各种移位操作。如果数据处理指令的第二个操作数是立即值,在指令中用 8 位立即值和 4 位循环移位来
[单片机]
ARM - STM32 使用11.0592MHz晶振
这里探究了以下stm32 外部时钟的用法。 这里用的是stm32f103rbt6,usart2,外部晶振11.0592Mhz。 先看时钟树吧 这是上图的配置: void RCC_Init(void) { ErrorStatus HSEStartUpStatus; RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); //设置外部高速晶振(HSE) HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待HSE起振 if(HSEStartUpStatus == SUCCESS) //SUCCESS:HSE晶振稳定且就绪 { R
[单片机]
<font color='red'>ARM</font> - STM32 使用11.0592MHz晶振
Ubuntu配置安装ARM Linux交叉编译环境完整流程
今天花了一整天的时间来解决insight 的端口无法修改的问题,虽然是解决了,但是也付出了很大的代价,花了一整天时间+毁掉了以前的系统。所以来重新安装配置arm linux交叉编译环境。顺便记下..... 1.虚拟机安装ubuntu9.10,这个很简单了不需累述了,安装前vmware会让你选择划分多大的硬盘,其实这个并不会是真的立即分离出那么大的空间出来,即使你目前只剩下5g,你也可以要求划分30g,你指定的只是一个上限值,最好设置大一点,以免以后不够用又重新配置。虚拟机安装好了第一件事自然是安装vmware tool了,然后就是选择好ubuntu的软件源,中国的cn99很不错,apt-get update更新下
[单片机]
arm-linux-gcc.4.3.2交叉编译器编译linux-3.0.1内核
1.我这里的内核是forlinx 的FORLINX_linux-3.0.1.tar.gz内核,把这个文件准备好(拷贝到 linux os 的forlinx文件夹下面),这个文件不小117M,用xftp花费了我20秒时间。 2.然后解压缩 命令tar zxf FORLINX_linux-3.0.1.tar.gz, 这里我看出来了已经解压缩成功了 在编译内核之前,我先安装一个工具可能会用到,那就是libncurses5方便使用make menuconfig 命令,执行命令即可:apt-get install libncurses5-dev 下面就是编译内核过程了,之前见别人编译的时间挺长的,我倒要看看需要多少时间。 执行命令
[单片机]
用<font color='red'>arm</font>-linux-gcc.4.3.2交叉编译器编译linux-3.0.1内核
轻松学ARM系列之I2C总线
今天我们来一起学习,arm裸机中对I2C设备学习。包括GPIO,IIC控制器学习。 一、总体架构图 二、I2C操作的一般步骤 2.1 查看s5pv210开发板的I2C相关的硬件原理图 开发板上IIC实际连接电路,AT24C02为EEPROM,大小为2k位,256字节 核心板对应的原理图 2.2 设置GPIO寄存器为I2C功能 配置GPD1CON 和 GPD1CON 为I2C 功能: GPDCON.GPD1CON = (GPDCON.GPD1CON & (~0xff))| 0x22 2.3 查看I2C控制器相应的章节,对相关的寄存器进行配置 选择设备的发送方式,主发射,从接收模式(这
[单片机]
轻松学<font color='red'>ARM</font>系列之I2C总线
arm LPC210X GPIO操作有关的寄存器
通常的名称 描述 属性 复位值 PORT0的地址和名称 IOPIN GPIO的管脚值。不管当前管脚的方向如何,都能从此寄存器读取GPIO的状态。 读/写 NA 0xE002 8000 IO0PIN IOSET GPIO置高电平寄存器。写1则相应的管脚输出高电平。 读/写 0x0000 0000 0xE002 8004 IO0SET IODIR GPIO方向设置寄存器。控制各个引脚的方向。 读/写 0x0000 0000 0xE002 8008 IO0DIR IOCLR GPIO置低电平寄存器。写1则相应的管脚输出低电平。 只写 0x0000 0000 0xE002 800C IO0CLR GPIO有两种工作方式
[单片机]
语音识别技术的工作原理 语音识别技术的工作流程
语音是人类最自然的交互方式。计算机发明之后,让机器能够“听懂”人类的语言,理解语言中的内在含义,并能做出正确的回答就成为了人们追求的目标。我们都希望像科幻电影中那些智能先进的机器人助手一样,在与人进行语音交流时,让它听明白你在说什么。语音识别技术将人类这一曾经的梦想变成了现实。语音识别就好比“机器的听觉系统”,该技术让机器通过识别和理解,把语音信号转变为相应的文本或命令。 语音识别技术,也被称为自动语音识别AutomaTIc Speech RecogniTIon,(ASR),其目标是将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。语音识别就好比“机器的听觉系统”,它让机器通过识别和理解,把语音
[嵌入式]
<font color='red'>语音识别</font>技术的工作原理 <font color='red'>语音识别</font>技术的工作流程
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved