青岛大学本科生毕业论文(设计)
是语音特征参数中的任一特征向量,M是每个状态包含的高斯元的数目,cji是第j个状态第l个混合高斯函数的权,N是正态高斯概率密度函数,?ji代表第j个状态第l个混和高斯元的均值矢量,Uji代表第j个状态第l个混和高斯元的协方差矩阵,并且它满足条件:
?ci?1Mji?1,1?j?N。
根据HMM模型的不同参数,HMM模型有不同的分类方式。
一种分类方式是根据转移概率矩阵A??aij?的不同将HMM模型分为各态历经的和从左至右的两种结构。各态历经的HMM模型就是模型中的任一状态都可以经过有限步到达其他的所有状态;从左至右的HMM模型随着时间的增加,状态序列号是非递减的,这种模型又分为有跨越的和无跨越的两种。各态经历的HMM模型多用于说话人识别、语种辨识等,而语音的内容与时序有很大相关性,这个时序可以采用状态的先后关系来表示,所以语音识别必须采用从左至右的HMM模型。本文基于孤立词语音识别,不允许语音中间某部分被跳过,所以须采用从左向右并且无跨越的HMM模型。它的状态转移概率矩阵A??aij?必须满足
aij?0,j?i且j?i?1。
另一种分类方式是根据输出概率B的不同将HMM模型分为连续型、离散型、半连续型HMM。离散HMM的每一个状态的输出概率B是一个离散的概率矩阵,使用之前须对语音信号的特征参数向量进行矢量量化。连续HMM模型的输出概率B是连续的输出概率密度函数,它的形式有单高斯概率密度函数、混合高斯概率密度函数和分化高斯概率密度函数三种。半连续HMM模型是将离散HMM和连续HMM结合起来使用的一种方法。本文采用连续H1MM模型。
基于HMM模型的孤立词语音识别系统需解决的以下问题:.
(1)如何确定一个最优的状态转移序列q?(q1,q2,...,qT),并计算观察序列O?o1,o2,...oT对HMM模型的输出概率P(O|?),根据此概率判断语音命令的识别结果;
(2)如何调整允=(A,B,?)的参数使得输出概率P(O|?)最大。这是对HMM模型进行参数训练的问题。
在解决上述两个问题的过程中,都需要对输出概率P(Ol允)进行计算,因此这是此算法的另外一个关键问题。
3.3.5 OpenMP编程实现多核并行运算
实验平台为SAMSUNG R428系列双核笔记本。采用IntelPM45+ICH9M芯片组,Intel(R) Core(TM)2 Duo CPU,T6600处理器,2.20GHz主频,,高速缓存2MB,前端总线800MHz,内存DDR3,2048M,系统为Microsoft Windows XP Professional ( 5.1,版本2600),编译器为
26
青岛大学本科生毕业论文(设计)
MicrosoftVisual Studio 2010。在此平台上,用OpenMP改进二维离散快速傅里叶变换,实验数据为程序多次运行的平均值。 1、FFT算法编程实现
FFT程序设计分为两个部分:倒序排列和蝶形运算。倒序排列用于时域提取FFT的输入序列,本设计采用按时间抽选(DIT)的基-2蝶形运算,输入导位序,输出自然序。 (1)倒序排列部分编程:
串行版本: /*变址运算*/
for(i=1;i<=nm;i++)
{
//下标倒序排列
if(i while(j>=k){j=j-k;k=k/2;} j=j+k; } 并行版本: /*变址运算*/ // OpenMP并行处理 #pragma omp parallel for private(i,j) for(i=1;i<=nm;i++) { //下标倒序排列 if(i while(j>=k){j=j-k;k=k/2;} j=j+k; } (2)蝶形运算部分编程实现 串行版本: for(i=1;i<=nm;i++) for(L=1;L<=m;L++) { le=pow(2,L); B=le/2; pi=3.14159; for(j=0;j<=B-1;j++) { p=pow(2,m-L)*j; ps=2*pi/N*p; w.real=cos(ps);//w做初始化 w.imag=-sin(ps); for(i=j;i<=N-1;i=i+le) 27 青岛大学本科生毕业论文(设计) } } { ip=i+B; t=EE(xin[ip],w); //蝶形运算部分 xin[ip].real=xin[i].real-t.real; xin[ip].imag=xin[i].imag-t.imag; xin[i].real=xin[i].real+t.real; xin[i].imag=xin[i].imag+t.imag; } 并行版本: // OpenMP并行处理 #pragma omp parallel for private(L) for(i=1;i<=nm;i++) for(L=1;L<=m;L++) { le=pow(2,L); B=le/2; pi=3.14159; for(j=0;j<=B-1;j++) { p=pow(2,m-L)*j; ps=2*pi/N*p; w.real=cos(ps);//w初始化 w.imag=-sin(ps); for(i=j;i<=N-1;i=i+le) { ip=i+B; t=EE(xin[ip],w); //蝶形运算部分 xin[ip].real=xin[i].real-t.real; xin[ip].imag=xin[i].imag-t.imag; xin[i].real=xin[i].real+t.real; xin[i].imag=xin[i].imag+t.imag; } } } 2、声音识别——提取MFCC特征编程 对每一帧进行离散余弦变换(Discrete Cosine Transform,简称DCT变换)后得到MFCC特征值参数,此算法具有较强的抗干扰能力,将信号的能量集中到少数几个变换系数上,采用量化和熵编码可有效地压缩帧能量数据。 (1)DCT变换部分编程实现 串行版本: void MfccDCT (float *x, float *dctMatrix, int ceporder, int numChannels, float *mel_cep) 28 青岛大学本科生毕业论文(设计) { int i, j; for (i = 0; i <= ceporder; i++) { mel_cep[i] = 0.0; for (j = 0; j < numChannels; j++) { mel_cep[i] += x[j] * dctMatrix[i * numChannels + j]; } } return 0; } 并行版本: void MfccDCT (float *x, float *dctMatrix, int ceporder, int numChannels, float *mel_cep) { int i, j; // OpenMP并行处理 #pragma omp parallel for private(i) for (i = 0; i <= ceporder; i++) { mel_cep[i] = 0.0; for (j = 0; j < numChannels; j++) { mel_cep[i] += x[j] * dctMatrix[i * numChannels + j]; } } return 0; } (2)Mel滤波器编程实现 串行版本: MfccMelFilterBank (&a[0], fborder, &filter_bank[0], 1); for (i = 0; i < fborder; i++) filter_bank[i] = 0.5*LogE(filter_bank[i]); free(a); free(b); return(1); } 29 青岛大学本科生毕业论文(设计) 并行版本: MfccMelFilterBank (&a[0], fborder, &filter_bank[0], 1); // OpenMP并行处理 #pragma omp parallel for private(i) for (i = 0; i < fborder; i++) filter_bank[i] = 0.5*LogE(filter_bank[i]); free(a); free(b); return(1); } 30 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库语音识别论文(7)在线全文阅读。
相关推荐: