欢迎来到个人简历网!永久域名:gerenjianli.cn (个人简历全拼+cn)
当前位置:首页 > 范文大全 > 实用文>基于HMM的语音识别技术在嵌入式系统中的应用

基于HMM的语音识别技术在嵌入式系统中的应用

2024-07-30 07:47:11 收藏本文 下载本文

“香v草”通过精心收集,向本站投稿了8篇基于HMM的语音识别技术在嵌入式系统中的应用,下面是小编整理后的基于HMM的语音识别技术在嵌入式系统中的应用,希望能帮助到大家!

基于HMM的语音识别技术在嵌入式系统中的应用

篇1:基于HMM的语音识别技术在嵌入式系统中的应用

基于HMM的语音识别技术在嵌入式系统中的应用

摘要:介绍语音识别技术在嵌入式系统中的应用状况与发展,以及在嵌入式系统中使用HMM语音识别算法的优点,并对基于HMM语音识别技术的系统进行介绍。

关键词:SoC芯片 HMM 语音识别 嵌入式系统

语音识别ASR(Automatic Speech Recognition)系统的实用化研究是近十年语音识别研究的一个主要方向。近年来,消费类电子产品对低成本、高稳健性的语音识别片上系统的需求快速增加,语音识别系统大量地从实验室的PC平台转移到嵌入式设备中。

语音识别技术目前在嵌入式系统中的应用主要为语音命令控制,它使得原本需要手工操作的工作用语音就可以方便地完成。语音命令控制可广泛用于家电语音遥控、玩具、智能仪器及移动电话等便携设备中。使用语音作为人机交互的途径对于使用者来说是最自然的一种方式,同时设备的小型化也要求省略键盘以节省体积。

嵌入式设备通常针对特定应用而设计,只需要对几十个词的命令进行识别,属于小词汇量语音识别系统。因此在语音识别技术的要求不在于大词汇量和连续语音识别,而在于识别的准确性与稳健性。

对于嵌入式系统而言,还有许多其它因素需要考虑。首先是成本,由于成本的限制,一般使用定点DSP,有时甚至只能考虑使用MPU,这意味着算法的复杂度受到限制;其次,嵌入式系统对体积有严格的限制,这就需要一个高度集成的硬件平台,因此,SoC(System on Chip)开始在语音识别领域崭露头角。SoC结构的嵌入式系统大大减少了芯片数量,能够提供高集成度和相对低成本的解决方案,同时也使得系统的可靠性大为提高。

语音识别片上系统是系统级的集成芯片。它不只是把功能复杂的若干个数字逻辑电路放入同一个芯片,做成一个完整的单片数字系统,而且在芯片中还应包括其它类型的电子功能器件,如模拟器件(如ADC/DAC)和存储器。

笔者使用SoC芯片实现了一个稳定、可靠、高性能的嵌入式语音识别系统。包括一套全定点的DHMM和CHMM嵌入式语音识别算法和硬件系统。

(本网网收集整理)

1 硬件平台

本识别系统是在与Infineon公司合作开发的芯片UniSpeech上实现的。UniSpeech芯片是为语音信号处理开发的专用芯片,采用0.18μm工艺生产。它将双核(DSP+MCU)、存储器、模拟处理单元(ADC与DAC)集成在一个芯片中,构成了一种语音处理SoC芯片。这种芯片的设计思想主要是为语音识别和语音压缩编码领域提供一个低成本、高可靠性的硬件平台。

该芯片为语音识别算法提供了相应的存储量和运算能力。包括一个内存控制单元MMU(Memory Management Unit)和104KB的片上RAM。其DSP核为16位定点DSP,运算速度可达到约100MIPS.MCU核是8位增强型8051,每两个时钟周期为一个指令周期,其时钟频率可达到50MHz。

UniSpeech芯片集成了2路8kHz采样12bit精度的ADC和2路8kHz采样11bit的DAC,采样后的数据在芯片内部均按16bit格式保存和处理。对于语音识别领域,这样精度的ADC/DAC已经可以满足应用。ADC/DAC既可以由MCU核控制,也可以由DSP核控制。

2 嵌入式语音识别系统比较

以下就目前基于整词模型的语音识别的主要技术作一比较。

(1)基于DTW(Dynamic Time Warping)和模拟匹配技术的语音识别系统。目前,许多移动电话可以提供简单的语音识别功能,几乎都是甚至DTM和模板匹配技术。

DTW和模板匹配技术直接利用提取的语音特征作为模板,能较好地实现孤立词识别。由于DTW模版匹配的运算量不大,并且限于小词表,一般的应用领域孤立数码、简单命令集、地名或人名集的语音识别。为减少运算量大多数使用的特征是LPCC(Linear Predictive Cepstrum Coefficient)运算。

DTW和模板匹配技术的缺点是只对特定人语音识别有较好的识别性能,并且在使用前需要对所有词条进行训练。这一应用从20世纪90年代就进入成熟期。目前的努力方向是进一步降低成本、提高稳健性(采用双模板)和抗噪性能。

(2)基于隐含马尔科夫模型HMM(Hidden Markov Model)的识别算法。这是Rabiner等人在20世纪80年代引入语音识别领域的一种语音识别算法。该算法通过对大量语音数据进行数据统计,建立识别条的统计模型,然后从待识别语音中提取特征,与这些模型匹配,通过比较匹配分数以获得识别结果。通过大量的语音,就能够获得一个稳健的统计模型,能够适应实际语音中的各种突发情况。因此,HMM算法具有良好的识别性能和抗噪性能。

基于HMM技术的识别系统可用于非特定人,不需要用户事先训练。它的缺点在于统计模型的建立需要依赖一个较大的语音库。这在实际工作中占有很大的工作量。且模型所需要的存储量和匹配计算(包括特征矢量的输出概率计算)的运算量相对较大,通常需要具有一定容量SRAM的DSP才能完成。

在嵌入式语音识别系统中,由于成本和算法复杂度的限制,HMM算法特别CHMM(Continuous density HMM)算法尚未得到广泛的应用。

(3)人工神经网络ANN(Artificial Neural Network)。ANN在语音识别领域的应用是在20世纪80年代中后期发展起来的。其思想是用大量简单的处理单元并行连接构成一种信息处理系统。这种系统可以进行自我更新,且有高度的并行处理及容错能力,因而在认知任务中非常吸引人。但是ANN相对于模式匹配而言,在反映语音的动态特性上存在重大缺陷。单独使用ANN的系统识别性能不高,所以目前ANN通常在多阶段识别中与HMM算法配合使用。

3 基于HMM的语音识别系统

下面详细介绍基于HMM的语音识别系统。首先在UniSpeech芯片上实现了基于DHMM的识别系统,然后又在同一平台上实现了基于CHMM的识别系统。

3.1 前端处理

语音的前端处理主要包括对语音的采样、A/D变换、分帧、特片提取和端点检测。

模拟语音信号的数字化由A/D变换器实现。ADC集成在片内,它的采样频率固定为8kHz。

特征提取基于语音帧,即将语音信号分为有重叠的若干帧,对每一帧提取一次语音特片。由于语音特征的短时平稳性,帧长一般选取20ms左右。在分帧时,前一帧和后一帧的一部分是重叠的,用来体现相邻两帧数据之间的相关性,通常帧移为帧长的1/2。对于本片上系统,为了方便做FFT,采用的帧长为256点(32ms),帧移为128点(16ms)。

