Profile - CN567


CN567

基于Nios II的聋儿语言训练系统

东南大学
电子科学与工程学院






Advisor

Name: 汤勇明

Members

No. Name English Name
1 黄宁峰 HuangNingfeng
2 吴海宁 WuHaining
3 宋寅晨 SongYinchen

Project Paper

1. 设计概述 (Preliminary Paper)

1.1 设计意图

      本课题系统设计并实现了一个适合聋儿使用的言语康复训练系统。系统框图如图1-1所示。系统围绕FPGA开发板(DE1)进行开发,通过VGA监视器和鼠标提供人机交互接口,耳机提供提示信息和范例语音,通过麦克风获取聋儿的语音信息以后,利用先进的语音信号处理和语音识别技术,将聋儿的语音与范例语音做对比分析,最后对聋儿的语音作出量化为匹配度的评判。

 

(图1-1)

      聋儿虽然有听力障碍,但大部分聋儿具有学习有声语言的基本条件:
1)  绝大多数聋儿发音器官比较完善。
2)  95%以上的听障儿童都拥有可加以运用的剩余听力,借助助听放大设备,可以有效地学习和理解有声语言。
3)  可以借助视觉、触觉和运动觉对其进行语言训练。
 
      根据聋儿言语训练的特点以及语音的声学特征和生理特征的关系,针对聋儿的发音异常和构音异常,我们设计了从声长训练、元音训练到辅音训练的言语辅助训练模块,训练聋儿发音时的呼吸、构音以及清晰度。
 
      据最新资料统计说明,我国听力语言残疾居视力残疾、肢残、智残等五大残疾之首,为2057万人,占中国人口总数的1.67%,其中7岁以下儿童约为80万人。我国聋哑人的语言康复训练始于20世纪60年代,但现在市面上很少有聋儿言语训练器材,且价格昂贵,家长通常将重植耳蜗后的孩子送入康复中心,但康复中心价格不菲,个别机构中的教师水平良莠不齐,且孩子言语能力水平不一,不能够很好的照顾到个体。
 
      相比之下,此系统价格低廉,构造简单,携带方便,完全适用于家庭,从而弥补了市场上的空缺;另外,本系统非常人性化,界面上可同时显示中文和英文注释,界面也比较生动有趣,能够吸引孩子们的注意力,操作简单,易于上手。所采用的对比训练法充分利用聋儿的视觉和残余听力,根据语音的声学特征和生理特征的关系,通过将聋儿的发音和正确的发音进行多方面的对比,来纠正聋儿的构音异常。

1.2 适用范围及针对用户群:

      本产品主要服务于会说话前丧失听力后又植入人工耳蜗或通过佩带助听器能听见声音的3~7岁之间的儿童。这只是一个市场的切入点。

      该设计具有一定的市场前景,现在市面上各种康复器材价格昂贵,进入康复中心也需一笔不小的费用,此产品价格低廉,构造简单,携带方便,可用于聋儿父母在家对聋儿的训练,也可用在各种康复中心和医院作为辅助治疗。

      如果我们对训练的内容,模式,界面进行修改和扩充,比如将系统的词汇用基于音素的识别方法来换成另一种特定的语言;或者用于给学习外语的人们进行发音训练,纠正初学外语时容易产生的发音错误,那么该系统就具有更为开阔的市场前景,可广泛应用于国内外各大相关机构,适合各种年龄,各类母语的人群。这样一来,受益的就不单是聋儿,所有处于学习语言初级阶段的人们都可以通过该系统更为高效、准确地掌握语言发音。

1.3利用Altera器件进行设计的意义:

1)利用Altera器件设计SOPC系统,突破了原先基于桌面电脑的专业聋儿语言训练系统的设计概念,使系统成本更低,使用和配置更加方便,也突破了传统的MCU+DSP芯片的数字信号处理系统的设计方法,将微处理器,DSP模块整合到一片FPGA中去,使得整个系统更加稳定。
 
2)Altera公司向开发者提供的丰富的软件开发资源。SOPC Builder是我们可以方便的定制NiosII处理器、外设、存储器和I/O。Matlab Simulink和DSP Builder可以帮助我们更加有效地进行数字信号处理部分的开发。
 
3)Altera公司提供的DE1开发板上提供了我们设计需要的许多硬件资源如高性能FPGA、SDRAM、Flash、SD卡读卡器、VGA D/A转换器,24位音频CODEC,这使我们专注于核心模块的开发,加速开发进程。
 
 
 
(Revision: 11 / 2008-09-14 23:43:58)

2. 功能描述 (Final Project Paper)

