首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Viterbi算法

理解Viterbi算法
EN

Stack Overflow用户
提问于 2013-03-10 08:14:34
回答 1查看 2.3K关注 0票数 1

我已经用我的系数训练了HMM,但不理解Viterbi解码器算法是如何工作的,例如:

代码语言:javascript
复制
 viterbi_decode(MFCC, M, model, q);
 where MFCC = coefficents 
 M = size of MFCC
 model = Model of HMM training using the MFCC coefficients 
 q = unknown (believed to be the outputted path).

但我不明白的是:我正在尝试比较两个语音信号(训练,样本),以找出最接近的匹配。例如,使用DTW算法,返回一个整数,然后我可以找到最接近的整数,但是,使用此算法,它返回一个int* array,因此很难区分。

下面是当前程序的工作原理:

代码语言:javascript
复制
vector<DIMENSIONS_2> MFCC = mfcc.transform(rawData, sample_rate);

int N = MFCC.size();
int M = 13;

double** mfcc_setup = setupHMM(MFCC, N, M);

model_t* model = hmm_init(mfcc_setup, N, M, 10);

hmm_train(mfcc_setup, N, model);

int* q = new int[N];

viterbi_decode(mfcc_setup, M, model, q); 

谁能告诉我Viterbi解码器是如何解决从训练到输入的最佳路径识别问题的?我已经在解码路径(q)上尝试了欧几里德距离和汉明距离,但没有这样的幸运。

任何帮助都将不胜感激

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-14 15:48:13

在这个例子中,我认为(q)是隐藏状态序列,所以是一个从0到>9的数字列表。如果你有两个音频样本,比如说测试和训练,并且你生成了两个序列q_test和q_train,那么考虑|q_test - q_train|是没有用的,因为它不能正确地表示距离的概念,因为HMM中的隐藏状态标签可能是任意的。

考虑距离的一种更自然的方法可能是,在给定q_train的情况下,您对测试样本采用相同路径的概率感兴趣,一旦有了转移矩阵和排放概率,您就可以计算该概率。

如果我误解了你的问题,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15317447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档