特征的选择需要综合考虑存储量的限制和识别性能的要求。在DHMM系统中,使用24维特征矢量,包括12维MFCC(Mel Frequency Cepstrum Coefficient)和12维一阶差分MFCC;在CHMM系统中,在DHMM系统的'基础上增加了归一化能量、一阶差分能量和二阶差分能量3维特征,构成27维特征矢量。对MFCC和能量分别使用了倒谱均值减CMS(Cepstrum Mean Subtraction)和能量归一化ENM(Energy Normalization)的处理方法提高特征的稳健性。

3.2 声学模型

在HMM模型中,首先定义了一系列有限的状态S1…SN,系统在每一个离散时刻n只能处在这些状态当中的某一个Xn。在时间起点n=0时刻,系统依初始概率矢量π处在某一个状态中,即:

πi=P{X0=Si},i=1..N

以后的每一个时刻n,系统所处的状态Xn仅与前一时刻系统的状态有关,并且依转移概率矩阵A跳转,即:

系统在任何时刻n所处的状态Xn隐藏在系统内部,并不为外界所见,外界只能得到系统在该状态下提供的一个Rq空间随机观察矢量On。On的分布B称为输出概率矩阵,只取决于Xn所处状态:

Pxn=Si{On}=P{On|Si}

因为该系统的状态不为外界所见,因此称之为“稳含马尔科夫模型”,简称HMM。

在识别中使用的随机观察矢量就是从信号中提取的特征矢量。按照随机矢量Qn的概率分布形时,其概率密度函数一般使用混合高斯分布拟合。

其中,M为使用的混合高斯分布的阶数,Cm为各阶高期分布的加权系数。此时的HMM模型为连续HMM模型(Continuous density HMM),简称CHMM模型。在本识别系统中,采用整词模型,每个词条7个状态同,包括首尾各一个静音状态;每个状态使用7阶混合高斯分布拟合。CHMM识别流程如图1所示。

由于CHMM模型的复杂性,也可以假定On的分布是离散的。通常采用分裂式K-Mean算法得到码本,然后对提取的特征矢量根据码本做一次矢量量化VQ(Vector Quantization)。这样特征矢量的概率分布上就简化为一个离散的概率分布矩阵,此时的HMM模型称为离散HMM模型(Discrete density HMM),简称DHMM模型。本DHMM识别系统使用的码本大小为128。DHMM识别流程如图2所示。

DHMM虽然增加了矢量量化这一步骤,但是由于简化了模型的复杂度,从而减少了占用计算量最大的匹配计算。当然,这是以牺牲一定的识别性能为代价。

笔者先后自己的硬件平台上完成了基于DHMM和CHMM的识别系统。通过比较发现,对于嵌入式平台而言,实现CHMM识别系统的关键在于芯片有足够运算太多的增加。因为词条模型存储在ROM中,在匹配计算时是按条读取的。

3.3 识别性能

笔者使用自己的识别算法分别对11词的汉语数码和一个59词的命令词集作了实际识别测试,识别率非常令人满意,如表1所示。

表1 汉语数码识别率

DHMMCHMM特征矢量维数2427识别率93.40%98.28%识别速度(11词)10ms50ms模型大小(1个词条)1.5KB<5.5KB码本6KB无

对于59词命令词集的识别,还增加了静音模型。由于基线的识别率已经很高,所以静音模型的加入对于识别率的进一步提高作用不大,如表2所示。但静音模型的加入可以降低对端点判断的依赖。这在实际使用中对系统的稳健性有很大的提高。

表2 59词命令词集识别率

浮  点定  点无静音模型98.59%98.28%有静音模型98.83%98.55%

可以看到,在硬件能够支持的情况下,CHMM的识别率比DHMM有很大的提高,同时识别速度也完全可以满足使用要求。

目前嵌入式语音识别领域使用HMM模型的还比较少,使用通常限于DHMM。由于集成电路制造技术的发展,目前主流DSP都可以提供100MIPS以上的运算速度,完全可以满足CHMM对计算能力的要求。

笔者在使用SoC芯片的硬件平台上实现了DHMM和CHMM算法。其中定点CHMM语音识别算法在16位定点DSP硬件平台上达到很高的识别率,同时系统资源消耗也比较合理,安全可以替代DHMM算法。非常适合50词以内的命令词识别。以上算法已经在芯片上实现,该方案在家电语音遥控、玩具、PDA、智能仪器以及移动电话等领域内有非常好的应用前景。

篇2:基于HMM的语音识别技术在嵌入式系统中的应用

基于HMM的语音识别技术在嵌入式系统中的应用

摘要:介绍语音识别技术在嵌入式系统中的应用状况与发展,以及在嵌入式系统中使用HMM语音识别算法的优点,并对基于HMM语音识别技术的系统进行介绍。

关键词:SoC芯片 HMM 语音识别 嵌入式系统

语音识别ASR(Automatic Speech Recognition)系统的实用化研究是近十年语音识别研究的一个主要方向。近年来,消费类电子产品对低成本、高稳健性的'语音识别片上系统的需求快速增加,语音识别系统大量地从实验室的PC平台转移到嵌入式设备中。

语音识别技术目前在嵌入式系统中的应用主要为语音命令控制,它使得原本需要手工操作的工作用语音就可以方便地完成。语音命令控制可广泛用于家电语音遥控、玩具、智能仪器及移动电话等便携设备中。使用语音作为人机交互的途径对于使用者来说是最自然的一种方式,同时设备的小型化也要求省略键盘以节省体积。

嵌入式设备通常针对特定应用而设计,只需要对几十个词的命令进行识别,属于小词汇量语音识别系统。因此在语音识别技术的要求不在于大词汇量和连续语音识别,而在于识别的准确性与稳健性。

对于嵌入式系统而言,还有许多其它因素需要考虑。首先是成本,由于成本的限制,一般使用定点DSP,有时甚至只能考虑使用MPU,这意味着算法的复杂度受到限制;其次,嵌入式系统对体积有严格的限制,这就需要一个高度集成的硬件平台,因此,SoC(System on Chip)开始在语音识别领域崭露头角。SoC结构的嵌入式系统大大减少了芯片数量,能够提供高集成度和相对低成本的解决方案,同时也使得系统的可靠性大为提高。

语音识别片上系统是系统级的集成芯片。它不只是把功能复杂的若干个数字逻辑电路放入同一个芯片,做成一个完整的单片数字系统,而且在芯片中还应包括其它类型的电子功能器件,如模拟器件(如ADC/DAC)和存储器。

笔者使用SoC芯片实现了一个稳定、可靠、高性能的嵌入式语音识别系统。包括一套全定点的DHMM和CHMM嵌入式语音识别算法和硬件系统。

1 硬件平台

本识别系统是在与Infineon公司合作开发的芯片UniSpeech上实现的。UniSpeech芯片是为语音信号处理开发的专用芯片,采用0.18μm工艺生产。它将双核(DSP+MCU)、存储器、模拟处理单元(ADC与DAC)集成在一个芯片中,构成了一种语音处理SoC芯片。这种芯片的设计思想主要是为语音识别和语音压缩编码领域提供一个低成本、高可靠性的硬件平台。

该芯片为语音识别算法提供了相应的存储量和运算能力。包括一个内存控制单元MMU(Memory Management Unit)和104KB的片上RAM。其DSP核为16位

[1] [2] [3] [4] [5]

篇3:Java技术在嵌入式系统中的应用