2.1 功能概述

本语言训练系统可分为三个部分:声长训练、元音训练以及辅音训练。

(图2-1语言训练系统)
 
声长训练就是对聋儿最大声时的训练,测试出聋儿的最大声长,从而培养他们自己调节呼吸的能力,聋儿在发音的时候可以通过屏幕上的进度条显示来了解自己发音的长度,一般我们要求聋儿发音长度达到10秒钟即可;元音训练及辅音训练中,我们主要是对聋儿分别进行元音和辅音的发音训练(元音、辅音见表2-1),聋儿可以按照屏幕上显示的发音口型进行模仿,如果觉得图像还无法准确表达,还可以参考口型图边上的文字说明(含中、英文),以使自己的发音口型能尽可能的与标准口型相一致,聋儿还可以先听一遍标准发音,然后再按下“Record”键录入自己的发音,系统会在屏幕上的进度条中显示出聋儿的发音与标准发音的匹配度,聋儿还可以通过按“Replay”键来听到标准发音与自己发音的对比。
2-1 元音、辅音表
 

2.2 实用功能

1)人机交互功能:在DE1 平台上提供了PS2 接口,我们可以将鼠标外设挂到Avalon 总线上,实现用户对系统的控制。
 
2)语音输入:系统允许语音信息实时的进入麦克风,通过传感器将模拟语音放大,wm8731音频编解码芯片将其转换为数字信号,从通信口送到语音识别模块。
 
3)口型动画示范:将正确口型显示在VGA监视器上,给聋儿一个直观的感官认识,易于模仿。
 
4)中英文分步解释:对于口型动画,我们还配上了分步的解释,将动画上所无法准确表现的口型要领通过文字描述出来,该解释既有中文又有英文。
 
5)真人标准发音:首先录入标准发音,存储在sd卡里,通过耳机播放。
 
6)评分:
  1)).声长训练:聋儿连续发一个长音通过传感器送进FPGA,为了集中孩子的注意力,屏幕上显示为一时间长度条,聋儿按照规定的时长发音,时间长度条显示目前的持续时间。
  2)).特征对比:其功能是将受训者的语音信号的特征(包括过零率、能量、相关、LPC倒谱系数),与系统设定的标准发音的特征进行比较,自定义的语音识别逻辑包含了语音识别所需的大部分功能,包括预处理,端点检测,LPC倒谱分析以及短时傅立叶变换等,语音识别逻辑通过Avalon总线向NiosII内核提供LPC倒谱和频谱等数据,NiosII对这些数据进行分析,再给受训者的发音评分。
  
(Revision: 13 / 2008-09-15 00:17:30)

3. 性能参数 (Final Project Paper)

1.总体资源利用(逻辑单元和存贮器运用情况)

2.语音处理自定义逻辑资源利用

 

3.系统时钟 100Mhz

4.液晶显示参数            分辨率      320*240pixels

                                        色彩数       4096

5.音频CODEC参数       采样率       8Khz

                                         比特率      16bits

(Revision: 2 / 2008-09-15 00:10:11)

4. 设计结构 (Preliminary Paper)

4.1 硬件设计

4.1.1 系统概述

  系统的硬件设计充分的利用了Altera Cyclone II FPGA芯片及DE1开发板上的资源。系统包括DE1学习开发板(包括使用了板上的FPGA芯片,SDRAM,SRAM,Flash,SD卡读卡器,24bit音频CODEC,VGA信号DAC),麦克风,耳机,PS/2鼠标,VGA监视器。系统的核心结构基于Altera公司的高性能FPGA芯片设计,结构如图4-1所示。

 
(图4-1)

   系统基于Nios II嵌入式软核设计,本设计在一片FPGA芯片上实现了一个Nios II核,具体功能分配见后续部分。在Avalon总线上挂接各类外设。图中紫色的部分是专门对语音处理识别进行的加速设计,分别是作为Avalon总线外设的语音识别自定义逻辑和作为Nios II自定义浮点运算指令集的逻辑,功能见以下详述。

4.1.2 语音处理和识别相关硬件的设计

  编制语音识别的自定义用户逻辑。通过AvalonMM总线接口挂接到系统的Avalon总线上。这样可以达到对语音信号的实时预处理,结构如图4-2所示:
 
(图4-2)
 
   利用用户自定义浮点运算指令,可以方便的用C语言编写出语音识别所需的大部分功能,包括预处理,端点检测等,语音识别逻辑通过Avalon总线向NiosII内核提供原始数据预处理后的数据,NiosII对这些数据进行自相关,LPC,LPC倒谱等分析。
 

