打印

基于DSP的高速实时语音识别系统的设计

[复制链接]
943|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Jasmines|  楼主 | 2019-4-27 13:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于DSP的高速实时语音识别系统的设计



    实时语音识别系统中,由于语音的数据量大,运算复杂,对处理器性能提出了很高的要求,适于采用高速DSP实现。虽然DSP提供了高速和灵活的硬件设计,但是在实时处理系统中,还需结合DSP器件的结构及工作方式,针对语音处理的特点,对软件进行反复优化,以缩短识别时间,满足实时的需求。因此如何对DSP进行优化编程,解决算法的复杂性和硬件存储容量及速度之间的矛盾,成为实现系统性能的关键。本文基于TMS320C6713设计并实现了高速实时语音识别系统,在固定文本的说话人辨识的应用中效果显著。

1 语音识别的原理
语音识别的基本原理框图如图1所示。语音信号中含有丰富的信息,从中提取对语音识别有用的信息的过程,就是特征提取,特征提取方法是整个语音识别系统的基础。语音识别的过程可以被看作足模式匹配的过程,模式匹配是指根据一定的准则,使未知模式与模型库中的某一模型获得最佳匹配。


  1.1 MFCC
  语音识别中对特征参数的要求是:
  (1) 能够有效地代表语音特征;
  (2) 各阶参数之间有良好的独立性;
  (3) 特征参数要计算方便,保证识别的实时实现。
  系统使用目前最为常用的MFCC(Mel FrequencyCepstral Coefficient,美尔频率倒谱系数)参数。
  求取MFCC的主要步骤是:
  (1) 给每一帧语音加窗做FFT,取出幅度;
  (2) 将幅度和滤波器组中每一个三角滤波器进行Binning运算;
  (3) 求log,换算成对数率;
  (4) 从对数率的滤波器组幅度,使用DCT变换求出MFCC系数。

本文中采用12阶的MFCC,同时加过零率和delta能量共14维的语音参数。

1.2 DTW
语音识别中的模式匹配和模型训练技术主要有DTW(Dynamic Time Warping,动态时间弯折)、HMM(HideMarkovModel,隐马尔科夫模型)和ANN(Artificial Neu-ral Network,人工神经元网络)。

DTW是一种简单有效的方法。该算法基于动态规划的思想,解决了发音长短不一的模板匹配问题,是语音识别中出现较早、较为经典的一种算法。DTW算法的原理是计算两个长度不同的语音之间的相似程度,即失真距离。
设测试语音和参考语音用T和R表示,他们分别含有N帧和M帧的语音参数。本文中每帧语音的特征参数为14维,因此T,R分别为N×14和M×14的矩阵。把测试语音的各个帧号x=1~N在一个二维直角坐标系中的横轴上标出,把参考语音的各帧号y=1~M在纵轴上标出,通过这些表示帧号的整数坐标画出一些纵横线即可形成一个网格,网格中的每一个交叉点(x,y)表示测试模式中某一帧号与训练模式某一帧的交叉点,对应于两个14维向量的欧氏距离。DTW算法在于寻找一条通过此网格中若干交叉点的路径,使得该路径上节点的路径和最小。算法示意图如图3所示。


2 系统硬件环境
本系统的核心芯片为TI公司的32位浮点数字信号处理器TMS320C6713。其时钟频率最高可达300 MHz,处理能力可以高达1 336 MIPS和1 000 MFLOPS。由于256 kB的片上RAM无法满足多路信号处理时的空间需求,系统通过EMIF(External Memory Interface,外部存储器接口)扩展了32 MB的外部SDRAM,并采用EDMA(External Direct Memory Access,扩展的直接存储器访问)方式对这些外部空间进行访问。


TMS320C6713有2个McBSPs(Multi-channel Buff-ered Serial Port,多通道缓冲串口),每个McBSP,可与多达128个通道进行收发。本系统中采用McBSP0实现数字语音信号到DSP的输入,DSP进行实时判**输出结果。

3 软件实现
由于TMS320C6x系列的C语言编译器的效率可达汇编语言的70%~80%,并且C语言具有开发周期短、可维护性好、可移植性好、可继承性好等优点,所以软件采用C语言实现。

3.1 软件流程
测试中采用10个参考模板,每个模板由相应的参考语音中2 s的语音数据训练而成。识别策略为每路积累2 s的接收语音数据后与逐个参考模板进行匹配,如果经由DTW运算所得的距离值小于特定的门限,就判决已匹配。如果不匹配,就继续接收匹配,超过8 s匹配不上,就放弃。软件流程框图如图5所示,其中语音数据的采样率为8 000 Hz,每帧取256个采样点,即32 ms的数据为一帧。


程序调试通过后,采用CCS对其实时性进行分析。CCS(Code Composer Studio,代码编译器)是TI公司提供的软件开发环境。他扩展了基本的代码生成工具,集成了调试和实时分析功能。在CCS下,程序通过Wintech TDS510仿真器接到目标板的JTAG口进行硬件仿真测试。
测试发现1帧信号的处理时间为78 135 679个指令周期,即391 ms(TMS320C6713工作在200 MHz),远远达不到实时处理的要求,必须对其进行优化。

