语音合成的思路、语音的声学特征、声音采样的一些资料

语音合成:把语音波形文件重现,以一种灵活的方式,只用极少数的基础数据,好比元音辅音的语音参数,那么首先须要研究元音辅音的语音学性质。html

先从元音开始,根据相关资料,不一样的元音是由相同的原始声带音经过不一样的共振腔(由声腔形状的变化决定)产生不一样的共振效果,致使其频谱发生很大变化而得以区分。通常来讲每一个频谱都有三个振幅比较强的频率区,在频谱上呈现为波峰状,称为“共振峰”(formant),从低频到高频顺序排列为第一共振峰、第二共振峰和第三共振峰,简称为F一、F二、F3,还能够有F四、F5,不过与语音关系不大,所以忽略。前端

原始声带音的基本特色是,谐波的频率越高,振幅就越小,频谱的振幅曲线从高到低,造成明显的斜坡,原始声带音的频率称为基频F0(疑问:原始声带音的频谱图中有多个频率,哪个是基频?难道都是?)ios

元音的共振峰频率和基频之间没有相互依存的关系。基频由声带颤动的频率决定,共振峰频率则取决于共振腔的形状,两种频率的变化是彼此独立的。git

要注意对频谱图和波形图的对照使用:二维频谱所表现的只是频率和振幅的二维关系,并无包括时间因素,分析一个音段,不论切分得多么小,都必然占有一段时间,只有可以反映频率、振幅、时间三维关系的频谱,才可以把一个音段的声学特征所有表现出来。好比现代语音学研究经常使用的语图仪就是这样一种动态频谱仪,语图仪输出的语图中,横坐标是时间,单位毫秒,纵坐标是频率,单位HZ,振幅的强弱经过图形痕迹的浓度来表示,颜色越深,说明振幅越强,颜色越浅,说明振幅越小,振幅的单位是分贝dB。web

波形图用来描述时域信号,横轴为时间(能够直观地看到波形周期),纵轴为振幅;频谱图用来描述频域信号,横轴为频率,纵轴为dB化的幅值,时域信号和频域信号能够经过FFT、IFFT算法来转换(快速傅里叶变换和快速傅里叶变换的逆变换),有不少在时域没法完成的信号处理算法能够在频域上轻松处理。缺点是使用FFT会出现频谱泄露。算法

频谱图:数据库

频谱图

频谱图来自 http://www.innovateasia.com/cn/win_2008/CN321.htmwindows

 

语图(下面的图,上面那个是波形图):数组

语图I

语图来自 中国社会科学院语言研究所语音研究室(http://ling.cass.cn/yuyin/spectrum/spectrum.htm)缓存


http://www.it9000.cn/tech/CTI/wav.html

WAV文件格式介绍

文件是Windows标准的文件格式,WAV文件做为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文Resource Interchange FileFormat的缩写,每一个WAV文件的头四个字节即是“RIFF”。WAV文件由文件头和数据体两大部分组成。其中文件头又分为RIFF/WAV文件标识段和声音数据格式说明段两部分。WAV文件各部份内容及格式见附表。常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。采样率是指:声音信号在“模→数”转换过程当中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH); 而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别表明左右两个声道。WAV文件数据块包含以脉冲编码调制(PCM)格式表示的样本。WAV文件是由样本组织而成的。在单声道WAV文件中,声道0表明左声道,声道1表明右声道。在多声道WAV文件中,样本是交替出现的。

WAV文件格式说明表

文件头 偏移地址 字节数 数据类型 内 容
00 H 4 char "RIFF"标志
04 H 4 long int 文件长度
08 H 4 char "WAV"标志
0C H 4 char "fmt"标志
10 H 4   过渡字节(不定)
14 H 2 int 格式类别(10H为PCM形式的声音数据)
16 H 2 int 单声道为1,双声道为2通道数
18 H 2 int 采样率(每秒样本数),表示每一个通道的播放速度
1C H 4 long 波形音频数据传送速率,其值为通道数×每秒数据位数×每样 本的数据位数/8。播放软件利用此值能够估计缓冲区的大小
22 H 2   每样本的数据位数,表示每一个声道中各个样本的数据位数。若是有多 个声道,对每一个声道而言,样本大小都同样。 24H 4 char 数据标记符"data" 28H 4 long int 语音数据的长度

PCM数据的存放方式:

样本1  样本2

8位单声道 0声道 0声道

8位立体声 0声道(左) 1声道(右) 0声道(左) 1声道(右)

16位单声道 0声道低字节 0声道高字节 0声道低字节 0声道高字节

16位立体声 0声道(左)低字节 0声道(左)高字节 1声道(右)低字节 1声道(右)高字节

PCM数据的存放方式:

WAV文件的每一个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需 的最小字节数。首先存储低有效字节,表示样本幅度的位放在i的高有效位上, 剩下的位置为0,这样8位和16位的PCM波形样本的数据格式以下所示。

样本大小 数据格式 最大值 最小值
8位PCM unsigned int 225 0
16位PCM int 327 67

 

http://210.28.216.200/cai/dmtjishu/course2/course2-1.htm#nowhere

一. 模拟音频和数字音频

  1.模拟音频

  物体振动产生声音,为了记录和保存声音信号,前后诞生了机械录音(以留声机、机械唱片为表明)、光学录音(以电影胶片为表明)、磁性录音(以磁带录音为表明)等模拟录音方式,二十世纪7、八十年代开始进入了数字录音的时代。

  声音是机械振动在弹性介质中传播的机械波。声音的强弱体如今声波压力的大小上,音调的高低体如今声音的频率上。声音用电表示时,声音信号在时间和幅度上都是连续的模拟信号。声音信号的两个基本参数是频率和幅度。频率是指信号每秒钟变化的次数,用Hz表示。幅度是指信号的强弱。

  2.数字音频

  数字音频主要包括两类:波形音频和MIDI音频。

  模拟声音在时间和幅度上是连续的,声音的数字化是经过采样、量化和编码,把模拟量表示的音频信号转换成由许多二进制数1和0组成的数字音频信号。数字音频是一个数据序列,在时间和幅度上是断续的。

  计算机内的基本数制是二进制,为此咱们要把声音数据写成计算机的数据格式。将连续的模拟音频信号转换成有限个数字表示的离散序列(即实现音频数字化),在这一处理技术中,涉及到音频的采样、量化和编码。

  二.数字音频的采样和量化

  声音进入计算机的第一步就是数字化,数字化实际上就是采样和量化。连续时间的离散化经过采样来实现,若是每隔相等的一小段时间采样一次,称为均匀采样(uniform sampling);连续幅度的离散化经过量化(quantization)来实现,把信号的强度划分红一小段一小段,若是幅度的划分是等间隔的,就称为线性量化,不然就称为非线性量化。

  在数字音频技术中,把表示声音强弱的模拟电压用数字表示,如0.5V电压用数字20表示,2V电压是80表示。模拟电压的幅度,即便在某电平范围内,仍然能够有无穷多个,如1.2V,1.21V,1.215V…。而用数字来表示音频幅度时,只能把无穷多个电压幅度用有限个数字表示。即把某一幅度范围内的电压用一个数字表示,这称之为量化。

  计算机内的基本数制是二进制,为此咱们也要把声音数据写成计算机的数据格式,这称之为编码,模拟电压幅度、量化、编码的关系举例以下表。

模拟电压、量化和编码
电压范围(V)
量化(十进制数)
编码(二进制数)
0.5~0.7
2
011
0.3~0.5
3
010
0.1~0.3
1
001
-0.1~0.1
0
000
-0.3~-0.1
-1
111
-0.5~-0.3
-2
110
-0.7~-0.5
-3
101
-0.9~-0.7
-4
100

声音数字化须要回答两个问题:①每秒钟须要采集多少个声音样本,也就是采样频率(fs)是多少,②每一个声音样本的位数(bit per sample,bps)应该是多少,也就是量化精度。

  1. 采样频率

  采样频率是指将模拟声音波形数字化时,每秒钟所抽取声波幅度样本的次数,采样频率的计算单位是kHz。一般,采样频率越高声音失真越小,但用于存储音频的数据量也越大。

  音频其实是连续信号,或称连续时间函数x(t)。用计算机处理这些信号时,必须先对连续信号采样,即按必定的时间间隔(T)取值, 获得x(nT)(n为整数)。T称采样周期,1/T称为采样频率。称x(nT)为离散信号。离散信号 x(nT) 是从连续信号 x(t) 上取出的一部分值。

  采样定理:设连续信号x(t)的频谱为x(f),以采样间隔T采样获得离散信号x(nT),若是知足:

    当|f|≥fc时,fc是截止频率

    T≤ 1/2fc 或fc≤ 1/2T

    则能够由离散信号x(nT)彻底肯定连续信号x(t)。

    当采样频率等于1/(2T)时,即fN =1/2T,称fN为奈奎斯特频率。

  采样频率的高低是根据奈奎斯特理论(Nyquist theory)和声音信号自己的最高频率决定的。奈奎斯特理论指出,采样频率不该低于声音信号最高频率的两倍,这样就能把以数字表达的声音还原成原来的声音,这叫作无损数字化(lossless digitization)。

  一般人耳能听到频率范围大约在20Hz~20kHz之间的声音,根据奈奎斯特理论,为了保证声音不失真,采样频率应在40kHz左右。经常使用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等。


  2. 量化精度(也称量化位数、量化级、样本尺寸、采样精度等)

  量化是将通过采样获得的离散数据转换成二进制数的过程,量化精度是每一个采样点可以表示的数据范围,在计算机中音频的量化位数通常为四、八、1六、32位(bit)等。例如:量化精度为8bit时,每一个采样点能够表示256个不一样的量化值,而量化精度为16bit时,每一个采样点能够表示65536个不一样的量化值。量化精度的大小影响到声音的质量,显然,位数越多,量化后的波形越接近原始波形,声音的质量越高,而须要的存储空间也越多;位数越少,声音的质量越低,须要的存储空间越少。

  采样精度的另外一种表示方法是信号噪声比,简称为信噪比(signal-to-noise ratio,SNR),并用下式计算:

   SNR= 10 log [(Vsignal)2 / (Vnoise)2]=20 log (Vsignal / Vnoise) 
   其中,Vsignal表示信号电压,Vnoise表示噪声电压;SNR的单位为分贝(db)

   例1:假设Vnoise=1,采样精度为1位表示Vsignal=21,它的信噪比SNR=6分贝。 
   例2:假设Vnoise=1,采样精度为16位表示Vsignal=216,它的信噪比SNR=96分贝。

  量化采样的过程以下:先将整个幅度划分红为有限个小幅度(量化阶距)的集合,把落入某个阶距内的样值归为一类,并赋予相同的量化值。

  若是量化值是均匀分布的,咱们称之为均匀量化,也称为线性量化。