Java技术在嵌入式系统中的应用

摘要:J2ME是Java2平台的一个版本,使用在各种各样的消费电子产品和嵌入式设备上。JavaCard技术规范得Java应用能运行在智能卡和更小的嵌入式设备上。本文介绍J2ME和JavaCard的硬件平台和软件体系结构,以及如何进行J2ME和JavaCard应用程序开发。Java在移动通信领域的应用已经引起广泛的关注,本文对此进行了详细的描述。

关键词:Java嵌入式系统Java卡J2ME移动通信

1Java概述

Java是在1991年由Sun公司JamesGoslingPatrickNaughton、ChisWarth、EdFrank以及MikeSherindan等组成的“STAR7”小组所构想出来的。于1995年5月正式推出。Java计算平台包括JVM(Java虚拟机)和JavaAPI(Java应用编程接口)。JVM是一种抽象化的计算机,运行在操作系统之上,可以在它上面执行Java的字节线,使Java应用程序在现有的各种平台上都可以顺利执行。JavaAPI和Java的函数类库,分为基本核心类库和各种外加功能的扩展类库。

12月8日,Sun公司的最新一个版本的JDK(JavaSoftwareDevelopmentKit)正式发布,Sun的升级版本,而且还是完善的Java平台。

Java2定义组成Java企业平台的核心技术包括15个核心API。这15个核心API构成了整个Java2技术的灵魂,包括Applet、AWT、Beans、IO、Lang、Math、Net、Rmi、Security、SQL、Text、Util、Accessibility、Swing和CORBA。与以往的JDK比较,Java2平台具有很多优势,如更灵活的安全模式、更好的性能、与其他企业级系统的互用性、应用开发更容易、全球化的提高以及更好的跨平台性等。

Java2可以根据对软、硬件需求的不同分为4个版本。J2EE(Java2Platform,EnterpriseEdition)用于企业服务器端应用程序开发;J2SE(Java2Platform,StandardEdition)用于个人计算机上的应用程序开发;J2ME(Java2Platform,MicroEdition)用于信息家电等资源有限的设备上的应用程序开发;JavaCardPlatform用于智能卡上的应用程序开发。

Java程序语言在其产生之初,本身就是为嵌入式设备--机顶盒设备设计的。现在Java又凭借J2MEE和JavaCardPlatform回到嵌入式系统开发领域。

2Java卡

(1)Java卡简介

Java卡是Java平台中最小的子集,也是一种特殊的智能卡。智能卡是一种嵌入计算机芯片的卡片,广泛应用于通信、交通、金融、证券和保险等领域。智能卡分为两大类:一类是存储器卡,另一类是微处理器卡。存储器卡仅仅被用于存储器数据。微处理器卡有数据处理的功能:它有自己的CPU、I/O端口、存储器和操作系统,可以被看作是一台微型电脑;可以安装并运行小的应用程序,通过串行通信接口与外部通信。ISO(国际标准组织)制定了智能卡的国际标准ISO7816。

影响智能卡推广的主要因素是其不够开放,不同的卡片制造商生产的卡片的应用程序开发没有统一的标准。为了解决这个问题,工业界提出了能运行Java程序的智能卡--Java卡,并且制定了Java卡的.技术规范,包括JavaCardVM(Java卡虚拟机)和API的详细信息。JavaCardVM位于智能卡的操作系统之一,用通用的编程语言和系统接口屏蔽了不同智能卡硬件和操作系统的区别。Java卡的框架定义了供应用程序开发者使用的API。Java卡的应用程序称为Applet,每个Applet由唯一的AID(应用程序标识符)来识别。

(2)Java卡对硬件的最低要求

512BRAM:主要用于存储应用程序运行时的栈以及I/O缓冲区。

24KBROM:主要用于存储程序代码和系统的运行时系统。

8KBEEPROM:主要用于存储Java卡的Applet和堆。

8位处理器:8位处理器是Java卡的最低要求。

(3)Java卡软件体系结构

Java卡软件体系结构如图1所示。

最底层的CardOS(操作系统)和NativeFunctions(基本函数)相不于个人计算机的操作系统,负责低层的处理工作。

JavaCardVM位于CardOS和NativeFunctions之上,隐蔽了底层智能卡的不同技术,实现了卡接口的统一和编程语言的统一。

JavaCardFramework(Java卡框架)为开发人员定义了一整套API,主要负责运行Java卡Applet以及为Applet运行提供所需要的环境。

CardOS、JavaCardVM和JavaCardFramework共同组成了JCRE(Java卡运行时环境)。IndustrySpecificExtensions是服务方所提供的类,使企业与公司能够提供属于自己的服务程序。例如,如果这张卡是GSM网络的SIM(用户识别模块)卡,那么这一层就是SIM卡所需的接口类。

(4)JavaCardAPI

JavaCard的2.1版包括四个包:Javacard.langpackage、Javacard.frameworkpackage、Javacard.securitypackage和Javacardx.cryptopackage。

Javacard.langpackage提供Java程序语言中重要的类,例如所有Java类的根类Object类。

Javacard.frameworkpackage是JavaCardAPI的核心包,提供了实现JavaCardApplet基本类和工具。其中ISO7816抽象接口提供了ISO7816所使用的常数值。PIN(个人识别号码)抽象接口使其子类能够验证PIN是否合法。Shareable抽象接口使得不同的Applet能够互相通信。AID类使得JCRE能够通过一个AID表来识别Applet。APDU类通过管理一个缓冲区来接收与传送终端的指令以及回传Applet运行结果与状态。Applet类是所有JavaCardApplet的根类,管理JavaCardApplet的生命周期。JCSystem类管理Applet与JavaCard的系统资源,如AID与事务。OwnerPIN类管理卡片持有者的PIN,并提供相关验证与更新等方法。Util类提供了开发中的常用工具。

Javacard.securitypackage负责提供安全机制,包括Key抽象接口、KeyBuilde类和MessageDisest类。

Javacardx.cryptopackage包含了关于加密与安全的抽象接口和类。

(5)Java卡应用的开发

Java卡的生命周期从操作系统、JVM、API库和可选的Applet被写入Java卡的ROM开始。在正式使用之前,Java卡要经过初始化(在卡上写入制造商和发行商名称等通用信息)和个人化(在卡上写入密钥等个人信息)。然后用户就可以购买并使用Java卡了,当然还要与读卡器相配合。Applet的生命周期从被安装并注册到Java卡系统开始,在被从系统注册表中删除时结束,在被选择时激活。

Java卡的应用程序可以用一般的Java编译器来编译。但是由于智能卡只有有限的存储器资源和计算功能,Java卡上的应用开发与普通的Java程序开发有很大的不同,很多Java语言的特性在Java卡应用的开发中都不能使用。Java卡的应用开发(在Windows系统下)过程如下:

①安装JDK和JavaCard2.1.1DevelopmentKit;

②设置有关环境变量;

③编辑Java源代码,可以使用任何Java代码编辑工具;

④编译Java源代码,用Java编译器编译Java源代码,生成class文件;

⑤生成Cap文件,在Java卡上不能直接运行class文件,必须用Java卡转换器(converter)、把class文件转换为Cap文件;

⑥安装Applet,用PC机和与之相连的读卡器把Cap文件安装到Java卡上。

图2为Java卡应用开发过程示意图。

(6)Java卡在移动通信领域的应用