3.2 代码的优化
首先根据TI公司提供的软件开发流程,从合作编译器选项、使用内联函数、使用字访问短整型数据和使用软件流水等方面对代码进行了优化。具体实现中,采用-pm选项、-op3选项和-o3选项对程序进行了重新编译。展开内层循环,并通过#pragma MUST ITERATE()告诉编译器循环执行的次数,上述优化后,处理一帧的时间从78 135 679个指令周期降到了50 364 683个指令周期,但是还是无法满足实时性的要求。
进一步对代码进行测试分析,提取MFCC参数的过程中,256点的实数FFT运算占用了大量的时间。TI公司针对C6000系列的DSP提供了丰富的库函数可以方便地调用。这里,从dsp67x.
lib中调用DSPF_dp_cfftr4_dif()进行256点实数的FFT运算,把提取MFCC的时间降为了0.72 ms。
由于采用10个参考模板,每路数据一次识别就要进行10次DTW的运算,所以如何减少DTW的运算时间是优化的重点。对DTW的优化从两方面进行,首先采用查表法缩小匹配时搜索的区域。
由于DTW匹配的过程中限定了弯折的斜率,因此好多格点实际上是达不到的,如图6所示。因此菱形之外的格点对应的帧匹配距离是不需要计算的。在本系统的应用中,因为每次都以2 s和2 s的语音数据进行匹配,M和N都固定是64帧,所以可以建一个表格储存菱形区域内的测试帧号和参考帧号,匹配时只计算表格中两帧间的矢量距离,即欧氏距离,从而把欧氏距离的运算从40 960次减少到了19 460次。
在采用DTW快速算法后,还需进行了19 460次欧氏距离的运算。测试可得,每次运算耗时1 524个指令周期,所以这部分的运算仍是影响识别速度的关键。为了进一步提高代码的性能,把这段代码改为线性汇编来实现。
完成上述全部优化后,测试得到,处理一帧的时间为1 849 365个指令周期,其中TMS320C6713工作在200 MHz,即处理1帧的时间为1 849 365/200 000 000=9.25 ms,达到0.29倍实时。

4 实验及小结
为了测试上述系统的识别性能,对其进行了固定文本的说话人辨识实验。实验中,采用录音设备录制了10个人、3个不同时间所说的同一句话,共30句,平均时间长度为4.5 ms。从每个人的3句话中选择频谱最清晰的一句训练成模板,另外录制20句由这10个人所说的长度接近但内容不同的语音做测试语音。这样模板库中有10个模板,测试语音有50个。
首先通过各模板间的匹配,确定了判决门限0.2,然后把50句测试语音依次送入识别系统,所有语音全部正确匹配。
本文通过对DTW算法的改进,结合TMS320C6713的特点对C代码进行了优化,在保证识别率的情况下,用TMS320C6713成功地实现了语音信号的高速实时识别。

使用特权

评论回复

相关帖子

沙发
Jasmines|  楼主 | 2019-4-27 13:37 | 只看该作者
基于DSP的高速实时语音识别系统的设计

文档1.pdf

181.24 KB

使用特权

评论回复
板凳
usysm| | 2019-5-1 16:21 | 只看该作者
语音识别系统可以分为:特定人与非特定人的识别、独立词与连续词的识别、小词汇量与大词汇量以及无限词汇量的识别

使用特权

评论回复
地板
typeof| | 2019-5-1 16:21 | 只看该作者
信号识别最重要的一环就是特征参数提取  

使用特权

评论回复
5
yujielun| | 2019-5-1 16:21 | 只看该作者
大多数的DSP芯片都支持汇编语言与C或C++语言的混合编程

使用特权

评论回复
6
htmlme| | 2019-5-1 16:22 | 只看该作者
DSP芯片构成的语音识别系统有着广泛的应用前景

使用特权

评论回复
7
pklong| | 2019-5-1 16:22 | 只看该作者
随着语音识别技术的发展,使得对数字的语音识别成为可能  

使用特权

评论回复
8
touser| | 2019-5-1 16:23 | 只看该作者
语音信号采集模块主要包括语音信号的输入输出模拟通道

使用特权

评论回复
9
myiclife| | 2019-5-1 16:23 | 只看该作者
语音识别是机器通过识别和理解过程把语音信号转变为相应的文本文件或命令的高技术。

使用特权

评论回复
10
uytyu| | 2019-5-1 16:24 | 只看该作者
用C语音编写?           

使用特权

评论回复
11
iyoum| | 2019-5-1 16:24 | 只看该作者
建议用TI的Dsp,高端的有浮点运算。

使用特权

评论回复
12
jkl21| | 2019-5-1 16:25 | 只看该作者
DSP在做图像识别,语音识别领域有着得天独厚的特点

使用特权

评论回复
13
yujielun| | 2019-5-1 16:25 | 只看该作者
在用C语言编写语音识别算法时 采用了定点化处理技术

使用特权

评论回复
14
usysm| | 2019-5-1 16:25 | 只看该作者
语音识别过程主要包括语音信号的预处理、特征提取、模式匹配几个部分。

使用特权

评论回复
15
typeof| | 2019-5-1 16:25 | 只看该作者
DSP实现语音识别算法时,虽然程序的运行速度提高了,但是数据精度比较低

使用特权

评论回复
16
jkl21| | 2019-5-1 16:25 | 只看该作者
完全靠运算实现的算**能最好使用的就是拥有硬件乘加器的Dsp来做cpu了。

使用特权

评论回复
17
iyoum| | 2019-5-1 16:25 | 只看该作者
语音识别硬件组成要考虑很多其它因素

使用特权

评论回复
18
uytyu| | 2019-5-1 16:25 | 只看该作者
核心技术是语音识别技术。   

使用特权

评论回复
19
myiclife| | 2019-5-1 16:25 | 只看该作者
语音识别系统的模型通常由声学模型和语言模型两部分组成

使用特权

评论回复
20
touser| | 2019-5-1 16:25 | 只看该作者
需要进行电源供电及去耦电路以及一些功能引脚包括帧同步延迟输出、电压下拉、输出监控、参考电压过滤输出等

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

745

主题

1077

帖子

10

粉丝