新闻中心

EEPW首页>嵌入式系统>设计应用> 基于DSP嵌入式说话人识别系统的设计

基于DSP嵌入式说话人识别系统的设计

作者: 时间:2012-03-21 来源:网络 收藏

本文引用地址://m.amcfsurvey.com/article/257627.htm

1.2 选择说话人

该系统要训练10个人的语音,每个人的语音存放在FLASH ROM的不同位置。在训练的开始阶段,系统需确定当前训练者的身份,以便对训练完成后说话者模型参数存储位置有准确的判断。对当前训练者身份的选择由系统中的4个Switch实现。若把每个Switch的开关两种状态看成是二进制数的0,1,则最终可形成16种组合,代表16个人。该系统选取前10个组合。

1.3 AIC23语音采集

考虑到系统的实用性,语音的输入由mic in接口输入。语音采集若设为双声道,则采集的左右声道数据差别不大,对识别没有太大的帮助,而且采集到的语音会占用太大存储器空间,故采用单声道采样;对于采样精度要求,TLV320AIC23可实现8~96 kHz,16 b,20 b,24 b,32 b,的不同采样,随着采样频率的提高,采样间隔将相应的缩短,要求更大的内存空间和更长的处理时间,实验表明,采样率由16 kHz下降到8 kHz,所造成的识别率的微乎其微,但是可以节省50%的动态存储空间,并可减少大量的运算。对于采样位数,16 b精度已能满足该系统要求,故采样精度设为8 kHz,16 b采样。

1.4 数据的存储

由TLV320AIC23获得的语音信号的数据,只有赋值给相应的数组,才能在接下来的算法中有所应用。为此在SDRAM中定义一片数组存储区域。对于数组大小及类型的选择基于以下两点:

(1)数组大小选择。该系统算法中包含训练和识别两个内容。语音信号的训练需要大量的数据才能准确的提取语音的特征参量。该系统采用8 kHz采样率的10 s的语音信号,所需的数组空间大小为80 000个数据单位;语音信号的识别要求快速性,该系统采用时间较短的8 kHz 3 s语音信号,所需数组空间大小为30 000个数据单位,为了减少数据空间,系统设定为与训练数组共用前30 000个数据单位的空间。

(2)数组类型为浮点型,由于设定的采样格式是16 b采样,而采样后数据类型是Uint32,语音数据位于低16位,所以赋值过程中取低16位数据赋值给数组。

1.5 模型参数存入与参数调出

将模型参数存入FLASH ROM的目的是保存训练所得的参数,以供识别时调用。训练可能用于多次识别,或者训练和识别可能处于不同的时间地点,所以,保存参数的存储器选定为具有掉电时数据不丢失特点的FLASH ROM。每个说话者语音参数代表一个说话者身份,所以每个说话者模型参数应存储在FLASHROM中一个确定的位置。为此,该系统在FLASHROM中分配了10块的区域,每个说话者模型参数占有一块特定的区域。

在FLASH ROM中存人数据格式为32 b无符号整数。而训练得到的是浮点型的数据。这就要求在数据存入之前将浮点数转换为32 b无符号类型的整数,假设要转换的数据为float x[M][N]则转换方法如下:

(1)x[M][N]归一化;

(2)对x[M][N]乘以一常数K得到有符号整型的数组y[M][N],即:
y[M][N]=x[M][N]×K (1)

(3)屏蔽第32位符号位,得到32 b无符号类型的整数数组。方法如下:
z[i][j]=y[i][j]0x7FFFFFFF (2)

(4)将z[i][j]存入FLASH ROM。

通过统计实验数据发现归一化后数据的范围为10-5~1,故K选择为108,既可以实现较大精度的转化,又不会影响第31位的数值。转换得到的有符号整型数组y[M][N]范围为-108~108,在存储器中正数为原码表示,负数为补码表示,通过计算发现,该范围的正数第31位为0,负数第31位为1,所以,上述第(3)步,将有符号数转换为无符号数后,数值的正负改为使用第31位标识。在识别阶段,要将说话者的GMM参数依次从FLASH ROM中读出,逐个与待识别者语音的MFCC参数比较,求最大似然值。参数调出过程与以上存入过程相反。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