SIM(用户识别模块)作为一张内含大规模集成电路的智能卡,目前主要用于GSM手机。最初SIM卡主要用来存储一些个人身份认证和识别信息,例如IMSI、鉴权密钥等。SIM卡不能向手机发出命令。19ETSI(欧洲电信标准化委员会)制定了STK卡(SIM应用工具箱技术)的技术规范,大大增强了SIM卡的能力。STK卡上可以安装运行应用程序,可以向手机发出命令,例如在手机上建立新的菜单。SIM卡还可以收发短消息甚至发起呼叫。这样就可以在SIM卡上运行客户端的软件,通过短消息与服务器交互,同时通过菜单为用户提供友好的界面。

尽管STK对SIM卡的使用方法进行了标准化,但是各个制造商仍旧使用自己的开发工具为自选的芯片掩膜,因此引入开放的SIM卡开放平台成为必要。ETSI已在其协议中增加了有关JavaCard的内容。GSMSIM卡采用JavaCardAPI在保证安全的同时提供开放的SIM开发,使得STK应用在不同制造商的SIM卡上运行。在开发过程中,

软件开发商可采用开放的开发工具,开发出与Java兼容的SIM卡应用程序。

ETSI的协议GSM03.19是STKJava卡的技术标准,规定了STKJava卡的体系结构。最底层是JCRE和GSM文件系统。之上是GSM框架,提供了一些供Applet接入GSM文件系统的API。在GSM框架之上是SIMToolkit框架,负责Applet的触发、注册、安装和卸载,主动式命令的处理,Applet的安全性管理。

3J2ME

(1)J2ME简介

J2ME是Sun公司为资源有限的设备上使用Java编程语言而设计的,使用在各种各样的消费电子产品上,例如智能卡、手机、PDA、电视机顶盒等。J2ME平台是建立在Java编程语言上的,可为资源有限的设备提供最大的功能。

J2ME目前有两种配置层。一种是“面向连接的设备配置”CDC(ConnectedDeviceConfiguration),它采用典型的Java虚拟机技术。这种全功能的虚拟机包含了基于台式机系统上的虚拟机的所有功能,适用于拥有至少几兆字节内存的设备。它的目标是高档的消费类电子产品和嵌入式设备,例如智能通信器、高级“智能”寻呼机、智能个人数字助理(PDA)以及交互式数字电视机顶盒。对于无线设备和其它内存不足的设备,J2ME采用“面向连接的受限的设备配置”CLDC(ConnectedLimitedDeviceConfiguration)技术。

(2)J2ME对硬件的最低要求

CDC与CLDC对硬件平台有不同的要求:

CDC-32位的微处理器,大于2MB的存储器。

CLDC-16位或32位处理器,大于128KB的存储器。

(3)J2ME软件体系结构

图3所示为J2ME软件体系结构。

JavaVirtualMachineLayer(Java虚拟机层)是Java虚拟机的一个实现,它是为特定设备的主机操作系统定制的,而且支持一个特定的J2ME配备。CDC配置的JVM是CVM(C虚拟机),CLDC配置的JVM是KVM(K虚拟机)。

ConfigurationLayer(配置层)定义了Java虚拟机功能和特定类别设备上可用的Java类库的最小集。从某种程序上说,一个配置定义了Java平台功能部件和库的共同性,开发者可以假设这些功能部件和库在属于某一特定类别的所有设备上都是可用的。

ProfileLayer(框架层)定义了特定系列设备上可用的应用程序编程接口的最小集。框架在一个特定的配置上面实现,在配置层上增加适用特定规格的配置文件,如MIDP就是用于移动终端的配置文件。应用程序是针对特定的框架编写的,因此可以移植到支持该框架的任何设备上,一个设备可以支持多个框架。

(4)J2MEAPI

CDC提供支持全兼容Java2虚拟机所必需的最小API集。这一API集包括所有为CDC定义的API和针对文件I/O、网络连接、高级完全性、对象序列等API。其中Java.io支持系统输入与输出,JavalangJava提供编程语言基本类,Java.lang.ref包括了一些特别参考类,Java.lang.reflect提供对反映的支持,Java.math支持数学运算,Java.net提供用于网络连接的类和工具,Java.security提供完全支持,Java.security.cert提供证书支持,Java.text提供文本处理类,Java.util包括集合、日期和时间支持等各种实用工具类,Java.util.jar提供Jar文件支持,Java.util.zip提供Zip文件支持,支持Javax.microedition类属连接。

由于MIDP/CLDCAPI将在一个性能有限的设备上运行,因此Java的一些功能被取消或修改。Java.lang、Java.io、Java.util包是J2SE包中标准类的一个子集。Javax.microedition.io包提供了对网络连接的支持,Javax.microedition.io包中的主要对象是Connector类。可将该类强制转换为不同的连接类型,例如HttpConnection。Javax.microedition.lcdui提供了用于定义midlet用户接口的类。Javax.microedition.rms包用来在设备上实现一个临时存储数据库,当然该数据库的存储和获取信息的性能受到设备的限制。Javax.microedition.midlet中包含有MIDlet的类。MIDlet类执行midlet的生命周期,并且提供getAppProperty(key)方法来由应用属性中获取信息。应用属性设置在jad(Java应用程序描述器)文件中。

(5)Java卡在移动通信领域的应用

CLDC和MIDP为创建移动电话应用程序提供了完整的环境。MID框架的核心是一个MIDlet应用程序,所有应用程序MIDlet都继承MIMlet类,以允许应用程序管理软件对MIDlet进行控制、从应用程序描述符检索属性以及对状态变化进行通知和请示。MIDlet类提供了用于调用、暂停、重新启动和终止MIDlet应用程序的API。应用程序管理软件可以在运行时环境内管理多个MIDlet的活动。此外,MIDlet可以自己发起一些状态变化,并把这些变化通知给应用程序管理软件。

移动电话J2MEMIDP应用程序包括用户界面开发、数据库程序开发和网络程序开发。

Javax.microedition.lcdui包中包括了用于用户界面开发的各种类。用户界面的根类是Display,所有的用户界面类都是在Display里显示出来的Displayable对象,Display对象是其它对象演示的舞台,应用程序道德需要获得Display对象的引用,然后就可以把场景对象放入演示舞台中。MIDP提供了Screen和Canvas两种演示场景。Screen的子类包括Alert、Form、List和TextBox。Javax.microedition.lcdui中定义了Command类来接收用户的输入信息,又在Display类中定义了Screen对象与Command对象组合的方法,使得应用程序能够响应用户的输入。

在Screen场景中可以使用的对象包括Alert(信息窗口)、Form(窗体)、List(选项列表)和TextBox(文本框)。其中Form可以放置Item类,包括TextFiled(文本字段)、StringItem(字符串项目)、ImageItem(图像项目)、DataField(日期字段)、ChoiceGroup(选项集合)和Gauge(标尺)。TextBox使应用程序能够在屏幕上显示文本框;Alert类似于消息框,可以为用户提供一些信息;List类以列表的形式提供选项使用户选择;Form是一个容器对象,可以放置包括文本字段、字符串项目、图像项目、日期字段、选项集合和标尺等在内的Item对象。

Canvas是Displayable中用来给开发者创建整个用户接口的,用于创建复杂的用户界面,例如视频游戏中使用的界面。用户在Canvas对象上的绘画与Applet中的AWTCanvas类似。

