如何合并 MFCC

Posted

技术标签:

【中文标题】如何合并 MFCC【英文标题】:How to Merge MFCCs 【发布时间】:2017-12-26 14:27:09 【问题描述】:

我正在从一些音频文件中提取 MFCC 特征。我目前拥有的程序为每个文件提取了一系列MFCC,并有一个缓冲区大小为1024的参数。我在一篇论文中看到了以下内容:

在一秒钟的音频数据中提取的特征向量通过计算每个特征向量元素的均值和方差进行组合(合并)。

我当前的代码使用 TarsosDSP 来提取 MFCC,但我不确定如何将数据拆分为“一秒钟的音频数据”以合并 MFCC。

我的 MFCC 提取码

int sampleRate = 44100;
int bufferSize = 1024;
int bufferOverlap = 512;
inStream = new FileInputStream(path);
AudioDispatcher dispatcher = new AudioDispatcher(new UniversalAudioInputStream(inStream, new TarsosDSPAudioFormat(sampleRate, 16, 1, true, true)), bufferSize, bufferOverlap);
final MFCC mfcc = new MFCC(bufferSize, sampleRate, 13, 40, 300, 3000);
dispatcher.addAudioProcessor(mfcc);
dispatcher.addAudioProcessor(new AudioProcessor() 
    @Override
    public void processingFinished() 
        System.out.println("DONE");
    
    @Override
    public boolean process(AudioEvent audioEvent) 
        return true;  // breakpoint here reveals MFCC data
    
);
dispatcher.run();

缓冲区大小到底是多少?它可以用来将音频分割成 1 秒的窗口吗?有没有一种方法可以将一系列 MFCC 划分为一定的时间?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

经过更多研究,我发现this 网站清楚地显示了将 MFCC 用于 Weka 的步骤。它显示了一些数据文件,其中包含各种统计数据,每个数据文件在 Weka 中作为单独的属性列出。我相信当报纸上说的时候

计算均值和方差

它们意味着每个 MFCC 系数的均值和方差被用作组合数据文件中的属性。当我按照网站上的示例合并 MFCC 时,我使用了最大值、最小值、范围、最大值位置、最小值位置、均值、标准差、偏度、峰度、四分位数和四分位数范围。

为了将音频输入分成几秒钟,我相信 MFCC 的集合是以作为参数输入的采样率提取的,所以如果我将其设置为 100,我将等待 100 个周期来合并 MFCC。如果我错了,请纠正我。

【讨论】:

以上是关于如何合并 MFCC的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中绘制 MFCC?

如何在 Weka 中使用 MFCC 进行音频分类?

如何使用 MFCC 系数向量训练机器学习算法?

如何在 Java 中提取 MFCC 特征

如何处理音频字节以从实时音频流中提取 MFCC?

使用 MFCC 进行特征提取