4.1.3 输入输出

  VGA监视器显示训练的提示信息,耳机播放训练所需的音频,相关的多媒体数据信息存放在大容量的SD卡中,通过SD控制结构挂接在Avalon总线上,实时操作系统负责这些信息同SRAM和CODEC芯片之间的调度。
 
  整个系统的输入通过一个PS2鼠标进行控制,通过PS2控制接口与Avalon总线相连。
 
  麦克风负责获取聋儿的语音信息,通过24bit CODEC WM8731编码成数字信号,通过Avalon总线存入SDRAM缓冲区,cpu对相应数据进行读取,处理,分析,识别,最后显示判别结果。

4.2 软件设计

4.2.1 操作系统和GUI

  软件系统基于microC/OS-II系统设计,microC/OS-II是一种基于优先级的可抢占式硬实时内核,本系统用其设计第一是考虑其免费性,其二是考虑到Altera公司已经将其移植到了Nios II操作系统平台上,省去了我们的移植工作,加快了我们的开发进程。
 
  本系统运行microC/OS-II。主要功能是VGA显示的控制,对语音识别器的控制,时间日期的管理,语音输出控制,捕捉鼠标的输入控制信号等。
 
  系统在microC/OS-II实时操作系统上构建可视化操作环境microC/GUI,用来显示窗口界面,控件和图片文字信息。和常见的ucGUI设计相比,本设计主要做了如下的改动:1.硬件的驱动对基于存储器的驱动程序进行修改,以达到可以直接在本系统中在VGA上显示的的目的。2.去除了ucGUI的窗口管理部分,ucGUI的窗口不是很美观,我们拟用图片代替原本生硬的窗口界面,对我们需要使用的控件,对源程序重新修改以使其更加美观。

4.2.2 功能流程

  软件的处理流程如下图所示:
 
 
(图4-3)
 
  进入欢迎界面,如尚未注册用户,则新建一个用户;如果已建立用户,选择用户。然后就是选择训练内容,共有声长训练、元音训练、辅音训练三种。其中声长训练当用户开始发音时,进度条会显示用户的发音时间。元音训练与辅音训练的界面内容基本相似,用户可以听到标准音示范,也可以看相应的口型图及解释说明,用户发音后会显示用户的发音与标准音之间的匹配度,最后用户还可以听到标准音与自己发音的对比。当用户结束了训练,便可以点击退出程序。

4.2.3 语音识别匹配流程

        软件设计的核心是语音识别匹配器。其功能是将受训者的语音信号的特征(包括过零率、能量、相关、LPC倒谱系数),与系统设定的标准发音的特征进行比较,量化为匹配度评分输出。具体框图如下图所示。

              

(图4-4)

 

4.3  语音控制部分设计实现

人说话发出的声音叫作语音,具有称为声学特性的物理特性。语音信号是非平稳过程,是时变的,但语音信号的特点是随时间变换是缓慢的,在短时间内可认为是平稳的。短时信号处理可以在时域也可以在频域进行,时域分析具有简单,运算量小,物理意义明确等优点;频域分析比时域分析更有效,同时也增加了复杂度。这里我们采用了语音时域短时处理。
设定的目标只是实现单音素的识别匹配,语音处理的流程图如下:

4.3.1  采样

我们的前期工作中,我们前往南京南昌路小学用录音笔采集了十个男孩十个女孩的声音样本,他们的年龄都在八岁左右,录入二十多段采样语音,8khz的采样率。

4.3.2  预处理模块

预处理包括分帧,预加重,端点检测等。
分帧就是用原始语音信号乘以一个移动窗,2帧之间有重叠,窗口类型有汉宁,矩形窗,汉明窗等。本算法选取矩形窗作为窗函数,矩形窗函数公式如下所示,其中N为一帧语音数据的采样点数。
矩形窗公式:
       设经过预处理后的语音序列为
 
       数据采样8khz,帧长240(30ms),帧移80(10ms)。
 
在dsp builder实现方法如下:主要模块采样,为控制帧长,采样计数器当运算达到80次的时候使输出清零复位,虽然每帧只计算80点,把第一次计算值放在深度为3的寄存器中,这个寄存器每80个时钟移位一次,当寄存器中有3个值时,用并行加法器求和即为240个数据的和,下一个数据进入寄存器时,只要有一个数据更新,就实现了窗的交叠,这样,窗口每移动80个时间单位就会有240个数据的和的输出。
预加重的目的是增加语音信号中较弱的高频部分,用来滤除信号直流电平的变化造成的基线漂移,也可滤除50hz工频干扰,用fir滤波器实现。
公式计算:data(n)=S(n)-0.93*S(n-1)。
端点检测的作用是找出一段语音信号中语音命令的起点和终点的位置.本系统采用检测短时平均幅度和短时平均过零率的方法进行端点检测,精确地检测到语音的起点和终点,从而保证了系统的高识别率。
短时平均幅度的计算公式如下,所示n为帧长。
 
