使用 writehtk 进行特征提取(说话人识别)

Posted

技术标签:

【中文标题】使用 writehtk 进行特征提取(说话人识别)【英文标题】:Using writehtk for feature extraction (Speaker Identification) 【发布时间】:2017-04-03 09:23:07 【问题描述】:

我正在研究说话人识别,发现this post on ***.com 非常有用。

虽然代码运行良好,但我只是有点怀疑:

答案中给出的代码

fRate = 0.010 * fs; 
....
writehtk(featureFilename, mfc', 100000, 9);

来自 Voicebox 的函数writehtk

function writehtk(file,d,fp,tc)
%WRITEHTK write data in HTK format []=(FILE,D,FP,TC)
%
% Inputs:
%    FILE = name of file to write (no default extension)
%       D = data to write: one row per frame
%      FP = frame period in seconds
%      TC = type code = the sum of a data type and (optionally) one or more of the listed modifiers

writehtk 函数需要以秒为单位的帧周期,但在代码中单位是别的东西。

谁能解释一下这个值是怎么得到的?

【问题讨论】:

【参考方案1】:

post you linked to 有一点混乱。

使用fRate 作为melcepst 的参数表明作者打算将fRate 表示转换为多个样本的帧之间的10 毫秒间隔(而不是帧速率)。这也与作者使用100000 作为FP 参数一致,如果此参数以100ns 为单位(这是执行writehtk function already does internally 转换的错误尝试)。

我个人会将变量 fRate 重命名为 fInterval 以避免混淆速率(通常以 Hz 为单位)和时间间隔(通常在指定采样率时以秒或样本数给出):

fInterval = 0.010 * fs; % in samples
...
mfc = melcepst(s, fs, '0dD', nCeps, nChan, fSize, fInterval, fL, fH);

那么以秒为单位的帧持续时间就是 0.01,或者根据之前定义的变量 fInterval/fs 给出:

writehtk(featureFilename, mfc', fInterval/fs, 9);

【讨论】:

感谢 SleuthEye!如果作者的代码已经直接用于编写htk文件,(考虑到不正确的尝试进行转换),htk文件能正确生成吗? 主要是。帧时长(FP)参数只写在htk文件开头附近,对保存的系数没有影响。

以上是关于使用 writehtk 进行特征提取(说话人识别)的主要内容,如果未能解决你的问题,请参考以下文章

语音识别基于matlab GUI MFCC特征说话人识别系统含Matlab源码 1153期

语音特征的提取

说话人识别概述

哪种功能,算法适合说话人验证

使用 Microsoft Cognitive 进行实时说话人识别

一些常用的语音特征提取算法