我已经实现了MFCC算法并希望实现BFCC。它们和之间有什么区别仅仅是使用另一个函数而不是频率来融合(2595 * Math.log10(1 + frequency / 700))和mel到频率函数(700 *( Math.pow(10,mel / 2595) - 1))我遵循以下代码:MFCC
PS:是否需要更改三角形过滤器的代码?
答案 0 :(得分:5)
这些只是表示滤波器频率间隔的不同比例。 MFCC
使用滤波器,其中心频率沿梅尔标度间隔,而BFCC
将使用中心频率沿树皮比例间隔的滤波器。
树皮比例简单地表示为:
Bark(f)=13*arctan(0.00076*f)+3.5*arctan((f/(7500))*(f/(7500)))
其中f
是以Hz为单位的频率
虽然您可以使用树皮比例来表示中心频率间距,但研究表明,使用mfcc或bfcc来表示输入语音样本的特征向量对ASR系统性能的影响非常小。行业标准仍然是MFCC。事实上,我没有听说过很多BFCC。
如果用于计算滤波器系数的代码是相对通用的并且它将中心频率作为输入参数,那么我会说你没问题。但是,最好再仔细检查一下。使用MATLAB并绘制频率响应并检查!您可以查看[以下论文] [1],以便比较MFCC,BFCC和均匀比例频率间隔。
更新1:滤波器的中心频率是带通/带阻滤波器的上截止频率和下截止频率之间的算术/几何平均值。
此外,给定Bark频率求解f
的逆方程并非无足轻重。这将是一个需要解决的二次方程。一种方法是为f和Bark的不同值构建一个表,然后进行表查找。但我无法找到反向方程式的任何链接。
[1]: http://148.204.64.201/paginas%20anexas/voz/articulos%20interesantes/front%20end/MFCC/a-comparative-study-of.pdf
答案 1 :(得分:0)
你可以改为选择每个树皮临界频带的频率(if和s的bounch),因为没有精确的树皮临界频带方程(对于梅尔也是如此,但有一个非常接近的),然后得到每个波段值的对数,然后应用dct,记住这是针对每一帧,梅尔比例也使用对数比例,所以做mfcc或bfcc之间没有多大关系。