短时平均过零率计算公式如下:
 
      具体实现时,为了避免将多个字的一条语音命令误检为多条语音命令造成误识,本系统将允许的最大静音长度延长至15帧,同时在此段语音结束的结尾减去相应的静音以达到准确检测语音终点的目的.另外,为了避免短时噪音,本系统在端点检测时设定语音的最小长度,只有当语音超过此长度时才被判断为有效的语音命令,否则作为噪音放弃.
S(无声)U(清音)V(浊音)三种情况下短时平均幅度(M)和短时平均过零率(Z)的条件概率密度的示意图。
 
可以看出,浊音的短时平均幅度最大,无声的短时平均幅度最小。清音的短时过零率最大,无声居中,浊音的短时过零率最小。因此一般用短时平均幅度检测浊音,短时平均过零率检测清音。在背景噪声比较小的时候用平均能量来识别比较有效,在背景噪声比较大的时候用平均过零率来识别比较有效,在这里是两个参数联合进行识别。
 

4.3.3  特征提取

       首先进行基音周期估计,一般用自相关函数实现,假设 一段加窗语音信号,非零区间为n=0~N-1,      的自相关函数称为语音信号的短时自相关函数,     

 

 

 

 

 最后,基于短时自相关函数的基音周期估计最大峰与基音周期不一致,要求帧长大于2个基音周期;受共振峰的干扰,采取滤波或中心消波预处理。
特征提取要从语音波形中提取出重要的反映语音特征的相关信息,去掉相对无关的信息.为适应嵌入式系统cpu主频低,存储资源有限的特点,需要尽可能的减少计算量,保证实时性.本系统特征提取采用LPCC算法,主要步骤为:
 
 
1 计算自相关系数,公式上文已给出;
2 利用德宾法解矩阵方程计算16阶LPCC系数;
LPC分析基本原理介绍
线性预测分析(LPC)是对一绐定的时域离散线性系统用输出信号的过去值的线性组台来估计即将到来的输出值。一个语音的采样可以用过去若干个语音采样的线性组合来逼近,其中声道的数学模型如下图:
 
将语音生成的激励、声道和辐射模型全部谱效应简化为一个时变的数字滤波器
 
某一时刻n语音信号的估计值为:
预测误差为:
通过使实际语音采样和线性预测采样之间差值的平方和达到最小值,即进行最小均方误差的逼近,能够决定唯一的一组线性预测系数
其中:
 
这组方程称为LPC正则方程,其中R(l)称为自相关函数,它们是进行LPC分析的基础。
求解数字滤波器的参数和增益常数的过程即语音信号的线性预测分析,输出是线性预测系数,注意语音信号具有时变性,所以系数的预测同样要按帧进行。采用durbin递推算法,完整的递推过程是:
 
 
 
3 在求得LPC 后,使用下面的递推公式可以计算出该帧语音的LPC 倒谱(LPCC)系数。
其中和分别表示第t帧语音的第d维lpc系数和LPCC系数。
 
 

4.3.4  建立参考模式库

一个语训系统分为训练和识别两个阶段,前期训练阶段需采样足够多的样本确定一个用来匹配的样本参数向量,采样数据在经过预处理和lpcc系数运算后得到特征矢量参数,考虑到为变声的小男孩和小女孩的基频差不多,将所有包括十六个lpcc系数的向量做一个平均,建立训练语音的参考模式库。

4.3.5  模式匹配

识别阶段,用户输入语音后经过预处理和特征提取后,得到一个十六阶向量,这十六个数与模版向量对应相减,平方后相加求和,算出的误差值error大约在1~10之间,我们将这个范围映射到0%到100%之间,得到匹配率rate。
 
此外,error大于10,rate=0%;error小于1,rate=100%。
 

 

 

       浊音是周期信号,浊音的短时自相关函数也呈现明显的周期性,自相关函数的周期就是浊音信号的周期。清音接近于随机噪声,请音的短时自相关函数不具有周期性,且随着l的增大迅速减小。根据这个性质可以判断一个语音信号是清音还是浊音,还可以判断浊音的基音周期。

      可以证明,自相关函数是偶函数,且在l=0处取得最大值,且值为短时能量.