Javax.microedition.rms定义了在设备上实现一个临时存储数据库程序开发的类。其中采用由字节数组RMS(记录管理系统)机制,使用称为RecordStore(记录存储区)的小型数据库。每个记录存储区对象是Javax.microedition.rms类的一个实例。记录存储区是由字节数组组成的记录构成的。RecordStore提供了用于用户操作记录和管理存储区的方法,对记录的操作包括增加、删除、更新和查询。

Javax.microedition.io为应用程序开发者提供GCF(通用联机框架),用于网络编程。网络编程的根类是Connecter,通过Connecter提供了HTTP、SOCKET、Datagram(数据报)和SerialPort(串行口)等网络通信方式,其中HTTP为设备的必选项。

(6)J2MEMIDP应用程序的开发过程

Sun公司最近推出的工具包J2MEWTK(Java2MicroEditionWirelessToolkit)简化了MIDlet的开发,为MIDlet开发提供了一个全面的工具包。应用程序的开发过程如下:

①安装J2SE或者JavaRuntimeEnviroment。

②安装J2MEWTK。

③配置仿真器。

④编辑Java源文件,可以使用任何Java代码编辑工具。

⑤编译Java源代码,用Java编译器编译Java源代码,生成Class文件。除了编译以外,编译器还会检查源文件中有没有使用CLDC和MIDP以外的类和属性及方法。

⑥验证字节码。

⑦封装成MIDletSuite,把经过验证的Class文件及应用程序中将用到的资源文件封装成JAR文件,这一步会生成JAD文件和mainfest文件。

⑧测试,然后下载到目标机上运行。

结语

Java本来就是为嵌入式设备而设计的,但昌随着因特网的兴起,Java在台式机和服务器端的应用开发中取得了巨大的成功。Java在应用中充分展示其通用性与完全性等优势,而这在嵌入式设备的应用开发中是至关重要的,这使得Java重返嵌入式应用开发领域成为必然。STKJava卡和J2ME的成功应用昭示着Java在嵌入式系统应用开发中的美好前景。

篇4:Java技术在嵌入式系统中的应用

Java技术在嵌入式系统中的应用

摘要:J2ME是Java 2平台的一个版本,使用在各种各样的消费电子产品和嵌入式设备上。Java Card技术规范得Java应用能运行在智能卡和更小的嵌入式设备上。本文介绍J2ME和Java Card的硬件平台和软件体系结构,以及如何进行J2ME和Java Card应用程序开发。Java在移动通信领域的应用已经引起广泛的关注,本文对此进行了详细的描述。

关键词:Java 嵌入式系统 Java卡 J2ME 移动通信

1 Java概述

Java是在1991年由Sun公司James Gosling Patrick Naughton、Chis Warth、Ed Frank以及Mike Sherindan等组成的“STAR7”小组所构想出来的。于1995年5月正式推出。Java计算平台包括JVM(Java虚拟机)和Java API(Java应用编程接口)。JVM是一种抽象化的计算机,运行在操作系统之上,可以在它上面执行Java的字节线,使Java应用程序在现有的各种平台上都可以顺利执行。Java API和Java的函数类库,分为基本核心类库和各种外加功能的扩展类库。

年12月8日,Sun公司的最新一个版本的JDK(Java Software Development Kit)正式发布,Sun的升级版本,而且还是完善的Java平台。

Java 2定义组成Java企业平台的核心技术包括15个核心API。这15个核心API构成了整个Java 2技术的灵魂,包括Applet、AWT、Beans、IO、Lang、Math、Net、Rmi、Security、SQL、Text、Util、Accessibility、Swing和CORBA。与以往的`JDK比较,Java 2平台具有很多优势,如更灵活的安全模式、更好的性能、与其他企业级系统的互用性、应用开发更容易、全球化的提高以及更好的跨平台性等。

Java 2可以根据对软、硬件需求的不同分为4个版本。J2EE(Java 2 Platform,Enterprise Edition)用于企业服务器端应用程序开发;J2SE(Java 2 Platform,Standard Edition)用于个人计算机上的应用程序开发;J2ME(Java 2 Platform,Micro Edition)用于信息家电等资源有限的设备上的应用程序开发;Java Card Platform用于智能卡上的应用程序开 发。

Java 程序语言在其产生之初,本身就是为嵌入式设备--机顶盒设备设计的。现在Java又凭借J2MEE和Java Card Platform回到嵌入式系统开发领域。

2 Java卡

(1)Java卡简介

Java卡是Java平台中最小的子集,也是一种特殊的智能卡。智能卡是一种嵌入

[1] [2] [3] [4] [5]

篇5:嵌入式系统与通信技术在汽车安全中的应用

嵌入式系统与通信技术在汽车安全中的应用

利用RISC ARM处理器与网络通信技术组成汽车安全系统,实现汽车安全驾驶和远程实时监控.通过嵌入式系统与网络通信,将采集的连续视频图像以MJPEG的方式压缩处理,然后由StrongARM进行打包处理,生成UDP包,通过LCD显示或通过无线网络向网络服务器发送,再加上语音提示从而达到安全驾驶和远程实时监控.系统能较好提高驾驶的安全性与防盗,而且具有安装方便、配置灵活、便于携带等优点,具有较好的`市场应用前景.

作 者:伍松  作者单位:广西工学院,广西,柳州,546005 刊 名:大众科技 英文刊名:POPULAR SCIENCE & TECHNOLOGY 年,卷(期): “”(4) 分类号:U461.91 关键词:汽车安全   视频采集   嵌入式系统   通信技术  

篇6:语音识别在家电遥控器中的应用

语音识别在家电遥控器中的应用

摘要:介绍一种适合家电遥控器应用的语音识别算法,该算法使用双模块和两级端点检测方法,能有效地提高识别和稳健性;介绍利用该技术实现的一种新型学习型遥控器,展现了语音识别技术在家电领域的广阔前景。

关键词:语音识别DTWFEDFRED学习型遥控器

家用电器发展的一个重要方面是让用户界面更加人性化,更加方便自然,做到老年人和残疾人可以无障碍地使用。利用语音识别技术实现语音控制是提高家电产品用户界面质量的一条重要途径。本文以语音控制遥控器为例,说明语音识别技术如何应用在家电器领域。

适合家用电器应用的语音识别嵌入式系统结构如图1所示,它由四个部分组成。第一部分为模/数转换部分,其输入端接收输入的语音信号,并将其转化成数字芯片可处理的数字采集信号;在输出端将解码后的语音数字信号转换为音频模拟信号,通过扬声器放声。第二部分为语音识别部分,它的作用是对输入的数字语音词条信号进行分析,识别出词条信号所代表的命令,一般由DSP完成。第三部分语音提示和语音回放部分,它一般也是在DSP中完成的,其核心是对语音信号进行数字压缩编码和解码,目的是提示用户操作并对识别语音的响应,完成人机的语音交互。第四部分是系统控制部分,它将语音识别结果转换成相应的控制信号,并将其输出转换成物理层操作,完成具体功能。语音识别与系统控制的有机结合是完成声控交互的关键,下面将对语音识别算法及遥控系统控制部分作详细的讨论。

1语音识别算法

