Библиотека предназначена для тех, кто не владеет C++, но хочет попробовать свои силы в использовании FFT.
Краткое описание API на русском языке: AntFFTapi.htm
Текущая версия: 1.0 Build: 23
Исходные тексты на C++: AntFFTsrc-1.0.23.zip (1 869 965 байт)
Компилированная библиотека .DLL: AntFFTdll-1.0.23.zip (125 218 байт)
Пример использования библиотеки на Delphi: testFFTdelphi.zip (6 745 байт)
Разглядывая картинки в Спектралабе с результатами работы разных кодеров, возникла мысль: а не написать ли мне какую-нибудь программулину, которая бы упростила бы анализ кодеров. У меня были наброски проекта для одной задачи, который в дело не пошел, но в нем использовалась библиотека быстрого преобразования Фурье FFTW (http://www.fftw.org/). Достал исходники, немного покромсал их и стал гонять мой любимый Lame на разных режимах. Исходный Wav - это небольшой кусок моей любимой "Shine on you crazy diamond" из Pink Floyd. Результаты загнал в таблицу (см. описание тестовой программы), и так мне захотелось поделиться с кем-нибудь "достигнутым", что я не удержался, и недолго думая, послал результаты Александру Радзишевскому. В ответ получил заинтересованное письмо с предложением развить идею.
У Александра возникла куча идей, какой должна быть программа. Но, к сожалению, из-за нехватки времени, я вряд ли смогу довести ее в ближайшее время до приличного вида. Поэтому решил, для начала, ограничиться небольшой библиотекой, в которой будет немного, но полезных функций:
А потом уже, с использованием ее написать что-нибудь посерьезнее. А может быть кто-нибудь раньше меня сможет это сделать.
Конечная цель: найти некий объективный показатель, или несколько показателей, которые были бы адекватны субъективным ощущениям. Но какой это будет показатель - это тема отдельного обсуждения.
Александр предложил: вычесть амплитудные значения кодированного сигнала из некодированного сигнала и представить это в графике, где за 0 (прямая линия) будут взяты значения оригинального сигнала, а разница (в большую или меньшую сторону) будет отображаться соответствующими кривыми. (Остальные идеи он, видимо, предложит сам)
А здесь - место для других вариантов анализа
Это консольное приложение, написанное на VC 6.0
Опции командной строки:
testFFT.exe WavFileName.ext [options]
where options is:
-N -FFT size (default=65536)
-F|f -Print all data (F-on,f-off(default))
-S|s -Print sum by ranges(S-on(default),s-off)
-D -Number of ranges (default=8)
-W -windows function, may be: hamming,hanning,triangular or welch
else - no windows function
Я просто перенес исходный текст из C на Delphi, с соответствующими изменениями в синтаксисе. А заодно добавлены всякие кнопочки, которые в консольном варианте как опции командной строки.
Должен заметить, что я небольшой знаток Delphi (да и C тоже), так, пописываю по мелочи. И мои исходники вряд ли могут быть образцом для подражания. Да я и не сильно напрягался.
И еще, для вывода результатов я использовал TMemo, но он, видимо, имеет ограничения на объем выводимой информации, и если ее много - он перестает ее принимать.
Для функций работы с .WAV файлами использована библиотека libsndfile http://www.zip.com.au/~erikd/libsndfile/.
Для функций FFT-преобразования использована библиотека FFTW http://www.fftw.org/.
Если лень компилировать тесты - то можете взять уже компилированные testFFTexe.zip
Примечание: Результат FFT-преобразования без использования оконных функций практически идентичен Спектралабовскому "Uniform". А с использованием указанных функций - результат почти в два раза меньше. Причину я пока не понял.
Если возникнут
вопросы, пишите мне: mailto:ant@kmbank.kuban.ru
Анатолий