均匀量化

  若是大输入信号采用大的量化间隔,小输入信号采用小的量化间隔,这样就能够在知足精度要求的状况下使用较小的位数来表示。数据还原时采用相同的原则。量化值是非均匀分布的,咱们称之为非均匀量化,也称非线性量化。

 非均匀量化


  3. 声道数  

  记录声音时,若是每次生成一个声波数据,称为单声道;每次生成两个声波数据,称为双声道。使用双声道记录声音,可以在必定程度上再现声音的方位,反映人耳的听觉特性。

  4. 声音质量与数据率

  根据声音的频带,一般把声音的质量分红5个等级,由低到高分别是电话(telephone)、调幅(amplitude modulation,AM)广播、调频(frequency modulation,FM)广播、激光唱盘(CD-Audio)和数字录音带(digital audio tape,DAT)的声音。在这5个等级中,使用的采样频率、样本精度、通道数和数据率列于下表。
表: 声音质量和数据率
质量

采样频率(kHz)

样本精度(bit/s)

单道声/立体声

数据率(kB/s) (未压缩)

频率范围

TEL

8

8

单道声

8

200~3400 Hz

AM

11.025

8

单道声

11.0

50~7000Hz

FM

22.050

16

立体声

88.2

20~15000Hz

Adobe SystemsCD

44.1

16

立体声

176.4

20~20000 Hz

DAT

48

16

立体声

192.0

20~20000 Hz


  5. 数字音频的存储

  通常来讲,采样频率、量化位数越高,声音质量也就越高,保存这段声音所用的空间也就越大。立体声(双声道)是单声道文件的两倍。
  即:文件大小(B)=采样频率(Hz)×录音时间(S)×(量化精度/8)×声道数(单声道为1,立体声为2)

  如:录制1分钟采样频率为44.1KHz,量化精度为16位,立体声的声音(CD音质),文件大小为:
    44.1×1000×60×(16/8)×2=10584000B≈10.09M

  三. 数字音频的文件格式

  声音数据有多种存储格式,这里咱们主要介绍WAV 文件、MIDI文件。

  1. WAV 文件  

  WAV 文件主要用在PC上,是微软公司的音频文件格式,又称为波形文件格式,它来源于对声音模拟波形的采样,用不一样的采样频率对声音的模拟波形进行采样能够获得一系列离散的采样点,以不一样的量化位数把这些采样点的值转换成二进制数,而后存盘,就产生了声音的WAV文件。

  声音是由采样数据组成的,因此它须要的存储容量很大。用前面咱们介绍的公式能够简单的推算出WAV文件的文件大小。


  2. MIDI文件  

  MIDI是Musical Instrument Digital Interface的首写字母组合词,可译成“电子乐器数字接口”。用于在音乐合成器(music synthesizers)、乐器(musical instruments)和计算机之间交换音乐信息的一种标准协议。MIDI是乐器和计算机使用的标准语言,是一套指令(即命令的约定),它指示乐器即MIDI设备要作什么,怎么作,如演奏音符、加大音量、生成音响效果等。MIDI不是声音信号,在MIDI电缆上传送的不是声音,而是发给MIDI设备或其它装置让它产生声音或执行某个动做的指令。当信息经过一个音乐或声音合成器进行播放时,该合成器对系列的MIDI信息进行解释,而后产生出相应的一段音乐或声音。

  记录MIDI信息的标准格式文件称为MIDI文件,其中包含音符、定时和多达16个通道的乐器定义以及键号、通道号、持续时间、音量和击键力度等各个音符的有关信息。因为MIDI文件是一系列指令而不是波形数据的集合,因此其要求的存储空间较小。


  3. WAV文件和MIDI文件的区别


  WAV文件记录的是声音的波形,要求较大的数据空间;MIDI文件记录的是一系列的指令,文件紧凑占用空间小,预先装载比WAV容易,设计播放所需音频的灵活性较大。WAV文件可编辑性好于MIDI,音质饱满。

  WAV文件适合于:
    (1) 计算机资源足够处理数字文件。
    (2) 有语言会话的须要。 
    (3) 对回放设备没有特定要求。

  MIDI文件适合于: 
    (1) 没有足够的RAM、硬盘空间或CPU处理能力 
    (2) 具有符合要求的回放设备 
    (3) 具备高质量的声源 
    (4) 没有语言对话的须要

表: 常见的数字声音文件扩展名

文件的扩展名

说明

au

Sun和NeXT公司的声音文件存储格式(8位μ律编码或者16位线性编码)

Aif

Apple计算机上的声音文件存储格式(Audio Interchange File Format)

ape

Monkey's Audio

mid

Windows的MIDI文件存储格式

mp3

MPEG Layer III

rm

RealNetworks公司的流放式声音文件格式(RealMedia)

ra

RealNetworks公司的流放式声音文件格式(RealAudio)

voc

声霸卡存储的声音文件存储格式(Creative Voice)

wav

Windows采用的波形声音文件存储格式

wrk

Cakewalk Pro软件采用的MIDI文件存储格式

四.音频信号的特色

  音频信号处理的特色以下:
  (1) 音频信号是时间依赖的连续媒体。所以音频处理的时序性要求很高,若是在时间上有 25ms 的延迟,人就会感到断续。
  (2) 理想的合成声音应是立体声。因为人接收声音有两个通道(左耳、右耳),所以计算机模拟天然声音也应有两个声道,即立体声。
  (3) 因为语音信号不只仅是声音的载体,同时情感等信息也包含其中,所以对语音信号的处理,要抽取语意等其它信息,如可能会涉及到语言学、社会学、声学等。

  从人与计算机交互的角度来看音频信号相应的处理以下:
  (1) 人与计算机通讯(计算机接收音频信号)。音频获取,语音识别与理解。
  (2) 计算机与人通讯(计算机输出音频)。 音频合成( 音乐合成,语音合成)、声音定位(立体声模拟、音频/视频同步)。
  (3) 人—计算机—人通讯:人经过网络,与处于异地的人进行语音通讯,须要的音频处理包括:语音采集、音频编码/解码、音频传输等。这里音频编/解码技术是信道利用率的关键。

 

http://www.chinaaet.com/article/index.aspx?id=14965

语音信号产生模型的创建及应用

王莉华 时间:2009年06月09日

    摘 要:从人类语音产生的机理出发,介绍了语音信号的特征和语音信号的语谱图,引出了语音信号的产生模型。同时讨论了在语音信号产生的模型应用中,线性预测编码方法及语音产生模型在语音合成和语音识别中的应用原理,体现了语音产生模型在语音处理技术方面的重要地位。
    关键词:模型;频率;线性预测编码

 

    语音由一连串的音所组成,这些音及其相互间的过渡就是表明信息的符号。这些符号的排列由语音的规则所控制。对这些规则及其在人类通讯中的含义的研究属于语言学的范畴。但对语音信号加以处理以改善或提取信息时,有必要对语音产生的机理进行讨论。
    图1为发音器官示意图。声道起始于声带的开口(即声门处)而终止于嘴唇,它包含了咽喉(链接食道和口)和口(或称为口腔)。声道的截面积取决于舌、唇、颌以及小舌的位置,它能够从0 (彻底闭合)变化到约20 cm2,鼻道则从小舌开始到鼻孔为止。当小舌下垂时,鼻道与声道发生声耦合而产生语音中的鼻音。另外,图中还包含了由肺、支气管、气管组成的次声门系统,这个次声门系统是产生语音能量的源泉。当空气从肺里呼出时,呼出的气流因为声道某一地方的收缩而受到扰动,语音就是这一系统在此时辐射出来的声波。

 


    语音的声音按其激励形式的不一样可分为三类:浊音、摩擦音和爆破音。浊音:当气流经过声门时,若是声带的张力恰好使声带发生张弛振荡式的振动,就能产生准周期的空气脉冲,这一空气脉冲激励声道获得浊音,如音标中的“U”、“d”、“w”、“i”、“e”等为浊音。摩擦音或称为清音:若是声道在某处(通常在接近嘴的那端)发生收缩,同时迫使空气以高速冲过这一收缩部分而产生湍流,从而获得摩擦音,此时创建的宽带噪声源激励了声道,如音标中的“∫”就是摩擦音;爆破音:若是使声道前部彻底闭合,在闭合后创建起气压,而后忽然释放,这样就获得了爆破音,如音标中的“t∫”就是爆破激励产生的。