(Revision: 39 / 2008-09-15 11:42:01)

5. 设计方法 (Final Project Paper)

5.1概述

  Altera公司关于SOPC的设计理念可以使我们软硬件同时设计。在硬件设计中,我们主要是用了SOPC Builder构建整个系统,并使用了很多现有的ip核,用DSP builder构建了用户自定义逻辑。并使用了自定义浮点运算指令。

  软件方面,我们主要利用了NIOS IDE软件,在NIOS上使用了microC/OS-II,microC/GUI,zlgSD等软件,并利用硬件浮点运算的优势编写了语音处理的C语言代码。
  

以下是我们软件和硬件的具体设计方法

5.2硬件系统的设计

5.2.1硬件的总体设计方法


  用FPGA构建系统,本作品使用了基于SOPC的设计,围绕NIOS II处理器内核为核心,在Avalon总线上挂接诸多外设接口和自定义逻辑,具体设计请参见第四部分。
  由于我们将很多现有ip核添加到设计中来,尤其是Altera公司大学计划关于DE1开发板的一些ip核,这大大加快了我们开发的进程,本部分会着重介绍如何在系统中使用这些ip核,以及如何将这些ip核和我们的设计紧密的联系起来。
  另外由于这次竞赛组委会提供了Mathwork的Simulink软件,使得我们的一些关于信号处理的模块可以在Simulink中得到仿真,进一步可使用Altera公司的DSP builder软件通过simulink建立用户自定义逻辑。本作品中我们就利用DSP builder构造了复杂的用户自定义逻辑。

  图5-1为用SOPC生成的Nios系统,是用了F版的Nios-II CPU,添加了如VGA,Audio等众多外设。图5-2为QuartusII软件中的系统框图。

 

(图5-1 SOPC Builder生成系统截图) 

(图5-2 Quartus II软件中系统原理框图)

5.2.2 语音处理硬件设计


  在本次竞赛中,我们使用了Mathwork的Simulink软件和Altera公司的DSP builder软件,设计出由硬件实现的语音短时时域信号处理的用户自定义逻辑,通过Avalon MM总线挂接到Nios系统上,在Nios软件系统里,通过相关语句的调用,达到对语音信号的实时硬件处理。在实际使用过程中,效果良好,可以减轻NIOS内核和操作系统调度的负担,使系统更加稳定。

  本模块主要功能是实时计算语音信号的短时平均幅度Mn和短时过零率Zn,如第四部分详述,这两个语音信号的参数对判断语音的端点,对语音信号的进一步分析有着至关重要的作用。

  本模块分为Avalon MM写总线,预加重滤波器,短时平均幅度计算和短视过零率计算,数据和并以及Avalon MM读总线组成,系统框图如图5.3所示,DSP builder文件的截图如图5-4所示。
 

(图5-3 自定义语音处理逻辑功能框图)

(图5-4 DSP builder总体框架图)

  图5-5至图5-7是对于系统的详细描述,图5-5是FIR预加重滤波器模块,虽然DSP builder不支持浮点数的运算,但是支持定点小数的计算,这样在运算中用定点小数的中间变量可以轻松解决整数乘以小数的问题。图5-6是符号函数的实现,短时过零率的关键就在于符号函数,用ExtractBit模块取出整型的符号为生成+1或者-1。图5-7是交叠纷帧的实现,累乘器每80个点清空一次,同时把计算的值送入Shift Taps,Shift Taps的深度为三,每三个80点数据组成一帧,为240个点,相邻帧之间有80点的重合。

(图5-5 预加重滤波器)

(图5-6 符号函数的实现)

 

(图5-7 分帧的实现和累加)

 

 

  我们使用了Simulink进行了仿真。仿真的结果如图5-8所示。第一幅图是读某两个字时的原始波形,第二幅图为原始数据通过了一阶FIR预加重滤波器得到的波形,从波形中可以看出,直流分量有明显的减少,高频数据增益明显,第三和第四幅图分别是短时平均幅度和短时过零率的波形,可以看出两个字之间塞音的部分,虽然短时平均幅度较小,但是短时过零率仍保持着较高的值,说明通过这两个参数来共同判断声音的端点是非常有效的。

(图5-8 Simulink中仿真用户自定义模块)

  设计出的的用户自定义逻辑通过两个Avalon Slave端口挂接到Nios系统的Avalon总线上,输入输出各有16字长深度的FIFO,其中读入数据为16位音频数据(有符号16位整型),输出数据为32位语音参数,格式如下:

 

31                                       16
15                                              0
 短时平均幅度
