该设计运用三星公司的 S3C2440,结合 ICRoute 公司的高性能语音识别芯片
LD3320,进行了语音识别系统的硬件和软件设计。在嵌入式 Linux 操作系统下,
运用多进程机制完成了对语音识别芯片、超声波测距和云台的控制,并将语音识
别技术应用于多角度超声波测距系统中。通过测试,系统可以通过识别语音指令
控制测量方向,无需手动干预,最后将测量结果通过语音播放出来。
1.引言
语言是人类传播信息的重要手段,语音识别则是实现语音控制的关键技术。
采用嵌入式语音识别技术使得设备具有功耗低、使用简便、灵活等优点,摆脱了
复杂按键和按钮的困扰,在服务机器人、智能家居及消费电子等领域发挥着重要
作用。
2.系统构成与原理
语音识别主要包括两个阶段:训练阶段和识别阶段。在训练或识别过程中,
都必须对输入语音进行预处理和特征提取。训练阶段通过用户输入的若干次训练
语音,经过预处理和特征提取后得到特征参数,最后通过特征参数建模,进而建
立训练语音的参考模型库。而识别阶段是将输入语音的特征矢量参数和参考模型
库中的参考模型进行相似性度量,然后把相似度最高的输入特征矢量作为识别结
果输出,从而达到语音识别目的,如图 1 所示。
语音识别技术可分为:特定人识别和非特定人识别两种。特定人识别是指需
要对待识别人的语音进行采集训练,识别对象为专门的人;非特定人识别是指识
别对象为大多数用户,一般要采集多个人的语音进行录音、训练和学习,从而达
到较高的识别率。
在实际应用中,现代技术开发嵌入式语音识别有两种实现方式:调入嵌入式
语音开发包和外扩语音识别芯片。本文的语音识别系统方案是以嵌入式处理器
S3C2440 为核心,外扩非特定人语音识别芯片 LD3320,并将超声波测距模块和云
台相结合作为系统的机械执行机构。系统测量过程如下:首先根据语音指令控制
两自由度云台的位姿,使超声波探测器指向特定方向,然后开启超声波探测器,
测量出前方障碍物距离,最后将测量结果转化为可以播放的二进制数据流,通过
LD3320 的播放功能完成数据的播放。
3.硬件电路设计方案
硬件电路主要包括语音识别部分、主控部分、超声波测距部分和舵机控制部
分,如图 2 所示。处理器为三星公司的 S3C2440,系统主频最高可达 533MHz,支
持 SPI、I2C、UART 等接口,能够满足控制系统的需求。主控芯片 S3C2440 通过
SPI 总线完成对语音识别模块的读写操作,超声波测距部分和舵机控制部分由处
理器的 GPIO 进行统一控制。
3.1 语音识别电路设计
为了使系统能够识别操作人员发出的语音指令,设计中采用了由 ICRoute
公司设计生产的非特定人语音识别芯片 LD3320,它集成了语音识别处理电路和
一些外部电路,包括 AD、DA 转换器、麦克风接口、声音输出接口等,不需要外
接任何的辅助芯片如 Flash、RAM。在主控制器的控制下,可以识别出预先添加
到识别列表中的内容。设计中参考了 ICRoute 发布的 LD3320 数据手册,图中
LD3320 的 P0、P1、P2 引脚通过 SPI 接口与嵌入式处理器相接,控制信号 WRB、
CSB、RSTB 以及中断返回信号引脚 INTB 与处理器 S3C2440 直接相连,如图 3 所
示。
3.2 超声波测距和舵机控制电路设计
超声波测距原理相对比较成熟,系统中采用超声波测距模块 HC-SR04。该模
块有两个 TTL 电平通信引脚,兼容 3.3V 电平。其中,控制端口 Trig 发一个 10us
以上的高电平,接收端口 Echo 将输出与距离成正比的高电平信号。当 Echo 有高
电平输出时就开启处理器定时器,当端口电平跳变为低电平时关闭定时器,根据
定时器的值可计算得到障碍物的距离。其中,控制端口 Trig 和接收端口 Echo
分别接至处理器的 GPG9、GPG6 引脚。
超声波测距模块的感应角度小于 15°,为了扩大测距的感应角度范围,将
超声波测距模块安装在两自由度云台上,其中,舵机为 SG90(9G),旋转角度为
180°。处理器通过 GPB0 和 GPB1 分别控制两个舵机以实现云台的旋转,以测量
不同方向的障碍物,如图 4 所示。
4.软件设计方案
系统软件基于嵌入式 Linux 操作系统,实现了语音识别、语音播放、超声波
测距和舵机控制等任务,使用 fock 机制为每项任务分配独立的进程,使系统可
以进行多任务处理。针对不同功能模块编写了相应的底层驱动程序,为上层应用
程序提供了调用接口。
系统工作流程如下:处理器通过 SPI 总线对语音识别芯片 LD3320 进行通用
初始化,使语音识别芯片进入循环识别模式,系统处理器反复启动语音识别过程。
如果有识别结果,则根据识别作相应处理后(比如播放某个声音作为应答)再启
动下一个识别过程。处理器通过 SPI 总线读取 C5 寄存器的识别结果并分析,将
语音命令转换为超声波测距和舵机的控制信号,完成多方位测距任务,如图 5
所示。
4.1 语音识别功能程序设计
语音识别芯片 LD3320 的特色是兼有语音识别和 MP3 播放的两项功能,在功
能切换的时候,必须进行通用初始化,对芯片进行一系列的设置。
语音识别功能的驱动程序工作流程为通用初始化à语音识别用初始化→写入
识别列表→开始识别→响应识别中断。为了提高识别成功率,在识别列表中增加
了“垃圾关键词”以吸收错误的识别。上层应用程序为语音识别功能分配了单独
的进程,通过 ioctl()函数控制 LD3320 的工作状态,read()函数可以读取识别
结果。程序中使用 select 机制实现 read()函数的非阻塞访问。同时,设定 select
监控超时时间,在超时后,重新初始化语音识别芯片 LD3320,为下一次语音识
别做准备,如图 6 所示。
4.2 语音播放功能程序设计
LD3320 支持 MP3 数据播放,程序中操作顺序为:通用初始化à播放模式初始
化à音量调节à开始播放,并准备好中断响应函数,打开中断允许位。在程序中,
首先将数字 0~9、“十”、“百”、“点”的语音 MP3 数据分别转换为标准 C 语
言数组格式文件,将该文件添加到工程中进行统一编译。然后把需要播放的距离
数据进行拆分,并对每一位进行查表操作,得到相应的语音数据。例如,将距离
数据 12.5 拆分为:“1”、“十”、“2”、“点”、“5”。最后将查表得到的
语音数据按从左到右的顺序组合,并存储到 LD3320 的播放数据存储器,在即将
播放完毕时,芯片会发出中断请求,在中断响应函数中连续写入播放数据,直到
声音数据播放完毕。
4.3 超声波测距和云台控制程序设计
超声波测距功能的驱动程序属于 Linux 字符型驱动,利用 ioctl()函数对相
应 GPIO 进行时序控制,完成超声波的发射和接收。在接收端口输出高电平脉冲
信号时,触发系统中断并使用定时器计算得到高电平持续时间△T,根据公式(1)
完成距离 S 的测量。式中 V 为超声波的传播速度,常温下超声波在空气中的传播
速度是 340 米/秒。在应用程序中,可以通过 read()函数读取到所测量的距离值。
S=VXΔT/2(1)
两自由度云台由两个舵机组成,分别控制云台水平和垂直方向的旋转角度。
在驱动程序中,首先打开定时器 PWM 功能并设置定时周期,然后映射定时器中断
函数,最后使能定时器,使定时器开始运行。程序中根据实验者发出的语音指令,
利用 ioctl()函数控制定时器输出两路 PWM 信号,分别控制两个舵机的旋转角度,
最后将运动合成为云台的位姿。
5.结语
本文介绍了嵌入式语音识别技术在超声波测距系统中的一种应用以及实现
方式,实验人员可以通过预先定义好的语音指令(例如:“开始测量”、“左上
方”、“前方”)实现对系统的控制,并利用超声波进行距离测量。测量完成后,
系统通过语音播放的方式将测量结果反馈给实验人员,完成人机交互,提高了用
户体验度。本系统具有易扩展的优点,可以将其应用到其它嵌入式控制系统中。