基于GMM的说话人识别模型(matlab)
2013-03-29 23:09
435 查看
通过机器学习来解决说话人识别这一难题是当前的一个趋势。而GMM模型(高斯混合模型)在说话人识别领域很常用。标题有点大了,其实这只是一个框架模型。既然是框架模型,说明还要很多地方可以进一步的完善。虽然是个框架模型,但是其识别率也是可以达到70-80%左右。
%% 初始化 GMM_com = 16; training_count = 6; % 训练数据集类别数,有几个人就是几类 testing_count = 36; % 测试数据个数,至少录36段录音 wavdir = '/tmp/voice_test'; % 这是放数据的文件路径,如果提示文件无法打开,改用绝对路径 mu_train = zeros(training_count, 12, GMM_com); sigma_train = zeros(training_count, 12, GMM_com); c_train = zeros(training_count, GMM_com, 1); %% 训练过程 % 在<wavdir>/training/下为每个人建立一个文件夹,名称按数字顺序。 % 每个文件夹里是对应那个人的两段训练数据,分别命名为1.wav和2.wav。 for n = 1 : training_count twavdir = [wavdir, '/training/' num2str(n), '/1.wav']; twavdir2 = [wavdir, '/training/' num2str(n), '/2.wav']; [train_data1, fs] = readwav(twavdir); train_data1=filter([1-0.9378],1,train_data1);%预加重 train_feature1 = melcepst(train_data1, fs); % 提取MFCC特征 [train_data2, fs] = readwav(twavdir2); train_data2=filter([1-0.9378],1,train_data2);%预加重 train_feature2 = melcepst(train_data2, fs); % 训练高斯混合模型(Gauss Mixture Model),返回值是GMM模型的3个参数 [mu_train1, sigma_train1, c_train1] = gmm_estimate([train_feature1', train_feature2'], GMM_com); mu_train(n, : , : ) = mu_train1; sigma_train(n, : , : ) = sigma_train1; c_train(n, : , : ) = c_train1; end score = zeros(testing_count, training_count); %% 测试过程 for o = 1 : testing_count newlabel = [wavdir, '/testing/', num2str(o), '.wav']; [test_data, fs] = readwav(newlabel); test_data=filter([1-0.9378],1,test_data);%预加重 test_feature = melcepst(test_data, fs); % 提特征 for n = 1 : training_count sigma_train1 = zeros(12, GMM_com); mu_train1 = zeros(12, GMM_com); c_train1 = zeros(GMM_com, 1); for t = 1 : 12 for k = 1 : GMM_com sigma_train1(t, k) = sigma_train(n, t, k); mu_train1(t, k) = mu_train(n, t, k); end end for t = 1 : GMM_com c_train1(t, 1) = c_train(n, t, 1); end % 把第o个测试数据的特征与第n个GMM模型做匹配,计算得分 [lYM, lY] = lmultigauss(test_feature', mu_train1, sigma_train1, c_train1); [score(o, n)] = mean(lY); end end for h = 1 : testing_count [~, i] = max(score(h, : )); fprintf('results[%d]: %3d\n', h, i); end按照以上的模型做出来,正确率可以达到70-80%。初步考虑可以从对.端点检测程序和MFCC特征提取过程进行改进。再有就是这个模型其实是一个静态的模型,训练模型只训练了一次,没有一个动态学习的过程。可以考虑将识别出错的语句加入训练模型,建立一个训练--识别--查错--再训练的动态模型。
相关文章推荐
- 基于GMM-UBM的说话人识别 MSR Identity Toolkit
- 基于MATLAB实现的云模型计算隶属度
- 基于模型设计的FPGA开发与实现:滤波器设计与实现(三)Matlab中滤波器的HDL代码生成
- 基于matlab的蓝色车牌识别
- 数字图像处理:基于MATLAB的车牌识别项目
- 基于KLT算法的MATLAB人脸识别实例分析
- 基于matlab的语音识别系统设计
- 基于模板匹配的字符识别(Matlab) 字符识别模板匹配方法
- 基于BP人工神经网络的数字字符识别及MATLAB实现
- 基于Dropout深度神经网络的手写体数字识别(Matlab)
- 基于MATLAB的EAN-13条码识别系统
- 基于HMM轨迹识别matlab简单说明
- 学习笔记———《GMM模型以及基于EM算法的参数估计》
- 使用MATLAB加载训练好的caffe模型进行识别分类
- 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型
- 基于各种分类算法的说话人识别(年龄段识别)
- 语音识别中声学模型训练过程-GMM(一)
- 基于PCA的人脸识别的Matlab实现代码
- 结巴分词3--基于汉字成词能力的HMM模型识别未登录词
- 语音识别-声学模型(GMM-HMM)