DIY编程器网

标题: DVD/TV声控遥控器的设计与实现 [打印本页]

作者: liyf    时间: 2014-10-5 13:01
标题: DVD/TV声控遥控器的设计与实现
DVD/TV声控遥控器的设计与实现

摘  要:本文介绍了一种适合家电遥控器应用的新型DVD/TV学习式声控遥控器。它将语音识别技术应用到遥控器中,使得遥控器能通过语音命令完成各种相应的操作。该遥控器还能将其它遥控器发出的红外线信号接收并存储下来,从而实现其它遥控器所具有的操作命令。
关键词:语音识别;学习式遥控器;非特定人

引言
    一般使用DVD播放器时要同时使用电视机来显示所播放的图像。因此必须同时使用DVD播放器的遥控器以及电视机的遥控器进行控制,使用很不方便。人们很希望用一个遥控器既可以控制DVD播放器又可以控制电视机。本文设计的遥控器就是一款DVD/TV并用的遥控器。DVD遥控器是定制的,其控制码型是完全确定的。但是用户所使用的电视机却是各种类型的,其控制码型也各式各样,无法预先确定,因此对电视机的遥控器需采用学习式,即将电视机的控制码通过学习过程送入遥控器。本遥控器就是一款学习式的,适应各种类型电视机使用的遥控器。

    这款遥控器引用了语音辨识功能,既可以应用按键控制也可以发语音命令进行控制,给人们带来极大方便。

系统硬件设计
    系统主芯片采用清华大学与Infineon公司合作新推出的具有DSP和单片机(M8051)双核的语音专用芯片UniSpeech。该芯片集成了12bit的ADC和11bit的DAC,省去了额外的CODEC器件。由于采用了SoC结构,构成系统的芯片数量少,系统的集成度和稳定性高。因此该芯片非常适合于开发带有语音识别功能的遥控器等应用。
红外线信号的发射是通过MCU的功能引脚PWM驱动红外线发射管实现的,由于PWM引脚具有脉冲宽度调制功能,只要设置相应的寄存器,就能输出具有一定占空比的载波信号,因此不需额外的驱动器件就可根据需要发出所要的红外信号。红外线的接收则是由红外线接收管连接到MCU的通用输入/输出引脚实现。  

    考虑到语音声学模型、遥控码等所需要的存储数据量比较大,本文采用了SST公司的8Mbits的Flash存储器39VF080。

    遥控器设计中比较重要的一点是按键的功能设计,结合一般用户使用DVD和TV遥控器的习惯,本设计只设置了较少的4×4的扫描式按键。只有最常用的几个功能既可以按键控制,又可以语音控制,其它功能可以完全由语音控制实现。其系统硬件框图如图1所示。

    系统中 MCU作为主控制芯片,完成对各种接口的控制和系统的配置。DSP作为协处理器,完成语音识别算法和语音合成计算。通过MIC的输入语音,经过ADC的8kHz采样、12bit的线性量化,然后送到DSP进行处理。

    由于系统语音识别部分是面向非特定人设计的,因此必须事先准备训练好的声学模型和已经编辑好的语音命令词条。系统通过UART与计算机串口相接,将已经编辑好的语音命令词条和声学模型存入Flash中。考虑到实际使用的需要,本文将各语音命令词条(如“开机”、“关机”)对应到一个按键所对应的遥控码上。这样,当输入不同的语音命令,通过语音识别得到与之匹配的指令,就可实现与对应按键相同的控制效果。

系统软件设计
    本系统软件被设计为一个超循环(Super-Loops)结构的实时系统。通过在主程序中构造一个超循环把所有任务模块链接起来。任务级的程序得到控制权后,首先检查是否有事件需要处理。如果没有就放弃控制权,使得超循环任务链中的下一个任务得到控制。如果确实有事件需要处理,那么就完全或部分地处理该事件,然后就立刻交出控制权。通过这样的协作,所有的任务每次执行时都只占用系统很少的运行时间。系统流程如图2所示。
代码结构如下:
void main(void)
{  
EA = 0;
// 屏蔽中断  
Init();
// 系统初始化
EA = 1;
// 打开中断
while (1)
{
Drv_Ring(); //驱动层,负责扫描键盘和检测是否有语音输入
App_Ring(); //应用层,负责红外线信号的发射和接收以及语音命令的识别
}
}

    功能模块之间的切换是通过一个功能开关和一个语音识别启动键实现的,当功能开关置为“LEARN”学习功能时,系统进入学习功能;当置为“DVD”档时,系统进入DVD功能;当置为“TV”档时,系统则进入TV功能。

DVD功能模块
    DVD遥控器的遥控码已由DVD播放器生产厂商提供。为此,DVD遥控码型将根据所属厂家提供的信息直接在程序中确定,因此在按键发送红外信号时,也是直接由程序确定对应的码型。通过PWM引脚发射。

TV功能模块
    对TV功能而言,其遥控码型必须通过学习过程取得,并存于数据Flash中。当用户按键时,程序根据按键键值,从数据Flash中读取对应的遥控码型,然后通过功能引脚PWM发送该遥控码。

语音识别模块
    当语音识别启动键被按下时,系统进入识别状态,开始接收语音命令的输入,识别完语音命令之后,根据识别结果发送相应的遥控码。语音识别子系统的基本结构如图3所示。

    语音识别引擎采用基于子词的非特定人语音识别模型,与以往的基于孤立词整词的模型相比,具有灵活性高、稳健性好的特点。

    按照各自的功能,大致上可以将识别算法分为三个部分:特征提取、模型参数训练和识别网络解码。对于一个基于子词的非特定人嵌入式语音识别引擎而言,声学模型(采用HMM)是与识别任务无关的,模型参数相对固定,因此模型参数训练的过程可以在PC平台上完成(见图3虚框部分),需要嵌入到片上的模块只有特征提取和识别网络解码部分。特征提取选用了MFCC参数作为语音识别引擎的语音特征参数,识别网络解码采用维特比(Viterbi)搜索算法。为了保证算法能够达到较高的识别精度,而又占用较少的资源,采用两级识别结构,在一颗专用芯片上达到了99%的识别精度。

学习模块
    当系统处于学习功能状态时,系统检测红外遥控码。根据用户所选按键,将接收到的红外遥控信息存到该按键对应的Flash数据区中。当下次按下该按键时,就可从该按键对应的Flash数据区中取出新学习到的红外遥控码。
作者: 李小路    时间: 2021-7-11 18:24
谢谢分享1




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2