短时过零率

 *因为考虑到实现最大的精度,数据处理作了一定的移位,上面的两个参数只是与实际参数成正比

 

5.2.3  VGA接口液晶屏显示


  本作品采用了普通的电脑用VGA液晶显示器作为用户界面输出器件,利用DE1开发板上的12位DAC电阻网络。
  VGA显示的方案主要区分在显存的使用上,一种是利用SDRAM加DMA控制器,这样做的好处是可以做到很高的分辨率和很大的颜色深度。另一种是单独利用DE1开发板上的SRAM作为显存,SRAM有速度快的优点,而且不会像SDRAM有拖滞效应。
  因为考虑到要利用SDRAM做语音信号的缓冲,读取SDRAM中语音的时候会频繁占用Avalon MM总线,如果同样使用这样会导致VGA显示异常,DE1开发板上提供了512Kb的SRAM,并且提供了基于SRAM设计的VGA显示ip核,利用此ip核,我们可以方便的实现320*240分辨率的4096色视频显示,可以符合我们的设计需要。
  以下是Altera公司大学计划的VGA ip核的结构框图,它通过AvalonMM总线存入数据,自动产生VGA时序。在使用过程中我们发现,这个ip核原本是针对DE2上的视频DAC设计的,而DE1上的电阻网络并没有VGA_Blank消隐信号,我们外加了自己编制的VGA消隐信号的模块,使得在ip核vga_blank输出为低电平的时候数字信号输出为高阻。模块如图5-10所示。

  表5-1为IP核的具体配置情况。


(图5-9 VGA IP CORE功能框图)

(图5-10 配合VGA IP CORE使用的消隐模块)


(表5-1 VGA IP核配置)
配置选项
取值
Development and Education Board
DE1 Board
Video Out Device
VGA connector
Display Mode
Pixel Mode
Colour Settings
16-bits RGB
Resolution
320*240

5.2.4  音频输入输出


  DE1开发板上提供了24bit 音频CODEC WM8713,而Altera大学计划的两个ip核Audio和AudioVideoConfig可以完成对此CODEC配置和使用。
  其中Audio的框图如下。它由时钟逻辑,Avalon总线逻辑,控制逻辑,和串并/并串转换逻辑组成。通过这个ip核,我们对将codec映射为了存储器,这样只要通过对相应地址的读和写,就可以实现捕捉声音和播放声音的功能。
  AudioVideoConfig可以自动通过I2C总线配置音频和视频的芯片,本作品通过该模块设置CODEC的时钟频率为18.4Mhz,采样率8Khz,比特率16bits。

(图5-11 AUDIO IP CORE框图)

5.2.5  PS/2鼠标接口


  PS/2接口用于许多现代的鼠标和键盘,由IBM最初开发和使用。DE1开发板上提供了6脚的mini_DIN PS/2连接器。图就是连接器的引脚定义。使用中,主机提供+5V电源给鼠标,鼠标的地连接到主机电源地上。

(图5-11 PS/2接口连接器引脚定义)

  PS/2鼠标接口采用一种双向同步串行协议。即每在时钟线上发一个脉冲,就在数据线上发送一位数据。在相互传输中,主机拥有总线控制权,即它可以在任何时候抑制鼠标的发送。方法是把时钟线一直拉低,鼠标就不能产生时钟信号和发送数据。在两个方向的传输中,时钟信号都是由鼠标产生,即主机不产生通信时钟信号。
  如果主机要发送数据,它必须控制鼠标产生时钟信号。方法如下:主机首先下拉时钟线至少100μs抑制通信,然后再下拉数据线,最后释放时钟线。通过这一时序控制鼠标产生时钟信号。当鼠标检测到这个时序状态,会在10ms内产生时钟信号。

(图5-12 鼠标到主机的传输时序)

(图5-13 主机到鼠标的传输时序)

  设计上我们同样使用了Altera公司大学计划提供的PS/2 ip核。它是我们可以轻松的完成PS/2的时序操作。


5.2.6 SD卡模块


  SD卡可以工作在高速的四线模式下,也可以用简单的SPI模式,经过分析原理图,我们确定DE1开发板上的SD卡只能工作在SPI模式下。我们设计中,SD存储一些范例的声音和图片,涉及的数据量不大,所以直接利用DE1开发板上的插槽,充分利用开发板上的资源。

  表5-2显示了SD卡在SPI模式下工作的针脚定义,从中可以看出,只要CS,DI,CLK,DO四根就可以操作SD卡,我们利用GPIO模拟SPI模式的SD卡接口。通过对普通口线的操作,完成SD卡的读写。图5-14显示了再SOPC Builder中添加的四个PIO,位宽为一Bit,这样非常便于操作。

               (表5-2 SPI模式针脚定义)  