1 语音信号的特征和语谱图
    图1中声道和鼻道都表示为非均匀截面的声管,当声音产生之后就顺着声管传播,它的频谱形状会被声管的选择性所改变。这相似于人们在管风琴或管乐器中所看到的谐振现象。在此将声道管的谐振频率称为共振峰频率。共振峰频率和声道的形状与大小有关,每种形状都有一套共振峰频率做为其特征。改变声道的形状就产生不一样的声音,所以,当声道形状改变时,语音信号的谱特性也随之改变。
    语谱图是经过语谱仪画出的、以显示语音信号的通用图。它的垂直方向表示频率,水平方向表示时间。图2表示了一段英语语句的语音信号。

 


    得到这些图的原理大体以下:
    首先把语音信号拆成短的时段,通常为2 ms~40 ms,而后在合适的窗口长度上使用FFT找每一短时段的频谱。图中每一点表示在给定时间和给定频率范围内频谱的能量。段的长度是根据频率分辨率和时间分辨率要求折中选择的。目前数字信号处理技术水平已可以实时处理语音频谱随时间的变化,这就意味着, FFT和显示处理可以在下一段数据捕获前完成。例如,采样频率为8 kHz(由采样定理知,信号带宽的上限为4 kHz),一段长度内有256个采样点,FFT和显示处理时间必须小于32 ms。
    从英文字“rain”中字母a的实例代表:语音信号有周期的时域波形,如图2(a)所示;它的频谱相似于一串有间隔的谐波,如图2(b)所示。一样,字“storm”中的字母s的实例代表:摩擦音时域信号为噪声,如图2(c)所示,它的频谱如图2(d)所示。这个频谱证实对声音的2个主要源都存在共振峰频率的影响。
    在图3中,图的下半部分是相应的语谱图,语音能量由颜色的深浅来表示,颜色越深,语音能量越强。

 


    由图3可知,语音样例“他去无锡市,我到黑龙江”的每个汉字的发音对应一组频谱,有其基音和谐波。基音和谐波的宽度不等说明有共振峰频率的影响。从短时稳定的频谱存在说明语音信号存在短时间相关性,即尽管模拟声道的数字滤波器参数是随时间改变的,可是在很短的时间(如几毫秒)内,因为存在肯定的周期性频谱,于是能够认为,在该段时间内,数字滤波器参数不随时间而变化。能够使用线性预测方法,即一个语音采样值可以由前面若干个采样值的组合逼近,故称为线性预测。所以,每个汉字语音对应一组线性预测系数,也就是对应一组肯定的声道数字滤波器系数。
2  语音信号的产生模型
    根据上面的分析,能够用近期全部语音合成和识别技术采用的人类语音模型来模拟语音信号的产生,如图4所示。

 

 

    用随机噪声发生器产生噪声源模拟摩擦音(汉语称清音),利用音调或称基音周期控制脉冲串产生器模拟元音(汉语称浊音)。用增益函数表示声音振幅。模拟声道的数字滤波器是一个线性时变滤波器。
3  线性预测编码(LPC)
    线性预测编码LPC( Line Predictive Coding )方法在语音信号产生模型应用中是相当重要的,下面给出它的物理概念和方法。采样后的语音是离散信号,能够利用Z变换进行分析计算。设声道滤波器为一个全极点滤波器,其传递函数为V(z),则输出信号为:
    S(z)=E(z)×V(z)=G×E(z)/A(z)                              (1)
式中,E(z)为声道滤波器的激励e(n)的Z变换;A(z)为声道滤波器的逆滤波器,是全零点滤波器;G为增益函数,表示声音振幅的一个参数;S(z)为合成的语音。在已知激励和滤波器参数后,可获得合成语音,故(1)式称为合成模型。由(1)式可得:
    E(z)=S(z)×A(z)                                           (2)
(2)式为(1)式的逆运算,故称为语音分析模型。
    若逆滤波器为A(z),输入语音信号为S(z),则输出即为激励信号E(z)。然而,A(z)是未知的,须要使用线性预测的方法求得。
    由于A(z)是全零点滤波器,其结构如图5所示。经过证实可得:
    
    即A(z)是由M节滤波器组成,式中i是滤波器的阶数,ai是逆滤波器的系数,有待肯定。把(3)式代入(2)式,并将Z变换的式子转换为离散值来写,则有:
    
    (4)式说明对样本序列值S(n),n时刻序列值由它前面M个样本线性预测获得。即:
    
    同时表示,激励信号e(n)是语音信号S(n)与预测信号之差,称为预测偏差。(5)式可写为Z变换形式:
    
式中,F(z)为预测滤波器值,若输入A(z),输出即为预测值,见图5。

 

 

    可见,这里存在2个滤波器,1个是预测滤波器F(z),可用来求预测值;另外一个为逆滤波器,它等于1-F(z),可用来从激励信号求出重建的语音信号。使用这2个滤波器关键是求系数ai。利用公式(4),预测偏差e(n)越小,预测值越接近信号值S(n)。可采用e(n)的最小均方偏差准则来肯定ai的系数。若S(n)已知,在短期范围内(如20 ms),在8 kHz采样频率下就有160个S(n)样本点,利用它来训练预测滤波器A(z),系数ai就能够肯定。系数ai是时变的,但在短的时限内是不变的。所以,在线性预测算法中,系数ai的计算每帧都要进行1次,当前帧系数ai计算值做为下一次计算时用。
4  语音产生模型的应用
    语音产生模型说明一个短时的语音信号能够用3个参数来定义:(1)从周期性波和随机噪声中选择1个做为激发态;(2)若是使用周期性波,必须选择1个频率做为基音;(3)模拟声道响应所使用的数字滤波器系数。
4.1 语音产生模型在语音合成技术中的应用
    早期产品中应用到的连续语音合成技术,是借助于大约以每秒40次速度修改上述的短时语音信号的3个参数来实现的。如适合儿童学习的“说和拼音机”。因为它仅仅采用26个英文字母做为音库,于是这种语音合成的声音质量不高,声音很是机械。
    此后,用汉字语音做为库,用波形拼接方法进行语音合成,效果有所改进,可是库的存储量太大。解决的方案是,使用语音分析方法,即利用语音产生模型概念,把一个语音信号分解成下列特性参数:线性预测系数(取10个)、基音周期范围、基音周期数目(基音持续时间)和清音存在时间等。根据ITU-T G.729语音编码方法,一帧语音信号特征参数仅需80 bit,即80个16 bit样本压缩为80 bit,缩小16倍。到合成须要该音时,再利用语音产生模型由所存的特征参数实时转换为语音。
4.2 语音产生模型在语音识别技术中的应用
    与机器进行语音交流,让机器明白你说什么,这是人们长期以来求之不得的事情。语音识别技术就是让机器经过识别和理解过程把语音信号转变为相应的文本或命令的技术。其原理是:因为每个短时语音信号包含一串语音特性参数,不一样的汉字音有不一样的特征参数,因此利用特征参数的差异来识别不一样的汉字音。
    近20年来,语音识别技术取得显著进步,开始从实验室走向市场。预计将来10年内,语音识别技术将进入工业、家电、通讯、汽车电子、医疗、家庭服务、消费电子产品等各个领域。
参考文献
[1] 拉宾纳  L R,谢弗  R W. 语音信号数字处理[M]. 北京:科学出版社,1983.
[2] 戴逸民,梁晓雯,裴小平. 基于DSP的现代电子系统设计[M]. 北京:电子工业出版社,2002.
[3] 奥本海姆. 信号与系统[M]. 刘树棠,译 . 西安:西安交通大学出版社,1998.

[4] 何苏勤,王忠勇.TMS320C2000系列DSP原理及应用技术[M].北京:电子工业出版社,2003.



http://www.innovateasia.com/cn/win_2008/CN321.htm

Profile - CN321


CN321

基于语音识别及RFID的多重安防门禁监控系统

广西师范大学
物理与电子工程学院






Advisor

Name: 王志高

Members

No. Name English Name
1 甘宇健 Gan Yujian
2 王明娟 Wang Mingjuan
3 彭宇林 Peng Yulin

Project Paper

1. 设计概述 (Preliminary Paper)

随着生物识别产品的不断问世,其在安防门禁系统的应用将愈来愈多,生物识别产品的高安全性和防盗等特性正被愈来愈多的客户接受。由此可预见,在不久的未来,生物识别产品必将成为安防门禁系统前端识别设备的强大力量,在安防领域必将发挥愈来愈大的做用。

生物识别技术是利用人体生物特征进行身份认证的一种技术。生物特征是识别人身体上惟一的与他人不一样,能够测量或可自动识别和验证的生理特征或行为方式。

用于生物识别的生物特征有指纹,掌纹,脸形,虹膜,视网膜,脉搏,耳廓等,行为特征有签字,声音,按键力度等,基于这些特征,人们已经发展了指纹识别,掌纹识别,面部识别,发音识别,虹膜识别等多种生物识别技术,也相应地生产了各类生物识别产品。目前市场上使用的最可能是指纹仪,其次是脸形识别产品,掌纹仪,虹膜仪和声纹仪,生物识别产品具备如下特色:

1)高安全性;

2)技术先进;

3)不易仿冒;

4)防盗取。

因为生物识别产品具备技术先进,安全性能高,身份确认惟一等特色,目前愈来愈多的集成使用在安防门禁系统中,生物识别产品采用的技术不一样于传统的RFID技术的门禁系统,所以将生物识别产品集成使用在采用传统RFID技术的门禁中,是一项合理且创新的尝试。

鉴于实际应用,须要考虑人类特征符合身份认证的要求,从安全性,可接受性,生产成本,实时性能方面, 本设计采用了一种易获取的生物特征——语音,并结合射频识别技术的多重身份认证保障用户的更高安全防范,从而确保人生财产的安全。相对于传统的磁卡及IC卡技术,RFID具备非接触、阅读速度快、无磨损等特色,在最近几年里获得快速发展。

本系统设计理念新颖,其软硬件都可裁剪,主要分为高端和低端两种设计方案(实际系统设计制做以高端型为制做蓝本),故应用很是普遍。高端型系统具备语音识别、RFID卡识别、动态随机密码保护等多重安防功能。高端型系统设计主要面向安全级别要求较高的原子能实验室,生产基地等场所。通过软硬件裁剪,本系统也可应用于图书馆,住宅小区等安全要求相对较低的场所。

本系统总体设计基于DE2开发平台,采用基于Nios IISOPC技术。Nios II 软核集成在FPGA内部,采用这种解决方案的优势是实现了片上系统,减小了系统的物理体积和整体功耗;同时系统控制核心都在FPGA内部实现,能够极为方便地更新和升级系统,大大地提升了系统的通用性和可维护性。此外,因为本系统须要大量的高速数据运算,在设计中咱们充分利用了Cyclone II 芯片的丰富的硬件乘法器,实现了语音信号的端点检测模块,FFT快速傅立叶变换模块,DCT离散余弦变换模块等硬件设计模块。为了提升系统的总体性能,咱们充分利用了FPGA的高速并行的优点,以及配套开发环境中的Avalon总线自定义硬件外设,使系统处理数字信号的能力大大提升,其性能远优于传统的微控制器和普通DSP芯片。综上所述,咱们采用了基于Cyclone II的系统设计方案。

 

(Revision: 4 / 2008-06-15 17:48:54)

2. 功能描述 (Final Project Paper)

    本系统采用SOPC系统设计,控制方式灵活。如下为本系统在实际运用中的示例图(如图1所示)。

 

 1  实际应用示范图

本系统采用SOPC系统设计实现了语音识别及RFID的多重安防门禁监控系统:一方面主要对 语音信号实时采集,存储,并经过各类DSP运算模块进行分析和处理;另外一方面主要实现射频识别。

其功能描述以下:
1 .实时语音信号采集模块
话筒线入输入,语音经过音频编解码芯片 WM8731 ,以 8KHZ A/D 采样率转换成 16 PCM 码缓存。 
 
2 .语音信号预处理模块
算法处理的一部分,主要功能是把缓存区的数据归一化,一阶高通滤波,分帧,按帧计算短时能量和短时过零量,去除首尾的静音和噪声,获得有效语音帧,存入 SRAM 。为语音特征提取作准备。
 
3 .语音信号特征提取模块
按帧读取 SRAM 中的语音数据,通过 FFT 模块获得一帧数据的功率谱,功率谱在 24 MEL 滤波器组加权后取对数,再通过 DCT 离散余弦变换模块,获得 12 维倒谱域特征矢量,做为测试模版。这样把一帧多维时域数据压缩至 12 维倒谱域数据,为模板匹配提供了高效处理,下降了识别的难度和计算量。
 
4 .随机密码模块
为了提升安全防范,用户将限制在系统的指示范围内录音,随机密码模块每次都会给出三个随机码的排列组合,用户只能按照提示,录制语音数据,避免了他人盗取客户声音录制数据而非法闯入系统。 
 
5 .语音识别模块
用户预先录制语音样本,并运用PC机上的MATLAB平台对这些语音样本进行特征参数提取,最终以文件形式存入SD卡。Nios II控制SD卡驱动获取全部用户模板,在Nios II上实现软件算法DTW动态时间规整,将测试模板与SD卡中的用户模板比较欧式距离,获得设置的语音密码识别结果。
 
6 .LCD液晶屏显示模块
完成菜单显示,提示用户进行ID卡鉴别,进而回显系统产生的随机密码,提示用户根据随机密码进行语音输入操做,待处理完成,送识别结果回显,提示用户的合法性。
 
7 .射频识别模块
      射频识别系统由两部分组成:射频卡和读卡器。射频卡用做承载用户信息载体,读卡器具备读 / 写功能,本系统经过 Nios II 处理器读 / 写射频识别模块的数据信息,在语音识别前开启门禁系统的第一重身份认证,再经过语音识别控制门禁控制器最终开启门禁系统, 突破传统安防系统单一射频识别的缺点,提升安防性能。
 
 8 .监控模块
监控模块包括有温度,烟雾等受监控环境的常见参数监控。经过 CAN 总线远程与 Nios II 进行数据交互,再通过以太网为监控中心提供环境参数,便于调整受控环境。
(Revision: 19 / 2008-09-14 22:45:35)

3. 性能参数 (Final Project Paper)

 1. 资源使用状况

(1)  系统设计资源使用状况如图:
图2  系统资源利用率
(2) Frequency:116.75MHZ(fmax)
 
2.  做品性能参数
 
2.1  系统语音识别率
试验用户数:10个
试验次数: 20次/人
识别率: 93%
拒识率: 7%
 
2.2 系统运行速度对比
为了显示本系统设计性能的优越性,咱们选择 PC 机与之对比。 PC 的配置性能以下:
表1 PC机配置

品牌
CPU
时钟(主频)
内存
软件平台
联想
Inter Pentium D 940
双核处理器
3.2Ghz
1024 Mbyte
DDR2
MATLAB 6.5

 
2.2.1 语音 MFCC 特征提取:
PC  MATLAB 6.5 上运行耗时截图:
 
图3  PC  MATLAB 6.5 上计算一次MFCC耗时截图
在本系统中, MFCC 系数提取采用纯硬件描述语言实现,其工做在 50Mhz 下时,计算一帧 MFCC 系数所用的时间约为 60us 。运行速度对好比下表:
表2 PC与DE2平台运行MFCC系数提早速度对比

测试平台
处理对象
时钟
处理耗时
DE2 平台性能提高
PC
MFCC 系数提取
3.2Ghz
47ms
783
DE2 开发平台
50Mhz
60us

 
2.2.2 语音端点检测:
运行速度对好比下表:
表3 PC与DE2平台运行端点检测速度对比

测试平台
处理对象
时钟
处理耗时
DE2 平台性能提高
PC
语音端点检测
3.2Ghz
62ms
33.2
DE2 开发平台
50Mhz
27Mhz
1.87ms

 
2.2.3  从语音录入到识别结果输出:
语音识别的运行时间与端点检测后截取出来的语音帧长有关,在本系统中,将语音信号以 256 个语音采样数据为一帧( 8Khz 采样率)。如下运行时间对比是基于三段分别为 13 13 16 帧的语音数据进行的运行时间对比:
运行速度对好比下表:
表4 PC与DE2平台对三段语言识别运行时间对比

测试平台
处理对象
时钟
处理耗时
DE2 平台性能提高
PC
三段语音识别
3.2Ghz
2.45s
6.2
DE2 开发平台
50Mhz
397ms

MFCC 系数提取中,包含大量的复杂运算: FFT 运算、取对数、浮点乘除法等等,尽管 PC 机的主频很高,但其在这些复杂的数字信号处理中运算效率不够高,计算一次须要几个时钟周期,而咱们设计的基于 FPGA 的数字信号处理采用并行处理方式,以较少的资源消耗换取了较大的性能提高。
而在端点检测中,只有 Fir 滤波部分须要大量的乘法运算,其余部分大体都是加法和判断处理状态转移过程,此时 PC 主频高的优点得以发挥,拉近了与硬件实现方法的差距。
在最后的性能对比中,因为识别算法 DTW 是基于 Nios II 实现,并不是全硬件实现,因此最终二者性能差距大体在 6 倍左右,这已经是一个很是好的成绩,彻底知足本系统设计的要求了。
 
2.3  与竞争方案的性能对比
咱们选择了较为有说服力的:国家天然科学基金资助项目 ( 90407017)  、北京市教委基金资助项目 (KP2701200201) ,来与咱们实现的方案进行对比。该项目在《小型微型计算机系统》 2007 8 月第 8 期,发表的论文《基于 FPGA  的嵌入式语音识别控制系统》展现其设计的系统。该系统基于 Xilinx 公司的 Virtex II Pro50 FPGA 芯片,处理器为芯片内部的硬核 Power PC 405 。咱们将两个方案进行对比:
表5 本方案与竞争方案对比
 
本系统设计方案
同类竞争方案
价格
功耗
较高
特征提取时间(模板造成时间)
 短  (0.003s)
