Как объединить MFCC

Я работаю над извлечением функций 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 ответ

Решение

После дополнительных исследований я наткнулся на этот веб-сайт, на котором четко показаны этапы использования MFCC для Weka. Он показал некоторые файлы данных с различной статистикой, каждый из которых перечислен как отдельные атрибуты в Weka. Я верю, когда газета сказала

вычисление среднего и дисперсии

они означали, что среднее значение и дисперсия каждого коэффициента MFCC использовались в качестве атрибутов в объединенном файле данных. Когда я следовал примеру на веб-сайте для объединения MFCC, я использовал max, min, range, max position, min position, среднее значение, стандартное отклонение, асимметрию, эксцесс, квартиль и межквартильный диапазон.

Чтобы разделить аудиовход на секунды, я считаю, что наборы MFCC извлекаются с частотой дискретизации, введенной в качестве параметра, поэтому, если я установлю его на 100, я буду ждать 100 циклов, чтобы объединить MFCC. Пожалуйста, поправьте меня, если я ошибаюсь.

Другие вопросы по тегам