针脚
名称
类型
描述
1
CS
I
片选(负有效)
2
DI
I
数据输入
3
Vss
S
4
Vcc
S
供电电压
5
CLK
I
时钟
6
Vss2
S
7
DO
O
数据输出
8
RSV
--
 
9
RSV
--
 

 S:电源供电,I:输入O:输出 I/O:双向 PP:I/O使用推挽驱动

(图5-14 PIO实现SD卡模块)

5.2.7  浮点运算自定义指令


  因为语音处理时,涉及了浮点运算,为了提高系统的性能,我们再CPU里添加了包含除法的浮点运算自定义指令,虽然耗费了一些逻辑单元,但是系统的性能大大的提升了。
 

5.3软件系统的设计

5.3.1microC/OS-II

在Nios IDE里,已经有移植成功在Nios处理器上的microC/OS的操作系统,在软件设计中,我们以microC/OS-II为设计基础完成了整个设计。microC/OS-II主要用来调度Task_mouse(鼠标命令读取),Task_showmouse(鼠标指针绘制),Task_paint(屏幕绘制),Task_voicecatch(声音读取)等任务。
 

5.3.2mircroC/GUI在液晶屏显示模块上的移植

 
1. GUI_Config.h的设置
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS                   (1) /* 使用操作系统*/
#define GUI_SUPPORT_TOUCH      (0) /* 不使用触摸屏*/
#define GUI_SUPPORT_MOUSE      (1) /* 使用鼠标 */
#define GUI_SUPPORT_UNICODE    (0) /* 不支持UNICODE*/
#define GUI_DEFAULT_FONT        &GUI_Font6x8
#define GUI_ALLOC_SIZE           12500 /* 不支持MEMDEV*/
 
#define GUI_WINSUPPORT            1 /* 支持窗口和控件*/
#define GUI_SUPPORT_MEMDEV       0 /* 不支持显示设备 */
#define GUI_SUPPORT_AA            0 /* 不支持抗锯齿  */
#endif /* Avoid multiple inclusion */
 
2.  LCDConf.h的配置
LCDConf.hLCD控制器的硬件配置文件,在这里配置了320*240分辨率,16位,RGB565色彩模式。由于NIOS可以直接进行32位读写访问,所以这里可以选择LCDLin32.c这个驱动文件,相关信息如图5-16所示。对应LCD_CONTROLLER必须配置为3200

(图5-16 3200LCD Driver驱动说明)

3. 驱动文件LCDLin32.c的修改
我们使用了Altera公司大学计划地VGA ip核,所以我们要做的就是配置LCD_READ_MEM(Off)和LCD_WRITE_MEM(Off, Data)这两个宏,由于microC/GUI是遵循线性偏移地址,而VGA ip核使用如图5-17所示x-y坐标模式的的地址存储方式,所以不能直接利用读写语句进行读写操作,需要编写坐标地址转换语句,我们编写了SRAM_addr_up(alt_u32 Off)和SRAM_addr_down(alt_u32 Off)函数分别获得该GUI偏移地址下两个像素的显存地址,并对这两个函数作了C2H加速,经试验,效果良好。

 

(图5-17 X-Y坐标)

5.3.3 PS/2鼠标在microC/GUI上的接口

  PS/2鼠标有四种工作模式:
Reset模式,当鼠标上电或主机发复位命令 0xFF给它时进入这种模式;
Stream模式鼠标的默认模式,当鼠标上电或复位完成后,自动进入此模式,鼠标基本上以此模式工作;
Remote模式,只有在主机发送了模式设置命令 0xF0后,鼠标才进入这种模式;
Wrap模式,这种模式只用于测试鼠标与主机连接是否正确。 
 
microC/GUI提供了PS/2鼠标的译码函数,本设计采用了PS/2的Remote工作模式,这样可以方便的用软件控制鼠标捕捉的频率,也可以加快我们的移植进程。
只需建立一个定时工作的任务,向鼠标定时索取数据,将接下来的数据用GUI_MOUSE_DRIVER_PS2_OnRx()命令送入GUI系统自动处理即可。
 

5.3.4 SD卡软件的编写

   本作品采用zlgSD进行SD卡的读写,只需修改读写口线的相关宏,就可以实现对SD的操作。如:

 

#define      SPI_SCK_CLR()               IOWR(SD_CLK_BASE, 0, 0)       /*  SCK 为低电平 */ 