目前,常以单片机(MCU)或DSP作炎硬件平台的实现消费类电子产品中的语音识别。这类语音识别主要为孤立词识别,它有两种实现方案:一种是基于隐含马尔科夫统计模型(HMM)框架的非特定人识别;另一种是基于动态规划(DP)原理的特定人识别。它们在应用上各有优缺点。HMM非特定人员的优点是用户无需经过训练,可以直接使用;并且具良好的稳定性(即对使用者而言,语音识别性能不会随着时间的延长而降低)。但非特定人语音识别也有其很难克服的缺陷。首先,使用该方法需要预先采集大量的语料库,以便训练出相应的识别模型,这就大大提高了应用此技术的前期成本;其次,非特定人语音识别很难解决汉语中不同方言的问题,限制了它的使用区域;另外还有一个因素也应予以考虑,家电中用于控制的具体命令词语最好不要完全固定,应当根据的用户的习惯而改变,这一点在非特定人识别中几乎不可能实现。因此大多数家电遥控器不适合采用此方案。DP特定人识别的优点是方法简单,对硬件资源要求较低;此外,这一方法中的训练过程也很简单,不需预先采集过多的样本,不仅降低了前期成本,而且可以根据用户习惯,由用户任意定义控制项目的具体命令语句,因而适合大多数家电遥控器的应用。DP特定识别的严重缺点是它的稳健性不理想,对有些人的语音识别率高,有的人识别率却不高;刚训练完时识别率较高,但随着时间的推迟而识别率降低。些缺点往往给用户带来不便。为克服这些缺陷,对传统方法作为改进,使识别性能和稳健性都有显著的提高,取得令人满意的结果。

1.1端点检测方法

影响孤立词识别性能的一个重要因素是端点检测准确性[4]。在10个英语数字的识别测试中,60毫秒的端点误差就使识别率下降3%。对于面向消费类应用的语音识别芯片系统,各种干扰因素更加复杂,使精确检测端点问题更加困难。为此,提出了称为FRED(Frame-basedReadl_timeEndpointDetection)算法[3]的两级端点检测方案,提高端点检测的精度。第一级对输入语音信号,根据其能量和过零率的变化,进行一次简单的实时端点检测,以便去掉静音得到输入语音的时域范围,并且在此基础上进行频谱特征提取工作。第二级根据输入语音频谱的FFT分析结果,分别计算出高频、中频和低频段的能量分布特性,用来判别轻辅音、浊辅音和元音;在确定了元音、浊音段后,再向前后两端扩展搜索包含语音端点的帧。FRED端点检测算法根据语音的本质特征进行端点检测,可以更好地适应环境的干扰和变化,提高端点检测的精度。

在特定人识别中,比较了常用的FED(FastEndpointDetection)[5]和FRED两种端点检测算法的性能。两种算法测试使用相同的数据库,包括7个人的录音,每个人说100个人名,每个人名读3遍。测试中的DP模板训练和识别算法为传统的固定端点动态时间伸缩(DTW)模板匹配算法[4]。两种端点检测算法的识别率测试结果列在表1中。

表1比较FED和FRED端点检测算法对DTW模板匹配识别率的影响

端点检测算法第1人第2人第3人第4人第5人第6人第7人平均FED92.5%87%92.6%95.6%96.2%96.8%100%94.4%FRED94.3%89.9%93.2%99.4%99.4%98.8%100%96.4%

测试结果说明:使用FRED端点检测算法,所有说话人的识别率都有了不同程度的提高。因此,本系统采用这种两级端点检测方案。

1.2模拟匹配算法

DTW是典型的DP特定人算法,为了克服自然语速的差异,用动态时间规整方法将模板特征序列和语音特征序列进行匹配,比较两者之间的失真,得出识别判决的依据。

