 
- UID
- 1029342
- 性别
- 男
|

(2)分帧的DSP Builder实现:
语音信号在10到20ms之间保持短时平稳,也就是说选取的帧的长必须介于10到20ms之间,此外,在MFCC特征提取时要进行FFT变换,FFT点数一般为2的幂次所以我们选择帧的长度为16ms,帧移为1/2帧长,这样一帧包含了16khz×16ms=256点,既满足短时平稳,有满足FFT变换的要求。
为了使帧与帧之间平滑过渡,保持连续语音流的字相关性和过渡性,采用交叠分帧的方法。帧移取1/2帧长,也就是128个数据点当作一个数据块。分帧图如下:

分帧实现框图
FIFO1大小为一帧语音长度,分为两个数据块,预加重后的数据写入这个FIFO。为了实现帧移交叠,在FIFO1读数据时,同时再用FIFO2保存起来,当FIFO1的一块数据读完以后,紧接着从FIFO2读除这一块的副本。写入的一块数据,相当于重复读出2次,所以FIFO1的读时钟频率设计为写时钟频率的2倍,而FIFO2的读写时钟频率和FIFO1的读时钟频率相同。分帧后的数据在途中被以时间标号为1、2、3、3.。。。。。。,1、2为第一帧,2、3为第二帧,以此类推。
FIFO的写信号一直为1,等到写完第一块(128点)在允许读。当FIFO1读第一块数据是,FIFO2保存第一块的数据,两者时钟频率一致,同时FIFO1也在写第2块数据。FIFO1读完第一块数据,FIFO2里为第1块数据,FIFO1中第2块数据写了一半,此时禁止FIFO!读,并使能FIFO2读信号,从FIFO2中将第1块数据再读一遍,读完时第2块数据已经完全写入FIFO1,zai允许FIFO1读,同时禁止FIFO2读,如此循环。途中,数据选择就是为了实现两个FIFO读,同时禁止FIFO2读,如此循环。图中,数据选择器就是为了实现两个FIFO的读出数据选通,第一次数据为FIFO1的读出内容,第2次数据是为了FIFO2读出内容,这样就实现将一块数据内容重复输出两次,读完两次的同时,写完下一块内容。
(3)加窗的DSP Builder实现
分帧后数据为8位定点Q0(即8位有符号整数),三角余玄函数的范围-1到1,可以用Q15来表示,但是Q15能表示的范围为-1到32767/32768之间。加窗的主要对象是查找表,
(4)端点检测
端点检测分门限计算和状态机检测两部分,由于端点检测是基于帧能量的,必须计算每帧的能量,所以增加一个乘累加器和控制时钟,在加窗的同时将每帧能量值计算出来。具体的硬件实现已经上传源代码(verilog语言)。
3.特征提取部分
MFCC特征提取
MFCC特征提取软件算法是将线性功率频谱转化为Mel频率下的功率谱,在计算之前在语音在语音的频谱范围内设置若干个三角带通滤波器,其中心频率fm在Mel频率上是均匀分布的。在线性频率上,当m较小时,相邻的fm间隔很小,随着fm的增加相邻的fm间隔逐渐增大,如图:

各三角滤波器是相互交迭的,每个滤波器三角形两个底点是
相邻滤波器的中心,则
实际频率转换为Mel频率的公式为:
Mel(f)=2595lg(1+f/700) (1)
Mel频率转换为实际频率(Hz)的公式为:
Freq=700*(10 exp(Mel/2595)-1) (2)
本实验采用的三角滤波器组个数L=23,因为L为23时识别率相对最高。再计算23组三角滤波器的下限、中心和上限频率时,根据截止频率,这里为16000/2=8000Hz,先用公式1在Mel频率上计算出均匀分布的23组滤波器的中心频率,再用公式2将Mel中心频率转换成实际中心频率(Hz)。得到23组三角滤波器的中心频率(Hz)和带宽(Hz)如下:
序号 | 中心频率 | 带宽 | 序号 | 中心频率 | 带宽 | 1 | 77 | 86 | 13 | 2401 | 303 | 2 | 163 | 96 | 14 | 2344 | 337 | 3 | 259 | 106 | 15 | 2681 | 374 | 4 | 365 | 118 | 16 | 3055 | 416 | 5 | 483 | 131 | 17 | 3471 | 462 | 6 | 614 | 145 | 18 | 3933 | 513 | 7 | 759 | 162 | 19 | 4446 | 570 | 8 | 921 | 179 | 20 | 5016 | 633 | 9 | 1100 | 200 | 21 | 5649 | 703 | 10 | 1300 | 221 | 22 | 6352 | 780 | 11 | 1521 | 246 | 23 | 7132 | 868 | 12 | 1767 | 274 |
|
|
|
|
|