用于说话人验证的MFCC矢量量化隐马尔可夫模型

时间:2014-03-11 22:34:51

标签: models hidden speaker markov mfcc

我目前正在使用隐马尔可夫模型进行演讲者验证项目。我为我的特征提取选择了MFCC。我还打算将VQ应用于它。我已经实施了HMM并在Eisner的数据电子表格中对其进行了测试:http://www.cs.jhu.edu/~jason/papers/并获得了正确的结果。

使用语音信号,我似乎错过了一些东西,因为我没有得到正确的接受(我使用前向算法进行概率估计 - 没有应用缩放)。我想知道我做错了什么。我使用scikits talkbox的MFCC函数进行特征提取,并使用Scipy的聚类进行矢量量化。这是我写的:

from scikits.talkbox.features import mfcc
from scikits.audiolab import wavread
from scipy.cluster.vq import vq, kmeans, whiten

(data, fs) = wavread(file_name)[:2]
mfcc_features = mfcc(data, fs=fs)[0]

#Vector Quantization
#collected_feats is a list of spectral vectors taken together from 3 voice samples
random.seed(0)
collected_feats = whiten(collected_feats)
codebook = kmeans(collected_feats, no_clusters)[0]


feature = vq(mfcc_features, codebook)

#feature is then used as the observation for the hidden markov model

我假设scikits的默认参数' mfcc功能已经适合扬声器验证。音频文件的采样率为8000和22050.我在这里缺少什么?我为VQ选择了一个64的集群。每个样本都是一个孤立的单词。持续时间至少为1秒。我还没有发现Python函数来消除语音样本中的静音,因此我使用Audacity手动截断静音部分。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:-1)

我不确定HMM方法,但我建议使用GMM。 ALize是一个很棒的库。要删除静音,请使用LIUM库。该过程称为扬声器分类,程序检测说话者说话的位置并给出时间戳。