0
点赞
收藏
分享

微信扫一扫

【语音识别】基于HMM实现中文语音识别含Matlab源码

1 简介

语音识别技术为人们提供一种更方便的人机界面,使人与计算机之间、人与人之间的通信更加方便、快捷。随着对语音识别技术深入的研究,它已经发展成为一门跨越多领域的综合学科,它与声学、语言学、心理学、信号处理、人工智能、模式识别、信息论和计算机技术等诸多学科领域紧密相连。它已在许多领域显示了巨大的应用前景,并且正在从研究走向应用。

【语音识别】基于HMM实现中文语音识别含Matlab源码_信号处理

【语音识别】基于HMM实现中文语音识别含Matlab源码_语音识别_02

【语音识别】基于HMM实现中文语音识别含Matlab源码_语音识别_03

【语音识别】基于HMM实现中文语音识别含Matlab源码_语音识别_04

2 部分代码

function hmm = inithmm(samples, M)


K = length(samples); %语音样本数

N = length(M); %状态数

hmm.N = N;

hmm.M = M;


% 初始概率矩阵

hmm.init    = zeros(N,1);

hmm.init(1) = 1;


% 转移概率矩阵

hmm.trans=zeros(N,N);

for i=1:N-1

hmm.trans(i,i)   = 0.5;

hmm.trans(i,i+1) = 0.5;

end

hmm.trans(N,N) = 1;


% 概率密度函数的初始聚类

% 平均分段

for k = 1:K

T = size(samples(k).data,1);

samples(k).segment=floor([1:T/N:T T+1]);

end


%对属于每个状态的向量进行K均值聚类,得到连续混合正态分布

for i = 1:N

%把相同聚类和相同状态的向量组合到一个向量中

vector = [];

for k = 1:K

seg1 = samples(k).segment(i);

seg2 = samples(k).segment(i+1)-1;

vector = [vector ; samples(k).data(seg1:seg2,:)];

end

mix(i) = getmix(vector, M(i));

end


hmm.mix = mix;


function mix = getmix(vector, M)


[nn esq] = kmeans(vector,M);


% 计算每个聚类的标准差, 对角阵, 只保存对角线上的元素

for j = 1:M

ind = find(j==nn);

tmp = vector(ind,:);

var(j,:) = std(tmp);

    m(j,:) = mean(tmp);

end


% 计算每个聚类中的元素数, 归一化为各pdf的权重

weight = zeros(M,1);

for j = 1:M

weight(j) = sum(find(j==nn));

end

weight = weight/sum(weight);


% 保存结果

mix.M      = M;

mix.mean   = m; % M*SIZE

mix.var    = var.^2; % M*SIZE

mix.weight = weight; % M*1

3 仿真结果

【语音识别】基于HMM实现中文语音识别含Matlab源码_聚类_05

【语音识别】基于HMM实现中文语音识别含Matlab源码_信号处理_06

4 参考文献

[1]沈泉波, 韩慧莲. 基于HMM的语音识别系统的Matlab仿真[J]. 电声技术, 2012, 36(10):56-57.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【语音识别】基于HMM实现中文语音识别含Matlab源码_语音识别_07



举报

相关推荐

0 条评论