长  (0.69s)
DTW计算时间
较长 (0.39s)
短  (0.02s)
总体响应时间
短   (0.4s)
稍长 (0.7s)
分析两方案的异同,本方案采用相对流行的 MFCC 语音特征提取办法,而对比方案采用 LPCC 语音特征提取办法。就计算复杂程度而言, MFCC 的运算量较多。本系统充分利用 Cyclone II 的资源和 SOPC 的设计理念,设计了基于 Avalon 总线的 MFCC 系数提取模块,并用 DMA 进行数据搬运。这使得更为复杂的语音特征提取时间较竞争方案的时间更短。
在识别部分,两方案均采用 DTW 识别算法。而竞争方案采用了硬件实现的方法,性能较咱们好。
就整体状况而言,若同为 10 个参考模板,本方案模板造成与识别的总时间在 0.4s 左右,而竞争方案模板造成与识别的总时间在 0.7s 左右。咱们以合理的设计思路、较低的设计成本取得了良好的性能参数。
 
2.4  系统偏差分析
 
2.4.1  MFCC 特征提取偏差分析:
为了验证 MFCC 模块运算正确,咱们构造了一个 256 元素的一维数组进行 MFCC 系数提取: [1,2,3,4,0,0,0,0 …… ,0,0,0] ;如下为该矩阵分别在 MATLAB Nios IDE 平台运算后提取出来的数据:
            

       图4  MATLAB运算结果                                                     图5  MFCC模块运算结果

左图为在 MATLAB 6.5 上对上述矩阵进行 MFCC 系数提取后的截图,而右图为在 Nios IDE 软件平台上采用 Nios 处理器从 AVALON 总线上读取上述矩阵进行 MFCC 系数提取后的数据截图。从图中的数据能够看到,二者间的绝对偏差大约保持在 0.0001 左右,这个精度已经能够知足本系统的要求。
 
2.4.2  CORIC 对数运算单元偏差分析:
CORIC 对数运算是属于 MFCC 系数提取模块的一个部分,尽管上文已经对 MFCC 特征提取偏差范围作出了评价,但因为在整个 MFCC 系数提取中,只有对数运算没有采用标准的直接求取法来求解(事实上也很难采用直接求解法在硬件平台上求解对数),因此对其作偏差评价也是颇有必要的。
根据 CORDIC 的计算原理,咱们在 MATLAB 上创建了一个 CORDIC 对数运算的仿真模型,该仿真模型的计算结构与 FPGA 端一致。
下图为 CORDIC 对数运算模型与 MATLAB 标准对数运算函数结果对比图:
图6  CORDIC对数运算偏差分析图
图中蓝线为标准对数运算的结果,而红线为咱们在 FPGA 端设计的对数运算结果。从图中能够看出,咱们设计的 CORDIC 对数算法仅在约 2.97—3.03 的范围内产生偏差,其最大偏差产生在输入值为 3 的时候,此时: ln(3) = 1.0986 , 而咱们设计的 CORDIC 对数运算为: 1.1080 ,其绝对偏差为 0.0094 ;相对偏差为 0.86% 。这个精度已经知足本设计的需求,并且除了 2.97—3.03 这个范围外的 CORDIC 对数运算与实际的对数运算相比基本上没有偏差。
注:在此只进行 2.000 —— 3.999 数据的效验是由于 CORDIC 对数运算的数据输入范围为: (2.000 —— 3.999)*2n ln(x*2n)=ln(x)+n*ln(2) ,因此只需验证 2.000 —— 3.999 CORDIC 对数运算结果便可。详细的设计论证请参考本文第四部分的设计方法。

 

(Revision: 4 / 2008-09-15 17:59:14)

4. 设计结构 (Preliminary Paper)

1.系统主要框架设计:

系统设计充分利用Cyclone II芯片及DE2开发板硬件资源。系统主要硬件模块为:射频识别模块,SD卡读写模块,音频采集模块,RS232通讯模块,以太网控制模块,液晶显示屏等。而系统主要软件模块包括:基于Verilog HDL的高速语音信号预处理模块,基于Nios II的语音信号匹配识别模块,RFID识别模块,液晶显示控制模块,以太网控制模块,SD卡文件系统控制模块等。系统主要框图(如图7所示):

 

系统整体结构

2.主要算法流程设计:

高速语音信号处理模块由如下几部分组成:语音端点检测模块,语音特征提取模块。语音端点检测模块主要包括:FIR滤波器的设计,能量的计算,过零率的计算。语音提取模块主要包括:基2256FFT模块设计,MEL滤波器组的设计,DCT离散余弦变换模块等。

这部分处理采用Verilog HDL设计,应用流水线和乒乓操做,实现了数据的高速处理。

网络模块经过以太网技术,利用TCP/IP通讯协议实现DE2实验板与监控中心的PC机系统终端的网络传输。系统终端利用.NET应用软件实现网络通讯GUI接口,以实现上位机与下位机的网络通讯,以便管理系统用户数据库。算法主要流程(如图8所示):

 

8  算法流程图

 

(Revision: 4 / 2008-09-14 21:58:14)

5. 设计方法 (Final Project Paper)

           本系统基于DE2开发板进行设计,充分利用了DE2板上丰富的资源,系统的TCP/IP网络通讯基于DM9000A芯片,语音采集基于WM8731语音编解码芯片,语音的加密数据保存于SD卡,并采用了板上的LCD 做人机友好交互。同时系统利用DE2的外扩插槽扩展本身设计的射频识别读卡器和CAN总线接收器。

在设计过程当中,充分考虑SOPC系统的特点,充分发挥了SOPC系统在数字信号处理中的并行运算优点和Nios自定义指令加快程序运行速度的优点。下图为本系统的SOPC builder定制图:

图9  系统SOPC builder定制图
系统硬件设计
 
1.1  识别模块设计实现方法
RFID 识别模块采用的是ZLG500B系列的射频识别模块,而Mifare 卡则采用NXP公司的MF1S50系列射频卡。该模块基于NXP高集成度读卡芯片MFRB500。当读卡模块初始化工做完成后,便开始监测 Mifare卡,Mifare卡一共有五种状态,如下是Mifare卡的状态转移图。

图10  Mifare卡的状态转移图
ID  卡是客户身份卡,装载客户的ID信息和自行设定的48bit密码,当客户刷卡成功,蜂鸣器提示一重认证经过,开启语音识别认证,确保门禁系统的安全。
 
1.2  环境参数监控模块设计实现方法
本模块模拟监控实验室温度的过程,因为在实际实验室中,各类干扰信号及通信距离较远,故本模块采用CAN总线进行通信。CAN(Controller Area Net)是一种现场总线,主要用于各类过程检测及控制,其具备抗干扰性强、通讯距离较远等优势。在本模块的设计框图以下:

图11  环境参数监控模块原理图
本模块采用SJA1000作为CAN总线控制器,CAN总线收发器则采用CTM1050T高速隔离收发器。在实物设计中,咱们选择对环境的温度进行实时监控,若是要对其余的环境参数进行监控,只需更换传感器便可。
环境参数实时采集卡的设计基于AT89S51单片机,单片机采集温度数据后,将温度h数据经过CAN总线发送到Nios II。下图为环境参数采集卡CAN总线网络链接图:

 

 

图12  CAN总线网络链接图
 
1.3  语音采集与预处理模块
本模块要实现的功能是采集语音信号,并对其进行FIR滤波、语音数据归一化、语音的端点检测处理。
 
1.3.1 语音采集单元:
语音采集部分采用DE2板上的WM8731进行设计,经过I2C总线设置后,WM8731就会一直工做在设定的模式中。语音采集单元包含一个PLL,一个I2C总线控制器、一个左对齐模式下的语音采集控制器。
PLL 给予WM8731工做在18.4Mhz的时钟频率下,经过I2C总线控制器设置WM8731工做在8Khz的采样频率下。下图为在嵌入式逻辑分析仪(SignalTap II Logic Analyzer)下图语音采集控制器的采样图:

图13  语音采集控制器的采样图
从图中可见,左对齐语音采集过程一共有19个脉冲,其中前16个脉冲为有效语音数据提取脉冲,后三个脉冲为未来处理扩展预留。有效语音提取出来以后便存入SRAM中。本模块经过计数器,从启动录音开始,自动录制4s的语音信号。
 
1.3.2 语音归一化处理单元:
语音归一化处理典型的计算公式为:DATA/MAX(DATA),若是按照这种标准归一化处理,则须要消耗2个硬件乘法器资源。本着节约片上资源的设计理念,咱们创新地提出了一种通过简化的归一化处理模型,该模型只需移位便可实现归一化运算。流程以下:
第一步:先取语音数据的最大值MAX(DATA)。
第二步:令m>= MAX(DATA)且m=2^n(n>=8),寻找一个最小值n。
第三步:将归一化运算由DATA/MAX(DATA)改成DATA/m。在数字电路中除以2^n只需简单的移位便可实现。
鉴于咱们这里将16位的原始语音归一化为8位的小数,因此只要将每个语音数据右移(n-8)位便可。当n小于8时,则无需再移位。
通过修改后的归一化运算,运行速度更快,资源消耗更少,其不足在于牺牲一点采样精度而已。
 
1.3.3  Fir 滤波器运算单元:
因为原始录入的语音高频部分的频谱比低频部分的成分少,为此要在预处理中加入预加剧处理,预加剧的目的是提高高频,使得信号的频谱变得平坦。通常采用的是一阶高通滤波器,系统函数为 。咱们利用了DSP Builder设计了一阶FIR滤波器。方法以下:
第一步:由系统函数获得差分表达式:
第二步:在DSP Builder 中生成 Simulink 系统仿真图,并生成VHDL代码。
设计的FIR模型顶层文件以下:

图14  FIR模型顶层文件
从DSP builder的截图能够看出,Fir滤波器的输入是16位的Q8定点小数,运算后输出也取16位Q8定点小数。下图为Fir在Quartus II的仿真图:

图15  Fir仿真图
咱们在MATLAB对该仿真结果进行验证:

图16  Fir仿真结果验证
 
1.3.4 语音端点检测运算单元:
因为原始数据中含有噪声和无声段以及静音段,为了获取有效语音数据,必须从原始数据中截取有效的语音数据。在端点检测中,咱们把语音分为:静音段,过渡段,语音段,结束段。语音端点检测状态转移图以下所示:

 

图17  语音的端点检测状态图
端点检测后的语音数据仍保存于SRAM中。咱们将DE2板上的512KB的SRAM划分为5个区:地址0——0x7fff为原始语音数据保存区,0x8000——0xffff为经端点检测后的第一段语音数据(在端点检测以前已对该段语音数据进行归一化处理与Fir滤波处理)保存区。0x10000——0x17fff为经端点检测后的第二段语音数据保存区。0x18000——0x1ffff为经端点检测后的第三段语音数据保存区。0x20000——0x3ffff(0x3ffff 是SRAM的最终地址)为未来扩展而预留。
下图为语音预处理模块处理咱们录进去的“你们好“效果图。本图是经过DE2控制面板软件读取SRAM前256KB数据(地址:0——0x1ffff)在MATLAB软件上画出来的图形:
图18 语音的端点检测效果图
从图中能够看出语音预处理模块能够很好地完成Fir滤波、语音归一化、语音端点检测的任务。
 
1.4 MFCC 特征提取模块
在设计之初,咱们曾计划将MFCC模块作成一个Nios II的指令,以此加快其对语音数据的处理速度。可是每次MFCC运算的输入数据为256Byte,若是将MFCC作成Nios II的指令,这就意味着须要Nios II从SRAM读取(搬运)这大量的语音数据。此时Nios II的工做效率和最终系统的运行速度将会大大下降,因此咱们将MFCC模块作成了一个Avalon总线的从设备,使用DMA来为它搬运数据。设计结构图以下:

图19  识别部分总体设计结构图
在介绍MFCC中各运算单元实现步骤以前,有必要详细说明一下本系统的数据格式变换,数据变换的缘由下文会有讲解。在上文中提到,语音通过归一化处理后,成为16位的Q8格式小数语音信号,整个MFCC数据格式变化以下图所示:

 

图20  FPGA中数据格式变化
MFCC 特征提取模块包含:FFT运算、数据取模运算、Mel滤波器运算、对数运算、DCT离散余弦变换、一阶倒谱提高。因为篇幅的关系,在此仅选择其中最复杂的三个部分进行介绍。
 
1.4.1  FFT 运算单元
 
(1) FFT 设计方案对比
在FFT运算单元设计之初,咱们有两个设计方案:浮点型FFT和定点型FFT。二者的区别在于:前者计算的值的范围大,然后者所能计算的范围较小。在前文咱们提到,在本系统中语音归一化处理后变为8位有效数据,若是采用浮点FFT,则得将原来的八位数据扩展为32位,而采用定点的FFT则只需在原来数据位宽的基础上扩充一倍便可。不管逻辑资源的消耗、乘法器资源的消耗仍是FPGA内部存储资源的消耗都是定点型FFT比浮点型FFT来得少。基于上述缘由,本系统采用定点FFT。
 
(2)  定点FFT的设计方法
定点FFT设计的关键就在于蝶形结单元的设计和地址产生逻辑的设计。蝶形结是FFT处理器的基本运算单元,本模块的蝶形结消耗了8个硬件乘法器,一半用于数据的实部相乘,另外一半用于数据的虚部相乘。鉴于Cyclone II的乘法器均为9bit,所以咱们在蝶形运算单元将原来的8位小数扩充为10位,组成高8位为整数位,低10位为小数位的Q10格式数据。这样即充分利用了现有资源又提升了FFT运算的精度。蝶形结采用流水线设计,数据输入到输出有6个时钟周期的延迟,因为蝶形运算数据的连续输入,因此每计算一次蝶形结只需一个时钟周期。
FFT 模块设计的难度主要在地址产生逻辑,地址产生逻辑的设计直接影响FFT模块的性能和FFT运算结构。咱们的FFT地址产生模块按照标准FFT地址跳变方式设计并知足蝶形运算单元流水线运算的须要。为了获得高速的FFT处理速度,咱们在FFT模块中开辟了两个RAM数据存储区,以此组成典型的乒乓操做模式:在FFT第一级运算中,数据从RAM1经蝶形单元计算存入RAM2,在第二级中则正好相反,依次类推……下图为FFT总体设计框图:

 

图21  FFT结构功能图
在这种设计结构下,计算一次蝶形运算只须要一个时钟,处理速度达到同类设计结构的最高极限。经Quartus II综合后FFT模块的时钟可达162Mhz,消耗的逻辑资源约为700多。在100Mhz时钟下,计算一个256点FFT的时间不到11us,达到了数据高速处理的目的。如下为FFT模块仿真图:

图22  Q10格式256点FFT时序仿真
对上面Q10格式的FFT仿真结果进行验证:从图中能够看到FFT运算结果的头几个数为:0x0A0000000,0x09FD3FE0C,0x09F0FFC19……按照Q10格式,这三个数分别为:十、9.9882-0.48828i、9.9404-0.97460i。而MATLAB计算的结果为:十、9.9849 - 0.49054i、9.9399 - 0.97911i,二者相差不大,定点FFT运算模块与MATLAB计算的结果相比存在小小偏差。
为了更直观地验证FFT模块计算的正确性,对一帧实际语音数据进行FFT计算:下图中蓝色表明FFT 模块对一帧语音数据通过FFT 运算后的频谱图,红色表明一样的语音数据是用MATLAB 指令fft(data)运行的仿真图,能够看到咱们自行设计的模块能达到应用的要求,而且与MATLAB软件有一样的效果。

图23  一帧语音数据的频谱图
 
1.4.2  MEL 滤波器的设计
MFCC (Mel-Frequency Cepstral Cofficients)的分析着眼于人耳的听觉特性,由于,人耳所听到的声音的高低与声音的频率并不成线性正比关系,而Mel频率尺度则更符合人耳的听觉特性。所谓Mel 频率尺度,它的值大致上对应于实际频率的对数分布关系。Mel频率与实际频率的具体关系可用下式表示:
Mel(f)=2595lg(1+f/700)
这里,实际频率f 的单位是Hz。根据Zwicher 的工做,临界频率带宽随着频率的变化而变化,并与Mel频率的增加一致,在1000Hz 如下,大体呈线性分布,带宽为100Hz左右;在1000Hz 以上呈对数增加。相似于临界频带的划分,能够将语音频率划分红一系列海明窗滤波器序列,即Mel 滤波器组。
在本系统中,此MEL滤波器组是一个24阶的海明窗滤波器,此滤波器系数是一个24X128的矩阵,而在这个滤波器系数组中,有许多的系数都是0,以下图示:

图24   部分MEL滤波系数在MATLAB软件上的截图
从图中能够清晰看到,MEL滤波系数组大部分元素均为0。对该系数组在MATLAB下调用plot函数绘图能够看到Mel滤波器系数组的图形:

图25  MEL24 阶的海明窗滤波系数组
从上图能够发现Mel滤波系数组每一阶的非零数据是不相同的。也就是说想在FPGA上构造一个与C语音相似的稀疏矩阵,难度很大。而若是将整个滤波系数矩阵的24*128个系数均存入FPGA的存储区中,又会形成很是大存储资源浪费。
为了以最少的资源、最快的速度实现Mel滤波器,咱们将Mel滤波系数组设计成单一状态转移结构。即采用一个计数器,给予每一级Mel滤波一个特定的值,从Mel滤波计算开始,该计数器便开始计数,利用该计数器即可决定Mel滤波器的计算状态。采用这种设计方式即可在FPGA中仅仅保存Mel滤波系数中的非零系数,且综合后的运行速度可达180多Mhz。下图为Mel滤波器第一阶计算的结果:

图26  Mel滤波器第一阶计算仿真结果
 
1.4.3 对数运算单元设计
MFCC  中语音信号的幅度谱在每个滤波器组中累加将获得一个较大的加权值,算法中须要对各个加权值取对数来达到压缩数据的目的。
 
(1)FPGA对数算法运算方案对比
一般状况下FPGA实现对数运算的方法通常采用一下三个:
方法一:采用查表的方式来实现
方法二:采用泰勒级数来近似这个函数,也就是:

方法三:基于坐标旋转数字式计算机(Coordinate Rotation Digital Computer,CORDIC)的算法。
对比三个方法,其中方法一的实现最为简单。可是方法一的计算精度与所制做的表的大小成正比,也就是说采用方法一实现较高精度的对数运算将要耗费巨大的存储器资源。显然在本系统中并不适用。
而方法二和方法三,在其收敛区间上都可以取得较好计算结果。在方法二中,每个级数的计算须要3到4个的硬件乘法器。若是采用各级共享乘法器的设计方法,则计算一次对数须要较长的时间。而若是使用流水线结构设计,又会消耗大量的乘法器资源。
采用方法三的CORDIC算法具备突出的优点:不须要硬件乘法器,全部运算只有移位累加;能够使用流水线方法,以提升工做频率与效率;也能够使用循环迭代方法,以节约硬件资源。其计算精度与运算迭代次数成正比(也就是逻辑资源)。咱们设计的15次流水线迭代的CORDIC对数运算单元消耗的LE约为1100左右。
对比方案二和方案三,显然方案三在各个方面都具备突出的优点。故本系统采用CORDIC算法实现对数运算。
 