假设存储的`一个词条模板包括M帧倒谱特征R={r(m);m=1,2,∧,M};识别特征序列包括N帧倒谱特征T={t(n);n=1,2,∧,N}。在r(i)和t(i)之间定义帧局部失真D(i,j),D(i,j)=|r(i)-t(i)|2,通过动态规划过程,在搜索路径中找到累积失真最小的路径,即最优的匹配结果。采用对称形式DTW:

其中S(i,j)是累积失真,D(i,j)是局部失真。

当动态规划过程计算到固定结点(N,M)时,可以计算出该模板动态匹配的归一化距离,识别结果即该归一化距离最小的模板词条:x=argmin{S(N,Mx)}。

为了提高DTW识别算法的识别性能和模板的稳健性,提出了双模板策略,即x=argmin{S(N,M2x)}。第一次输入的训练词条存储为第一个模板,第二次输入的相同训练词条存储为第二个模板,希望每个词条通过两个较稳健的模板来保持较高的识别性能。与上面测试相同,也利用7个人说的100个人名,每个人名含3遍的数据库,比较DTW单模板和双模板的性能差别,结果更在表2中。

表2DTW不同模板数的识别率比较

DTW第1人第2人第3人第4人第5人第6人第7人平均单模板94.3%89.9%93.2%99.4%99.4%98.8%100%96.4%双模板99.4%96.6%98.5%100%100%98.8%100%99.0%

测试结果说明:通过存储两个模板,相当大地提高了DTW识别的性能,其稳健性也有很大的提高。因此,对特定人识别系统,采用DTW双模板是简单有效的策略。

综上所述,该嵌入式语音识别芯片系统采用了改进端点检测性能的FRED算法,12阶Mel频标倒谱参数(MFCC)作为特征参数,使用双模板训练识别策略。通过一系列测试,证明该系统对特定人的识别达到了很好的识别性能,完全可以满足家用电器中声控应用的要求。

2语音控制遥控器设计

目前家用遥控器主要为按键式,并有两种类型:一种是固定码型,每个键对应一种或几种码型,都是生产厂家预先设定好的,用户不能更改;另一种是学习型,具有自我学习遥控码的功能,可由用户定义遥控器的每个键对应的码型,它能够将多种遥控器集于一身,用一个遥控器就可控制多个家电,又可以作为原配遥控器的备份。由于现代家电功能不断增加,上述两种遥控器都有按键过多,用户不易记住每个键的含义等问题。将语音识别技术应用于学习型遥控器,利用语音命令代替按者对命令的记忆和使用,同时省去了大量按键,缩小了遥控器的体积。

语音控制遥控器的硬件框图如图2所示,它由两个独立的模块组成:语音信号处理模块和系统控制模块。

语音信号算是模块由DSP、快闪存储器(FLASH)、编解码器(CODEC)组成。其中DSP是整个语音识别模块的核心,负责语音识别、语音编解码,以及FLASH的读写控制。DSP的优点是运算速度快、内存空间大、数据交换速度快,可用来实现复杂的算法,提高识别率,减小反应延时,得到较高的识别性能。DSP芯片选用AnalogDevices公司的AD2186L,它具有如下特点:①运算速度达40MIPS,且均为高效的单调周期指令;②提供了40K字节的片内RAM,其中8K字(16Bit/字)为数据RAM,8K字(24Bit/字)为程序RAM,最大可达4兆字节的存储区,用于存储数据或程序;③3.3V工作电压,具有多种省电模式。AD2186L既能完成与语音信号算是相关的算法,又适合使用电池作能源的遥控器。FLASH和CODEC也都选用3.3V工作电压的芯片。FLASH为美国ATMEL公司的AT29LV040A(4MBit),它作为系统的存储器,主要用于存放以下内容:提示语音合成所需的参数,特定人训练后的码本数据,DSP系统的应用程序和学习和遥控码数据。CODEC选用美国TI公司的TLV320AC37,用来进行A/D、D/A变换、编码和解码。

系统控制模块由单片机、红外接收发送器、电源管理电路组成。单片机负责整个遥控器的系统控制。单片机作为主控芯片,进行键盘扫描,根据用户通过键盘输入的指令,分别完成学习遥控码;控制DSP进行语音训练、回放、识别;将识别结果转换成相应的遥控码,通过红外发光管发射出去。单片机与DSP之间通过标准的RS232串行协议通讯。

系统的控制软件流程图如图3所示。在使用前,按“学习键”进入学习状态,用户先对学习型遥控器训练语音命令,并使其学习与各语音命令相对应的原理控码型。使用时按“识别键”,进入语音识别状态,等待语音处理模块返回结果,若返回正确的识别结果,则把相应的遥控码发射出去。例如,原电视遥控器数字键“1”对应中央1台,用户的训练命令为“中央1台”,学习了原遥控器的数字键“1”的遥控码,并使其与训练命令“中央1台”对应起来。于是使用时只需对着学习型遥控器的麦克风说出“中央1台”,电视就会切换到中央1台。这样用户不需要记住每个电视台与台号的对应关系,相对于枯燥的频道数字,用户自定义的命令更容易记住。

若连续的30秒无正确的命令则遥控器进入休眠状态,单片机控制电源管理电路切换DSP和FLASH电源,单片机本身也进入休眠状态,直至用户按键,唤醒单片机,再由单片机控制恢复DSP和FLASH供电,重新开始工作。这是因为整个系统中,DSP的功耗最大,长时间不用时,关闭语音信号处理模块,可以显著地降低整个系统的功耗。

从实验室走向市场的过程中,可靠性与成本是遇到的最大挑战。采用双模板的DTW和两组端点检测FRED算法,可在系统资源和反应延时增加极小的情况下,有效地提高识别率和稳健性。该项技术成功地运用在学习型遥控器上,展现了语音识别技术在家电领域的广阔前景。

篇7:液晶显示在嵌入式系统中的应用

液晶显示在嵌入式系统中的应用

摘要:介绍了液晶显示在嵌入系统中的应用编程,给出了在液晶显示与系统接口的应用层编程中,采用环形结构算法来达到快速、简单地进行汉字代码的编码以及汉字的分页和分行显示的显示应用程序。

关键词:嵌入式系统;液晶显示;环形结构算法;汉字显示

1 引言

在嵌入系统中,一个良好的人机界面必须提供友善的菜单,同时应能实现汉字和图形显示,并应提供英文、数字输入和汉字输入功能。笔者采用香港精电公司的128×64点阵显示模块在以MPC860作为主CPU并以Nuclus PLUS为嵌入式操作系统的系统中进行液晶显示?取得了较为满意的效果。图1所示为其结构框图。

香港精电公司的128×64点阵模块内部自带液晶图形显示控制芯片T6963,其中C/D脚用于控制字与数据,RD和WR分别为读、写使能端。当WR为低时,C/D为高为写命令,C/D为低为写数据;而当RD为低时,C/D为高为读状态?C/D为低为读数据。另外,CE为器件使能引脚,D0~D7为数据和地址复用总线引脚。

(本网网收集整理)

2 应用编程

利用MPC860嵌入式系统的快速性,可将显示应用程序分为两层,其中底层为硬件接口层,上层为应用层。硬件接口层主要是显示液晶模块自带的ASCII函数和显示汉字代码函数。由于硬件各不相同,在此不作具体介绍。而上层应用层的主要功能是提供友善的菜单,同时实现汉字和图形显示,并提供英文、数字输入和汉字输入功能。由于硬件接口层的隔离作用,不同的系统具有一定的通用性,以下重点介绍应用层编程中的汉字代码编码方法和显示编程的实现这两部分。

2.1 汉字代码编码

一般西文为8×8点阵,因而显示一个西文字需要8个字节?而每个汉字占4个西文字体,因此显示一个汉字需要32个字节。汉字字库表为一张数据表? 每个汉字在数据表中,通常由32个字节组成一个点阵图形。由于ASCII码编码是由0X00-0X7F表示,因此?每个汉字可由两个字节0Xxx和0Xyy来表示,每个字节为0X80~0XFF(区别于ASCII代码)。第一汉字定义为0X80 0X80,依此类推直至0X80 0XFF ,0X81 0X80,……,……,0XFF 0XFF ,总计可以定义128×128=16384个汉字。

一个汉字代码表可简单表示为:

hz code table?INT?=?

//汉字“数”的`32字节的点阵图形代码为?

0x08?0x49?0x2A?0x08?0xFF?0x19?0x2C?0x4A?

0x10?0xFE?0x22?0x22?0x14?0x18?0x25?0x42?

0x40?0x40?0x40?0x84?0xFE?0x08?0x88?0x88?

0x88?0x90?0x50?0x20?0x50?0x88?0x0E?0x04?

//汉字“据”的32字节的点阵图形代码为?

0x10?0x13?0x12?0x12?0xFF?0x12?0x16?0x1B?

0x32?0xD2?0x13?0x15?0x15?0x15?0x59?0x21?

0x04?0xFE?0x04?0x04?0xFC?0x20?0x24?0xFE?

0x20?0x24?0xFE?0x04?0x04?0x04?0xFC?0x04,

}

2.2 显示编程

在系统显示中,主要的显示方式有页处理和行处理两种。系统可以根据按键来显示某一页。实际上,页也是由相应行来显示的。页中的行可由按键来改变。一个页能显示8行ASCII码或4行汉字代码,带有汉字的行一般要占有2个只有ASCII码的行,而页可以由任意多行组成。显示时,通过按键可控制能显示行,并可在行中输入汉字或ASCII码。

在设计中,所有的页可组成一个环形队列结构,页中的行也可组成一个环形队列结构,其关系如图2所示。图3所示是该系统的显示流程。

下面给出一个行结构:

typedef struct lcdLine

{

struct lcdLine *previous? //前一行

struct lcdLine *next? //后一行

unsigned short lineId? //行特征字

unsigned char showflag? //是否显示汉字

unsigned char start? //显示行号 ,汉字一

定是奇数行如 1,3,5,7

unsigned char lcdseg?16??

//显示的代码如是ASCII码,0X10显示0,

0X3C显示\ ?汉字为0X80 0X81 显示汉字“据”

void ?*flcdLine??struct lcdLine * plcdLine??

//处理行函数

};

由于页是由行组成的,所以页结构的定义如下:

typedef struct lcdPage

{

struct lcdLine *firstLine? //该页中的第一行

struct lcdPage *previous? //前一页

struct lcdPage *next? //后一页

unsigned short pageId? //页特征字

} lcdPage?

下面给出的是一个环行队列函数的程序代码:

VOID CSC Place On List?CS NODE **head? CS NODE *new node?

{

/* Determine if the list in non-empty. */

if ?*head?

{

/* The list is not empty. Add the new

node to the end of the list. */

new node->cs previous=?*head?

->cs previous?

(new node ->cs previous)->cs

next=new node?

new node-> cs next =?*head??

(new node->cs next)->cs previous

=new node;

}?

else

{

/* The list is empty? setup the head and

the new node. */

?*head? = new node?

new node -> cs previous = new node?

new node -> cs next = new node?

}

}

在建立了上述结构后,便可以得出行队列和页队列的组成方法:

lcdLine lcdLine?30??

lcdPage lcdPage?10?; //初始化列

lcdLine?0?..lcdseg?0?=0x80?

lcdLine?0?..lcdseg?1?=0x80?