#define      SPI_SCK_SET()                IOWR(SD_CLK_BASE, 0, 1)         /*  SCK 为高电平 */    

。。。。。。

 

 

5.3.5 语音处理软件的编写

对于语音处理的程序,我们现在Visual C++上编写了对应的程序,主要包括预加重滤波,分帧,自相关计算,Levinson-Durbin递推算法求解Yule-Wslker方程,LPC复倒谱的计算和LPC美尔倒谱系数的计算。
利用Matlab中的wavread语句将从小学采集到的语音样本读成txt文档由VC++程序读入求解出LPC美尔倒谱,在通过matlab绘制出不同样本的LPC美尔倒谱系数的曲线,如果曲线形状相似,则将多个美尔倒谱做平均运算。
下图是音i的LPC美尔倒谱的曲线图,其中红线为平均值。
(图5-19 LPCCMCC系数)
然后再在Nios里编写一样的代码,由于在Nios处理器中使用了浮点运算自定义指令,实验证明,这一步几乎可以直接移植,该程序在Nios处理器上的运行速度也是可以接受的。

 

(Revision: 19 / 2008-09-15 00:15:55)

6. 设计特点 (Preliminary Paper)

基于NiosII的聋儿语训系统有以下的设计特点:

1.基于FPGA的SOPC设计给全系统带来了低成本,高性能,高稳定性。
 
2.该产品设计思路新颖,价格低廉,构造简单,携带方便,完全适用于家庭,从而弥补了市场上的空缺;另外,本系统采用人性化设计,界面上的注释可同时显示英文和中文翻译,界面也比较生动鲜艳,能够吸引孩子们的注意力,操作简单,易于上手。
 
3.本设计能创造出一定的社会价值。目前全社会都提倡要人性关怀残疾人群体,在社会各方面都要为残疾人的便利而考虑。我们的设计成果能够给有听觉残疾的人带来福音,让他们能够通过一定的训练达到开口说话并且发音标准的目的,给这些聋人未来的生活带来了极大的便利。
 
4.本设计对现有的多种语音识别方法进行改进,综合应用,从而提高识别效率,设计出适合聋儿语言训练的语音匹配算法。
 
5.设计使用了NiosII处理器系统,使设计思路更加简单明了,系统的速度和性能也大大的提升。
 
6.设计基于uc/OS-II实时操作系统和ucGUI图形化操作界面,简化了软件的设计。
 
7.本设计进行了多层次的优化,包括利用使用用户自定义指令加快部分运算的速度,定制自定义逻辑对音频信号的预处理及特征提取进行加速,利用Avalon ST进行数据传输的加速。
(Revision: 6 / 2008-09-14 23:15:51)

7. 总结 (Final Project Paper)

       近三个月来的努力,让我们得到的不单是最后这样的一个作品,也让我们得到了在这一整个过程中积累下来的经验。这一过程中虽然充满了很多困难,但是通过我们三人的团结合作,这些困难都无法阻挡我们的进步。

       我们本次大赛的作品“基于NiosII的聋儿语言训练系统”按照预定的计划,还算是比较圆满的完成了,虽然还是有一些地方可以得到更好的完善。在竞赛过程中,我们得到了很多来自Altera公司的技术支持,我们能够非常便捷地在Altera公司网站上找到相应的资料。当然,我们的作品还是依靠了Nios II处理器强大处理功能和可靠的运行特性,使用了uc/osII、ucGUI、ucFS,让我们的作品能够更高效的发挥其作用,同时也能体现出它特有的人性关怀。我们还深刻体会到了SOPC理念的优势所在,它可以使我们方便快捷的构件系统,开发软硬件,同时利用现有IP核也可以使设计工作事半功倍。

       我们是一个由本科生组成的团队,我们自知我们的能力有限,可能无法去与一些研究生学长们比较。但是我们在这一段时间里面,没有泄气,没有放弃,这种挑战性反而激发了我们的潜能,让我们去尽自己最大的能力投入在系统的设计上。这一过程中我们学到了很多。感谢Altera公司给予我们这样一个机会锻炼自己。

       由于时间和经验的限制,本系统尚有很多不足之处,例如只是采用了比较简单的语音识别算法,对于辅音而言,识别率做不到很高,没有充分利用dsp builder的便利等,我们会在以后的比赛中加以改进。

       最后,感谢一直以来对我们的研究给予指导和提供帮助的指导老师汤勇明老师,和为了我们前期采样提供方便的南京南昌路小学的刘瑞雪老师,感谢所有这段时间内支持我们比赛的人。

 

(Revision: 8 / 2008-09-14 23:59:09)