Портирование libmfcc в C # с использованием Bass Library - PullRequest
0 голосов
/ 09 февраля 2012

В настоящее время я использую Басовую библиотеку для анализа звука, которая может рассчитывать БПФ и возвращать его в виде массива, libmfcc использует эти данные для расчета значения необходимых мне коэффициентов MFCC.(Информация: MFCC похожа на аудиоспектр, но больше подходит для работы человеческого слуха и частотного масштабирования). Басовая библиотека возвращает значения от 0 до 1 в качестве значений FFT.

Теперь я столкнулся с несколькими проблемами и вопросами:

  • Кажется, что их примерные данные FFT имеют другой формат, значения очень высоки, а общая сумма значений FFT из 8192 равна 10739.24, как это может быть? [/ Li]
  • В своем примере приложения они вызывают функцию следующим образом.Почему они используют 128 в качестве размера массива FFT, если они только что загрузили 8192 значения?
  • Используя их класс MFCC, который я немного скопировал и отредактировал для соответствия C # Синтаксис / Функции Я получаю отрицательные значения для некоторых коэффициентов, я не думаю, чтодолжно быть дело.

Может кто-нибудь помочь мне, почему он возвращает отрицательные значения или что я сделал не так?Я сделал простой пример программы Ready to Try, которая делает описанное выше и полезна для отладки.
Ссылка: http://www.xup.in/dl,17603935/MFCC_Test.rar/

Вывод из моего приложения на C # (скорее всего, неверный)

Coeff 16 = 0,017919318626506 Coeff 17 = -0,155580763009355 Coeff 18 =-0,76072865841987 Coeff 19 = 0,108961510335727 Coeff 20 = 0,819025783804398 Coeff 21 = -0,660508603974514 Coeff 22 = -0,951623924906163 Coeff 23 = 0,424922129906254 Coeff 24 = 0,01683 067 296 067 296 06829726 = 0,270839393161931 Коэфф 27 = -0,138515788828431 Коэфф 28 = -0,454837674981149 Коэфф 29 = -0,448629344922371 Коэфф 30 = -0,11908663618393 Коэфф 31 = 0,237500036702818 Коэф, 100822381384326 Coeff 34 = 0,144242143551012 Coeff 35 = 0,209338502838453 Coeff 36 = 0,247588420953066 Coeff 37 = -0,451654204112441 Coeff 38 = 0,0346927542067229 Coeff 39 * 0,1 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 * 10 10 10 10 10Данные БПФ (в другом формате?)

14,524506 38,176363 10,673860 3,707676 2,102398 1,461585 1,145616 0,974108 0,878079 0,825304 0,798959 0,789067 0,789914 0,797102 0,808,86 0,822048 0,836592 0,851101 0,864869 0,877625 0,888780 0,897852 0,905033 0,910054 0,912214 0,912414 0,909593 0,904497

1029 *

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Подпрограмма MFCC возвращает кепстральные коэффициенты (DCT из логарифма значений магнитуд), * ​​1001 * не значения магнитуды melЦепстральные коэффициенты могут быть отрицательными.Я считаю, что значение 128 в примере кода действительно является ошибкой автора.Чтобы сохранить энергию сигнала, БПФ требует нормализации в некоторой точке (либо после БПФ, iFFT или разделения между ними).В примере вы смотрите на необработанные (ненормализованные) величины, поэтому они так велики.

0 голосов
/ 09 февраля 2012

Я могу ответить на первую часть: в примере кода четко указано, что входные данные были вычислены с использованием FFTW , что дает ненормализованный результат .Вам нужно разделить на sqrt (n), чтобы получить нормализованные значения, что, как я подозреваю, возвращает BASS.

Возможно, умножение ваших входных данных на sqrt (n) даст вам лучшие результаты.

...