资源简介
基于GMM的说话人识别(C代码),其中包括了GMM.C和MFCC.C,以及它们的头文件。
代码片段和文件信息
/** @file
********************************************************************************
模块名: 高斯混合模型过程
文件名: gmm.c
相关文件: gmm.h
文件实现功能: 高斯混合模型过程相关函数的实现
作者: Dake
版本: V2010.09.01
编程方式: ANSI C语言编程
授权方式: Copyright(C) Dake
联系方式: chen423@yeah.net
生成日期: 2010-07-05
--------------------------------------------------------------------------------
多线程安全性: <是/否>[,说明]
异常时安全性: <是/否>[,说明]
--------------------------------------------------------------------------------
备注: 高斯混合模型:GMM={p[i] u[i][D] cMatrix[i][D]},i=0...M-1
--------------------------------------------------------------------------------
修改记录:
日 期 版本 修改人 修改内容
YYYY/MM/DD X.Y <作者或修改者名> <修改内容>
*******************************************************************************/
#include
#include
#include
#include
#include “gmm.h“
#include “cluster.h“
#define DIFF_GMM_VALUE 1 //!< GMM归一阈值
#define IDENTIFY_VALUE (-30000) //!< 识别阈值
//#define IDENTITY_frame_NUM 100 //!< 识别帧数
static double getDistance(double * p1 double * p2);
static BOOL InitGMM(double ** X GMM * pGMM int train_frame_num int m); // 初始化GMM参数
static BOOL BuildGMM(GMM * pGMM GMM * Out double ** X int train_frame_num int m);
static double GMM_diff(GMM * gmm1 GMM * gmm2);
static double GMM_density(GMM * pGMM double * X int index); // 高斯密度函数
/** @function
********************************************************************************
函数名: InitGMMClass()
功能: 初始化GMM结构
用法: 由GMM结构的f_init调用
参数:
[OUT] pGMM: GMM结构指针
[IN] m: GMM的高期混合数
返回:
调用:
*******************************************************************************/
void InitGMMClass(GMM * pGMM int m)
{
pGMM->m = m;
pGMM->p = NULL;
pGMM->u = NULL;
pGMM->cMatrix = NULL;
pGMM->f_CallocGMM = CallocGMM;
pGMM->f_FreeGMM = FreeGMM;
}
/** @function
********************************************************************************
函数名: CallocGMM()
功能: 为GMM结构内的指针分配内存
用法: 由GMM结构的f_CallocGMM调用
参数:
[OUT] pGMM: GMM结构指针
返回:
调用:
*******************************************************************************/
void * CallocGMM(GMM * pGMM)
{
int i;
int m = pGMM->m;
pGMM->p = (double *)calloc(m sizeof(double));
if (!pGMM->p)
{
return NULL;
}
pGMM->u = (double **)malloc(m * sizeof(double *));
if (!pGMM->u)
{
free(pGMM->p);
return NULL;
}
pGMM->cMatrix = (double **)malloc(m * sizeof(double *));
if (!pGMM->cMatrix)
{
free(pGMM->p);
free(pGMM->u);
return NULL;
}
for (i = 0; i < m; ++i)
{
pGMM->u[i] = (double *)calloc(D sizeof(double));
if (!pGMM->u[i])
{
for(--i; i >=0 ; --i)
{
free(pGMM->u[i]);
free(pGMM->cMatrix[i]);
}
free(pGMM->p);
free(pGMM->u);
free(pGMM->cMatrix);
return NULL;
}
pGMM->cMatrix[i] = (double *)calloc(D sizeof(double));
if (!pGMM->cMatr
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 14131 2011-11-29 08:09 基于GMM的说话人识别(C代码)\gmm.c
文件 1988 2011-11-29 08:09 基于GMM的说话人识别(C代码)\gmm.h
文件 14763 2011-11-29 08:09 基于GMM的说话人识别(C代码)\mfcc.c
文件 1804 2011-11-29 08:09 基于GMM的说话人识别(C代码)\mfcc.h
目录 0 2015-01-12 16:28 基于GMM的说话人识别(C代码)
----------- --------- ---------- ----- ----
32686 5
- 上一篇:nurbs的c语言代码
- 下一篇:车牌识别C++实现
评论
共有 条评论