(2)CORDIC对数运算实现方法
三角函数的CORDIC算法最初由Jack Volder提出,应用与实时导航的数字处理,John Walther等人将CORDIC理论进行了扩展。如今CORDIC算法已经应用与众多领域。
本文不涉及过多的理论,关于CORDIC的资料能够参考《A survey of CORDIC algorithms for FPGA based computers》一文。要实现CORDIC对数运算的关键就是找到它的迭代多项式。本系统采用的是利用CORDIC结构实现双曲线坐标变换,而双曲线函数能够很方便转换为对数函数,在本系统中采用的迭代方程推导以下:

进一步分析这一迭代方程,对该多项式迭代后的结果为:咱们所需的ln(t)等于2* 。为了省去乘2这一步,咱们再将迭代多项式优化为:

在此迭代多项式下,只需令x的初值等于t+1,y的初值等于t-1,z的初值等于0。通过n次迭代后,ln(t)= 。
经过对后一个多项式的迭代运算,咱们就能够获得所需的对数运算结果。须要注意的是,在这个CORDIC迭代方程中没法知足整个天然域的实数运算,此时能够经过简化公式进行化简:
 
能够发现, 正好是浮点格式数据。也就是说,只要输入CORDIC对数运算的数据为浮点格式,就能够轻松处理大范围的实数。
为了对数运算的方便,本处没有采用标准浮点格式,而是针对CORDIC对数运算的须要设计了一个简单的浮点格式。该浮点格式表示规定为: 且 。这样定义的缘由是:CORDIC对数运算方程y的初始输入变量为:t-1,当t趋近于1时,y趋于0,这样迭代结果就会产生较大偏差。因此在此直接规定了t的取值范围,防止y=0的状况发生。又MEL滤波器输出的数据恒为正数,因此浮点的符号位也可忽略。最终这种简化的浮点格式为: 20bit 为t,后12bit为2的指数位(指数位为有符号数据)。
下图为对数运算在Quartus II仿真结果:

图27 CORDIC对数运算仿真
浮点格式0x20000800 = 2.0*2^(-2048),ln(2.0*2^(-2048))= -1418.87228,而CORDIC对数运算的仿真结果采用Q16定点小数表示,0xA752172 = -1418.86936 二者的绝对偏差:0.003。
对后一个仿真结果的验证:浮点格式0x22000000 = 2.125*2^(0)=2.125,ln(2.125)= 0.7537718,仿真结果Q16定点数据:0xC106 =0.7539978 二者的绝对偏差:0.0002。
 
(3)定点小数转浮点格式小数的实现方法
上文提到,在对数运算单元中,输入的数据为浮点制的格式。但咱们以前的数据一直都采用定点小数格式,因此必须在对数运算以前将定点格式的数据转换成浮点格式的数据。
定点转浮点格式采用状态机的方法设计,下图是其状态转移图:

图28  定点转浮点格式状态转移图
按照这一流程即可将原来的32位Q16格式数据转换为CORDIC对数运算设计的浮点格式数据。
下图为定点格式转浮点格式的Quartus II仿真结果:

图29  定点格式转浮点格式仿真结果
从图中能够看到,输入32位Q16格式0x00011000=1.0625,
0x22000fff=2.125*2^(-1)=1.0625 。同理对后一个仿真结果验证:输入Q16格式0x12345678=4660.3377,0x2468A00B=2.275542*2^(11)=4660.3125。结果均在偏差范围以内。
 
1.5  随机密码产生模块
随机密码产生模块采用伪随机序列(也称为m序列)的原理进行设计。伪随机序列在通讯、雷达、导航以及密码学等重要的技术领域中得到了普遍的应用。在本系统中,随机密码起到了很是重要的做用,在每次语音识别以前,系统经过随机序列获得随机数,要求用户录入相对应的语音密码,这就至关于扩大了系统密码库。即至关于将10个语音密码扩展为1000个语音密码。伪随机序列采用移位反馈寄存器设计,下图为设计顶层结构图:

图30  随机密码产生顶层结构
在伪随机序列产生的这些移位寄存器中,不容许全零的状态出现。因此咱们设置了一个延时复位单元,在系统上电后一段微小的时间后,图中的全部移位寄存器都会被置1。下图为随机密码模块仿真图:

图31  随机密码模块仿真
 
1.6  自定义指令
在本系统中,定制了基于Nios II的DTW计算指令,DTW的计算结果取值范围较大,通常从几百到几十万,而用于计算DTW的MFCC系数的值大多从0到正负十几之间,若是此时继续采用定点数据,显然已经没法知足系统要求。因此,咱们本身设计定制了计算DTW的浮点Nios指令。
定制的指令包括:
1 )定点Q16格式数据转浮点格式数据
2 )浮点相加指令
3 )浮点欧式距离计算指令
4 )浮点数据大小比较指令
5 )浮点数相乘指令
指令定制截图:

图32  自定义指令
经过这些指令的定制,使得本系统在DTW识别算法的计算时间缩短了4.12倍:
表6  自定义指令运行时间对比
实现方法
运行时间
自定义指令速度提高
直接采用程序实现 DTW
1429ms
 
4.12
采用自定义指令实现 DTW
346ms
可见在Nios中自定义指令能够得到很好的性能提高幅度。须要注意的是,在Nios IDE中,若是直接定义浮点型变量没法直接输入到自定义指令中进行运算,因此本系统采用alt_u32型变量来“装载”浮点变量。固然,这样处理后,就不能在Nios IDE中直接采用+-*/等运算符直接对这些变量进行运算了,只能采用自定义的指令来操做。
 
2 .系统软件设计
本系统采用了两个Nios II处理器,一个负责识别算法实现,另外一个则负责与上位机的TCP/IP网络通讯等。
 
2.1  识别算法的程序流程(CPU_1)
系统上电复位后,液晶屏上将显示系统初始化成功,将等待用户刷卡,由串口接受合法用户的ID号,非法用户将没法进入下一步语音识别,并在液晶屏上显示非法ID,验证ID 合法后,产生随机密码并液晶回显,并开始采集四秒钟语音数据,进入语音识别验证。最后系统经过TCP/IP网络发送识别结果给远程监控中心。下图为CPU_1的程序流程图:

图33   CPU_1的程序流程图
 
2.1.1  DTW 识别程序设计
在孤立词语音识别中,最为经常使用的方法就是DTW 动态时间规整算法,它与其它识别算法如HMM算法在相同环境条件下,识别效果相差不大,但HMM算法的实现要复杂得多,这主要体如今HMM 算法在训练阶段须要提供大量的语音数据,经过反复计算才能获得模型参数,而DTW算法的训练中几乎不须要额外的计算。在本系统中考虑到算法复杂程度以及对系统速度性能的要求,选择兼顾识别效果和低复杂度的高效算法DTW。
算法实现流程:
(1)首先读取SD卡里面的语音模板库,客户的语音参数模板都是以通过特殊处理的二进制文件存放在SD卡内。Nios II读入文件,做为语音特征矢量R。
(2) 特征参数提取模块组件处理获得的实时采集的测试客户模板,做为语音特征矢量T。
(3) 比较T和R之间的类似度,即便计算累积距离,距离越小则类似度越高。这一失真距离,可采用动态规划的方法。下图是把测试模板的各个帧号在一个二维直角坐标系中的横轴标出,把参考模板的各个帧号在纵轴标出,经过这些帧号的整数坐标画出一些纵横线便可造成一个网络,交叉点表示测试模式中某一帧与训练模式中某一帧的交汇点。DP算法能够归结为寻找一条经过此网格中若干格点的路径,路径经过的格点即为测试和参考模板中进行距离计算的帧号。路径的选择必须从左下角出发,在右上角结束,且生长点的斜率必须在1/2到1之间。以下图所示。

图34  DTW搜索路径
如下是算法流程图:

图35  DTW 算法流程图
 
2.1.2  FAT 文件系统的移植与实现
FAT 是Microsoft推出的文件系统,具备高度兼容性,目前仍然普遍应用。FAT(File Allocation Table)是“文件分配表”的意思。顾名思义,就是用来记录文件所在位置的表格,它对于存储盘的使用是很是重要的,倘若丢失文件分配表,那么存储盘上的数据就会因没法定位而不能使用了。
在本系统中,FAT文件系统在一张1G的SD卡中实现,因此选择移植FAT16文件系统。FAT16使用了16位的空间来表示每一个扇区(Sector)配置文件的情形,故称之为FAT16。
要实现FAT16文件系统,最关键就是对FAT16目录项32个字节的操做,下表为该目录项32个字节的定义:
表7  FAT16目录项32个字节的定义
字节偏移(16进制)
字节数
定义
0x0~0x7
8
文件名
0x8~0xA
3
扩展名
0xB
1
属性字节
0xC~0x15
10
系统保留
0x16~0x17
2
文件的最近修改时间
0x18~0x19
2
文件的最近修改日期
0x1A~0x1B
2
表示文件的首簇号
0x1C~0x1F
4
表示文件的长度
在SD卡中进行读取二级目录文件的程序流程图:

