我正在做一个关于音乐流派分类的项目,并决定使用一个 hmm 来对我的数据进行建模。从多个歌曲剪辑中提取 mfcc' 后,我得到多个大小为 13 * x 的矩阵(取决于歌曲长度)。
据我了解,hmm_train 不能用于向量序列,而 murphyk 的工具箱可能会起作用。我尝试如下修改演示文件以尝试一首歌曲,但我收到错误“尝试访问 obsmat(:,61.6357); 索引必须是正整数或逻辑......'
O = 5;
Q = 10;
v=wavread('We are the champions');
coeff=melfcc(v);
data=coeff';
% initial guess of parameters
prior1 = normalise(rand(Q,1));
transmat1 = mk_stochastic(rand(Q,Q));
obsmat1 = mk_stochastic(rand(Q,O));
% improve guess of parameters using EM
[LL, prior2, transmat2, obsmat2] = dhmm_em(data, prior1, transmat1, obsmat1, 'max_iter', 5);
LL
我以前没有研究过这些东西,所以如果我的问题真的很基本,我提前道歉。如果有人能告诉我哪里出错了,那就太好了。同样对于多个剪辑,我是否应该简单地将生成的矩阵附加到我上面提供的矩阵中?谢谢。
编辑:事实证明,上面的 hmm 只能应用于离散值,这可能是我遇到错误的原因。看来我必须使用另一个函数来代替“高斯输出”,mhmm_em。我会发布另一个问题来弄清楚它的工作原理。