




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、5.设计方法5.1概述5.2硬件系统的设计l 语音信号预处理(1) 预加重预加重的目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,以便于频谱分析或声道参数分析。在计算机里用具有6dB/频程升高频特性的预加重数字滤波器来实现,一般是一阶的FIR数字滤波器:为预加重系数,值接近于l,在0.9和1之间,典型值为0.94。预加重的DSPBuilder实现:为了便于实现,将上式中的一阶FIR预加重滤波器用差分方程表示为:其中,为原始语音信号序列,N为语音长度,上面的公式显示其在时域上的特性。又因为0.94接近于15/16,所以将上面的式子变为除以16可以用
2、右移4位来实现,这样就将除法运算化简为移位运算,降低了计算复杂度。在后面的模块设计中,也乘以或者除以一些这样的数,这些数为2的幂次,都可以用移位来实现。预加重的硬件实现框图如下: 预加重实现框图DSP Builder中的图形建模为:预加重滤波器的DSPBuilder结构图(2) 分帧语音信号是一种典型的非平稳信号,其特性随时间变化,其在很短的时间内是平稳的,大概为1小20ms,其频谱特性和物理特征可近似的看做不变,这样就可以采用平稳过程的分析处理方法来处理。分帧的DSP Builder实现:语音信号在10到20ms之间短时平稳(这样可以保证每帧内包含1一7个基音周期),也就是说选取的帧长必须介
3、于10到20ms之间,此外,在MFCC特征提取时要进行FFT变换,FFT点数一般为2的幂次,所以本文中选择一帧长度为16ms,帧移为1/2帧长,这样一帧就包含了16KHz*16ms=256个点,既满足短时平稳,又满足FFT变换的要求。由于采集的语音是静态的,语音长度已知,很容易计算出语音的帧数,但是在硬件上或实时系统中,语音长度是无法估计的,而且还要考虑存储空间的大小和处理速度,采用软件实现时的静态分帧方法是行不通的,可以利用硬件本身的特点进行实时的动态分帧。为了使帧与帧之间平滑过渡,保持连续语音流的自相关性和过渡性,采用交叠分帧的算法。帧移取1/2帧长,即128个数据点当作一个数据块。FIF
4、O1大小为一帧语音长度,分成两个数据块,预加重后的数据写入这个FIFO。为了实现帧移交叠,在FIFO1读数据时,同时再用FIFO2保存起来,当FIFO的一块数据读完以后,紧接着从FIF22读出这一块的副本。写入的一块数据,相当于被重复读出2次,所以FIFO1的读时钟频率设计为写时钟频率的2倍,而FIFOZ的读写时钟频率和FIFO1的读时钟频率相同。分帧以后的数据在图中按时间标号为1、2、2、3.··,1、2为第一帧,2、3为第二帧,以此类推。分帧实现框图FIFO1的写信号一直为1(写允许),等到写完第1块(128点)再允许读。当FIFO1读第1块数据的时,FIFO2保存第1
5、块的数据,两者时钟频率一致,同时FIF01也在写第2块数据。FIFO1读完第1块数据,FIFO2里为第1块数据,FIFO1中第2块数据写了一半,此时禁止FIFO1读,并使能FIF02的读信号,从FIFO2中将第1块数据再读一遍,读完时第2块数据己经完全写入FIFO1,再允许FIFO1读,同时禁止FIF02读,如此循环。图中,数据选择器就是为了实现两个FIFO的读出数据选通,第1次数据为FIFO1的读出内容,第2次数据为FIFO2读出内容,这样就实现将一块数据内容重复输出两次,读完两次的同时,写完下一块内容。分帧的DSPBullder实现为:分帧的DSPBuilder的结构图Inc模块是为了让F
6、IFO1写入128个数据后才产生读使能信号,其时钟频率与写时钟相同。Counter是模256的计数器,当计数值在0到127之间时输出FIFOI的值,128到255之间输出FIFO2的值,时钟频率与读时钟相同,为写时钟的两倍。DMUX为数据选择器。分帧后,波形平滑了许多,略微有了一点延时,这是因为FIFOI的读使能比写使能晚了128个采样点。但这样实现的实时分帧,与静态分帧相比,速度提高了很多,有效的减少了存储空间的浪费。(3) 加窗 加窗的目的是使主瓣更尖锐,旁瓣更低。语音信号数字处理中常用的窗函数是矩形窗和汉明窗,本文选取的是汉明窗。因为矩形窗虽然有较高的频率分辨率,但它的频谱泄露比较严重,
7、相比较来说,虽然汉明窗频率分辨率没有矩形窗高,但它有更平滑的底通特性,能够在较高程度上反映短时语音信号的频率特性。汉明窗公式如下(其中N为帧长):设分帧后的信号为S(n),加窗就是窗函数诚w(n)来乘分帧后的信号S(n),从而形成加窗语音信号加窗的DSP Builder实现:分帧后数据为8位定点QO(即8位有符号整数),三角余弦函数的范围为-1到1,可以用Q15来表示,但是Q15能表示的范围为一1到32767/32768之间,原则上应该用Q14表示,但从方便和总体精度考虑,仍然用Q15,+l用32767来表示。加窗后输出还是为8位定点QO。具体方法是:窗函数采取查表的方法,表的大小为帧长(本文
8、为256),将窗函数中的0.081的值用Q15表示,其数值上相当于小32768(2的15次方),保存在windowTable中,然后用预加重的信号s(n)乘以WindowTablei来计算加窗后的语音信号,得到加窗后的语音信号,仍然与预加重后的位数相同,公式如下:其实,分帧和加窗是同时进行的,分帧时只要找到与窗函数中对应点的关系,然后相乘就能得到加窗的数据,下图表示了预加重、分帧和加窗的时序关系:预加重、分帧和加窗时序关系由图知,真正的第1帧有效数据应该是在FIF01写信号有效的192个时钟期后产生。加窗的主要运算对象是查找表,其DSPBullder实现如下:加汉明窗的DSPBuilder结构
9、图图中,Counter为模256(窗长为256)个计数器,Incl模块使其在192个点之后才开始循环计数,这样每帧的数据点与窗函数的数据点就一一对应了。hamming-table的设置为:17964-15073*cos(0:2*pi/255:2*pi),将0到2分成255个区间,再将其余弦值放大了32768倍。l 总线接口的设计l 自定义指令5.3软件系统的设计l 连续语音分割该部分功能利用matlab软件验证通过,并在nios II编程实现。包含有前、退、左、右、停五个孤立字的连续语音信号波形如下图1所示:图1:连续语音信号波形上述语音信号通过麦克风输入、采样量化后存储在DE1开发板上Rom
10、中,根据地址存储形象化如下:LL地址空间图2:语音数据在rom中的存储对其处理步骤如下:(1) 如图所示,L为语音数据帧长,其大小根据经验值得到,与单个字语音信息的长度、采样频率有关,L取值的标准是能包含住各个字的语音信息长度。对于本设计8KHz的采样率,L取11792。可以根据情况进行取值,在这里取18。对上述存储数据从首地址开始取数据,每隔个数据顺序取L个数据存放到一数组中,由此可以得到一系列的数组,对于上述语音数据可以得到6000多个数组。(2) 对上步中得到的数组分别进行取绝对值、求和,以存储先后为横轴,各数组和为纵轴作曲线如下图3:图3(3) 如上图3所示,五个波形尖峰对应五个孤立字语音信息,分析可知这五个尖峰值所对应的数组即为那五段有用语音信息。按照步骤(1)的思路,从上图3曲线起点开始,取1000个数据点放到一个数组里面,求出该数组里面的最大值以及其所对应的位置。若最大值满足阈值条件,则步进1000,从第1001个点再顺序取1000个点放到一个数组里面,重复上述操作。若最大值不满足所设阈值条件,则步进1,从第2个点顺序取1000个点放到一个数组里面,重复上述操作。这样即可求得到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论