图36  SD卡操做流程图
若是要进行三级目录文件读写,只需重复上述黄色部分的流程便可。而若是要进行根目录下文件读写,则只需去掉黄色部分流程。因而可知,其实文件夹在FAT16文件系统中将会占1个簇的存储空间。
 
2.2  网络通讯的程序框架图(CPU_0)
CPU_0 负责的工做在实时操做系统下以多任务的形式是与电脑进行TCP/IP网络通讯、收集实验室环境数据和门禁识别结果等。程序总体框架以下图所示:

图37 CPU_0程序总体框架
 
2.2.1  uC/Os II  操做系统的实现
Altera 公司已经为用户移植好了uC/Os-II实时操做系统,并将其像外设驱动同样看成一个软件模块集成到了Nios II IDE,在Nios II IDE环境下,用户不用修改其源文件对uC/Os-II的配置,只需经过图形界面就能够实现,使用起来很是方便。正是这些缘由,在Nios系统中使用uC/Os-II操做系统很是方便。
 
2.2.2  LWIP 网络通讯实现与应用
LWIP 全称为Lightweight IP TCP/IP stack,是一个轻量级的TCP/IP协议栈,其主要特性是以最小的资源占用实现完整的TCP/IP协议,所以特别适用于嵌入式系统。Altera公司已经在Nios处理器上为用户移植好了LWIP,并内嵌到Nios IDE中。因此在本系统的软件设计中,咱们很方便地将uC/Os-II和LWIP结合到咱们的系统中,并大大减小了系统开发的时间。
网络通讯采用DE2板载DM9000A以太网控制器芯片。它集成了介质访问控制子层(MAC)和物理层的功能,它为嵌入式系统实现的以太网链接提供了良好、便捷的解决方案。
 
1 )DM9000A驱动与LWIP的衔接
DM9000A 与LWIP的衔接经过LWIP提供的几个重要的结构体实现,以下图所示:

图38 DM9000A与LWIP的衔接
例如:netif结构体做为LWIP中网络接口的基础数据类型,描述了网络接口的基本属性以及输入、输出函数。alt_lwip_dev结构体描述了符合LWIP规范的网络端口设备。alt_lwip_dev_list:设备链表。在LWIP定义的这些结构体类型的基础上,咱们在主程序中定义了针对DM9000网络接口的一个结构体:alt_avalon_dm9k_if。有了这个结构体,DM9000的寄存器读写操做开始与LWIP的工做机制发生了联系。
总的设计思路是这样的:LWIP定义了一个全局变量alt_lwip_device_list,全部LWIP提供的API都可以对这一变量进行操做。而DM9000经过ALTERA_AVALON_DM9K_INSTANCE宏指令将DM9000做为alt_lwip_device_list中的一个alt_lwip_dev,使得LWIP的API函数的操做将转换为对DM9000的寄存器读写操做。
 
2 )网络应用程序的开发
移植成功LWIP后,就可以利用socket API来完成应用程序的设计。本系统基于Nios IDE提供的simple_socket_server模板进行网络应用扩展。这使得TCP/IP网络通讯的实现更加简单。
网络Socket通信过程:先初始化Socket,而后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端链接。在这时若是有个客户端初始化一个Socket,而后链接服务器(connect),若是链接成功,这时客户端与服务器端的链接就创建了。
当链接创建后,咱们就能够在sss_handle_receive()函数中创建自已在TCP/IP链接中所需的任务。以下图所示:

图39 TCP/IP新建任务流程图
当TCP/IP链接断开后,再把在TCP/IP链接中创建的任务删除便可。
 
2.2.3  RFID 射频识别的程序设计
RFID 选择如今最为常见的MF1S50系列。系统上电复位,读卡芯片装载正确的密钥到非易失性密匙存储器,等待有RFID卡的到来,启动卡的验证 ,将验证命令发送到卡,当从卡接收到第一个报文令牌后,微控制器必须检测通讯状态标志。若是通讯到目前为止保持成功,则启动卡验证的第二部分。卡将会以第二个报文令牌进行响应。而后微控制器必须检测通讯状态标志。若是验证已成功,则与MIFARE卡继续进行CRYPTO1加密下的通讯,读出ID,卡置为挂起状态,蜂鸣器响,发送ID号。 在RFID射频识别的设计中,须要注意的是:RFID射频识别的流程以下图所示:

图40  RFID射频识别的流程图
 
2.3  环境参数采集卡程序设计
在实际设计中,环境参数采集卡是安装在离主控板(DE2板)较远的地方,直接采用主控板进行数据采集显然不合理。因此在此我选择低价、应用广泛的89S51单片机完成环境参数采集的任务。采集卡的任务就是经过相应的传感器采集环境参数,再经过CAN总线将环境参数发送到主控模块中去。
其程序流程以下图所示:

图41  环境参数采集卡程序流程
 
2.4 . 上位机监控软件设计
本系统设计了一个简单的监控软件,对门禁系统实时进行远程监控。监控软件上能够看到门禁监控系统采集的环境参数变量和门禁识别结果。下图为软件运行截图:

图42  上位机监控软件运行截图
除了使用监控软件进行远程监控外,也能够使用Windows自带的远程登陆命令登陆到监控系统中。下图为采用windows自带的telnet命令登陆本系统后的截图:

图43  DOS 命令截图
 
2.5  双Nios通讯的实现方法
CPU1  和CPU2有各自的存储区,为了他们之间通讯的方便,添加了一个共享的存储区以此来交换数据,为了不两个CPU 同时访问共享的存储单元时引发资源冲突,而致使系统崩溃,这里添加了互斥核,在访问共享区时,任何一个CPU 都必需先打开互斥核,这时能够实现消息传递,而后关闭互斥核。另外一CPU 一样能够经过这样的操做获取消息。设计框图以下图所示:

图44  双Nios II共享存储区交换数据
3.  系统整合与效果
本系统在语音识别部分的综合后时钟可达130Mhz左右,但在这一部分咱们仅使用50Mhz的时钟,由于如今的处理速度已经能知足咱们的要求,并且每次综合所得电路存在随机性,不管从稳定性仍是系统功耗考虑,都是采用较低时钟。若是更换更高时钟,性能参数还能继续增长。
下面是做品在软硬件整合后运行的演示图:

 

图45  做品实物照片

 

(Revision: 13 / 2008-09-14 23:34:05)

6. 设计特色 (Preliminary Paper)

1.咱们采用Nios II搭配本身设计的外设逻辑进行语音识别及RFID的多重安防门禁监控系统的设计和开发,利用FPGA的并行优点,控制系统所有集成于一片FPGA实现。这与使用MCU方案相比,系统更加小型化,集成度高、运行速度更快。除此以外,本系统设计减小了物理链接和节约了PCB面积,这样不只下降了功耗,还加强了系统的稳定性。

2.因为咱们的系统须要进行大量的数据运算,仅使用CPU进行软件计算远远没法知足速度的要求,所以咱们采用Verilog HDL设计了语音识别的处理模块,本模块充分利用了Cyclone II芯片中的丰富的乘法器资源,而且在设计的过程当中采用合理的流水线设计和乒乓操做,其运行处理速度彻底优于如今流行的DSP处理平台。

3.咱们把语音识别和无线电识别巧妙的结合在一块儿共同实现安全系统的防范技术,这是市场上正刚刚兴起的新型技术的结合应用,使得社会价值和市场效益将会有很大的发展空间,也是本系统设计的最大亮点,很是具备社会效益和经济价值。

4.咱们充分利用了DE2板上丰富的接口资源,例如网络接口,音频接口,SD卡接口,串口,外部扩展接口等,这样解决了独立外设带来的接线复杂与互相干扰等问题,有利于咱们针对性地基于FPGA设计功能强大的系统。

 

(Draft / 2008-06-12 18:09:22)

7. 总结 (Final Project Paper)

        首先感谢Altera 公司提供了本次比赛的机会,以及在比胜过程中对咱们所遇到的问题所提供的帮助和支持。通过连续两个多月的学习,咱们对SOPC系统有了更加深刻的了解。在系统设计中使用了SOPC Builder中提供的经常使用IP 核,大大节省了系统开发时间,让咱们的设计工做变得更加有针对性。SOPC Builder灵活的自定义组件功能充分发挥了咱们的系统性能,针对咱们的语音识别系统,须要实时采集大量的语音数据,也须要实时对它们处理,咱们把最重要也是难度要求最高的数字语音预处理,特征提取,所有用硬件实现,并经过SOPC Builder 的友好自定义图形用户向导轻松构建了合适的SOPC 系统。

        经过这次比赛,咱们对基于Nios的SOPC系统有了更深刻的了解,深入感觉到了SOPC系统设计构架的博大精深。在短暂的学习过程当中,咱们完成了复杂的系统构架,充分利用了Altera 公司提供给咱们的自由空间,好比双核协同工做,复杂IP设计,操做系统的移植,自定义指令加速软件运行时间等等。

         另外,在这次比胜过程中,咱们了解到团队合做的重要性,正是由于咱们在设计过程当中的分工合做,每一个人都负责本身熟悉的部分,并及时交流沟通,使得咱们收到了事半功倍的效果,最后顺利完成了预期的整个系统。

        最后,感谢指导老师对咱们的指导,也感谢全部在这段时间给予咱们支持的老师和同窗。

(Draft / 2008-09-14 17:38:39)
相关文章
相关标签/搜索