lcdLine?0?..lcdseg?2?=0x80?

lcdLine?0?..lcdseg?3?=0xBC?

lcdLine?0?..lcdseg?4?=0x80?

lcdLine?0?..lcdseg?5?=0x97?

lcdLine?0?..lcdseg?6?=0x80?

lcdLine?0?..lcdseg?7?=0x98?

lcdLine?0?..lcdseg?8?=0x80?

lcdLine?0?..lcdseg?9?=0x99?

lcdLine?0?..lcdseg?10?=0x00?

lcdLine?0?..lcdseg?11?=0x00?

lcdLine?0?..lcdseg?12?=0x00?

lcdLine?0?..lcdseg?13?=0x00?

lcdLine?0?..lcdseg?14?=0x00?

lcdLine?0?..lcdseg?15?=0x00?

lcdLine?0?..start =1? //第二行起

lcdLine?0?..showflag =1? //汉字

lcdLine?0?.lineId =1001; //行标识

?firstlcdLine 1?=NULL?

CSC Place On List ?&firstlcdLine 1? &lcdLine?0??? //第一页中的第一行

CSC Place On List?&firstlcdLine 1?&lcdLine?1???

CSC Place On List ?&firstlcdLine 1? &lcdLine?2???

CSC Place On List ?&firstlcdLine 1? &lcdLine?3???由于四行即可组成一个循环队列,其中lcdLine?0?指定为第一页的第一个入口行,FirstlcdLine 1与lcdLine为同一行,lcdPage?0?页的入口行为firstlcd-Line;lcdPage?0?.firstLine=firstlcdLine 1?lcdPage?0?.pageID =1001,这样,依据该方法便可以生成任意多的页。具体方法如下:

lcdpage 1=NULL?

lcdPage Place On List?&lcdpage 1? &lcdpage?0???

lcdPage Place On List?&lcdpage 1? &lcdpage?1???

lcdPage Place On List?&lcdpage 1? &lcdpage?2???

lcdPage Place On List?&lcdpage 1? &lcdpage?3???

lcdPage Place On List?&lcdpage 1? &lcdpage?4???

lcdPage Place On List?&lcdpage 1? &lcdpage?5???

这样,用五页即可组成一个循环队列,其中lcd-page_1与lcdpage?0?为同一页。

对于行的显示,最基础的行显示方法如下:

void disp lcd Line?lcdMenu *lcdm?unsigned char start? //START为行号

{

unsigned char i?loop?

unsigned char zt?zt1?

unsigned char sign?

unsigned char offset?

unsigned char offlen?

unsigned char *phz?

unsigned char z0?

phz=?unsigned char *?&hz code table?

/汉字代码初地址

offset=start*16? //显示的位置 行号 *列号

offlen =0?

loop=0?

z0=0x00?

sign=lcdm->showflag? //是否为汉字

while?loop<16? //在同一行中从0列到15列

{

zt=lcdm->lcdseg?loop?? //取第一个代码

if?zt<=0x7F? /小于0X80为ASCII代码

{

disp self ascii?&zt?1?offset??

//在本行,显示自有的ASCII代码

if?sign==1?

{

disp self ascii?&z0?1?offset 16??

//在上一行,同一列的位置,不显示任何代码

}

offset=offset +1?

offlen=offlen +1?

loop++?

}

else

{

loop++?

zt1=lcdm->lcdseg?loop??

//取第二个代码

disp chinese??phz+?zt-0x80? *4096 +?zt1-0x80? *32??1?offset ?? //显示汉字

offset=offset + 2 ?

offlen=offlen +2?

loop++?

}

}

}

3 结束语

由于本系统在显示时采用了环形结构算法,因此,可以达到快速、简单的汉字显示效果。

篇8:液晶显示在嵌入式系统中的应用

液晶显示在嵌入式系统中的应用

摘要:介绍了液晶显示在嵌入系统中的应用编程,给出了在液晶显示与系统接口的应用层编程中,采用环形结构算法来达到快速、简单地进行汉字代码的编码以及汉字的分页和分行显示的显示应用程序。

关键词:嵌入式系统;液晶显示;环形结构算法;汉字显示

1 引言

在嵌入系统中,一个良好的人机界面必须提供友善的菜单,同时应能实现汉字和图形显示,并应提供英文、数字输入和汉字输入功能。笔者采用香港精电公司的128×64点阵显示模块在以MPC860作为主CPU并以Nuclus PLUS为嵌入式操作系统的系统中进行液晶显示?取得了较为满意的效果。图1所示为其结构框图。

香港精电公司的128×64点阵模块内部自带液晶图形显示控制芯片T6963,其中C/D脚用于控制字与数据,RD和WR分别为读、写使能端。当WR为低时,C/D为高为写命令,C/D为低为写数据;而当RD为低时,C/D为高为读状态?C/D为低为读数据。另外,CE为器件使能引脚,D0~D7为数据和地址复用总线引脚。

2 应用编程

利用MPC860嵌入式系统的快速性,可将显示应用程序分为两层,其中底层为硬件接口层,上层为应用层。硬件接口层主要是显示液晶模块自带的ASCII函数和显示汉字代码函数。由于硬件各不相同,在此不作具体介绍。而上层应用层的主要功能是提供友善的菜单,同时实现汉字和图形显示,并提供英文、数字输入和汉字输入功能。由于硬件接口层的隔离作用,不同的.系统具有一定的通用性,以下重点介绍应用层编程中的汉字代码编码方法和显示编程的实现这两部分。

2.1 汉字代码编码

一般西文为8×8点阵,因而显示一个西文字需要8个字节?而每个汉字占4个西文字体,因此显示一个汉字需要32个字节。汉字字库表为一张数据表? 每个汉字在数据表中,通常由32个字节组成一个点阵图形。由于ASCII码编码是由0X00-0X7F表示,因此?每个汉字可由两个字节0Xxx和0Xyy来表示,每个字节为0X80~0XFF(区别于ASCII代码)。第一汉字定义为0X80 0X80,依此类推直至0X80 0XFF ,0X81 0X80,……,……,0XFF 0XFF ,总计可以定义128×128=16384个汉字。

一个汉字代码表可简单表示为:

hz code table?INT?=?

//汉字“数”的32字节的点阵图形代码为?

0x08?0x49?0x2A?0x08?0xFF?0x19?0x2C?0x4A?

0x10?0xFE?0x22?0x22?0x14?0x18?0x25?0x42?

0x40?0x40?0x40?0x84?0xFE?0x08?0x88?0x88?

0x88?0x90?0x50?0x20?0x50?0x88?0x0E?0x04?

[1] [2] [3] [4] [5] [6]

【基于HMM的语音识别技术在嵌入式系统中的应用】相关文章:

1.嵌入式系统中的内存压缩技术

2.光纤通道技术在航电系统中的应用

3.1394技术及其在图像传输系统中的应用

4.多级存储技术在媒体资产管理系统中的应用

5.字符结构知识在车牌识别中的应用

6.模糊识别法在水库水质评价中的应用

7.生物制药技术在西药中的应用

8.FDO技术在地理信息系统中的应用

9.电子工程技术在单片机中的技术应用

10.现代教育技术在足球教学中的应用

下载word文档
《基于HMM的语音识别技术在嵌入式系统中的应用.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度: 评级1星 评级2星 评级3星 评级4星 评级5星
点击下载文档

文档为doc格式

  • 返回顶部