Знаете ли вы хороший и эффективный БПФ?
Я пытаюсь найти очень быстрое и эффективное преобразование Фурье (БПФ). Кто-нибудь знает о каких-нибудь хороших. Мне нужно запустить его на iPhone, чтобы он не был интенсивным. Вместо этого, возможно, вы знаете о вейвлет-подобии, мне нужно разрешение по частоте, но только узкая полоса (максимальный диапазон звукового сопровождения до 10 кГц... даже 10 кГц может быть слишком высоким). Я также думаю об урезании этого БПФ, чтобы сохранить разрешение по частоте, исключая при этом нежелательную полосу частот. Это для айфона
... Я взглянул на FFT в Aurio touch, но кажется, что это int FFT, но мое приложение использует плавающие элементы... даст ли это значительное увеличение производительности, чтобы попытаться адаптировать программу к int FFT или нет (что я действительно не хочу делать... плюс Aurio Touch использует FFT Radix 2, который не так уж и велик).
6 ответов
Производительность FFTW устанавливает стандарт для FFT произвольной длины - особенно для не степеней 2 длин в 2 и более измерениях. Коммерческая лицензия на FFTW составляет 5000 долларов США, что может соответствовать или не соответствовать вашему бюджету.
Тем не менее, похоже, что у вас проблема с обработкой 1D сигнала, и в этом случае у вас есть еще несколько опций - и если вы можете дополнительно дополнить или сэмплировать ваши данные до степени степени 2, то многие библиотеки будут предлагать разумную производительность. Посмотрите этот список алгоритмов FFT, которые FFTW использовал для сравнения - многие из них бесплатны, а некоторые могут быть адекватными. Я, вероятно, начну с старых добрых числовых рецептов, которые предлагают простую мощную 2-мерную реализацию FFT бесплатно и некоторую типизацию - и будут очень эффективными с точки зрения памяти.
КСТАТИ - для голоса вам, вероятно, нужно всего лишь перейти на 3-4 кГц....10 кГц - это путь для человеческого голоса.
IPhone OS4 SDK будет включать в себя инфраструктуру Accelerate, которая (наконец) даст нам написанные Apple функции FFT
Accelerate предоставляет сотни математических функций, оптимизированных для iPhone и iPod touch, включая процедуры обработки сигналов, быстрые преобразования Фурье, основные векторные и матричные операции и стандартные в отрасли функции для разложения матриц и решения систем линейных уравнений.
Я обернул библиотеку БПФ Оуры в Objective-C. Код Ooura сопоставим по производительности с FFTW, но совершенно и совершенно бесплатный.
Этот код использует двойную точность и имеет несколько встроенных типов окон (прямоугольное, Blackwell, Triangle, Hamming). Я использую код БПФ Оуры для реализации метода Уэлча, который будет генерировать гораздо более гладкие спектры при просмотре с течением времени.
Проверьте это по адресу: http://github.com/alexbw/iPhoneFFT
Попробуйте самое быстрое преобразование Фурье на Западе ( FFTW). Производительность хорошая по сравнению с другими, но она не совсем бесплатная. Смотрите подробности о коммерческом использовании здесь. Очевидно, что, будучи библиотекой переменного тока, у вас не должно возникнуть проблем с подключением ее как статической библиотеки к вашему приложению для iPhone.
Вот основная ссылка на числовое программное обеспечение Ooura:
http://www.kurims.kyoto-u.ac.jp/~ooura/
Я использовал многие БПФ от Ooura на протяжении многих лет, я должен, по крайней мере, послать ему "домо", и я использую его настоящий radix-4 в нескольких приложениях для iPad и iPhone, находящихся в стадии разработки. Я перевел код для работы с 32-битной одинарной точностью для повышения производительности на ARM. Глядя на сборку, созданную с помощью XCode 3.2.2, она очень хорошо векторизуется с инструкциями NEON SIMD. Я был наполовину разочарован, так как я был готов немного векторизовать код для еще большей производительности. Эти оптимизации не могут быть выполнены без предварительного перевода БПФ на одинарную точность.
Хотя я использовал Objective-C в течение многих лет, я активно развивал его и даже преподавал курс объектно-ориентированного программирования с его использованием, но я не готовил такую оболочку (хотя я сделал то же самое еще в 1992 году с другим FFT) по причинам производительности.
Я не тестировал FFTW против FFT Оуры, по крайней мере, в течение 10 лет, но когда я это сделал, библиотека Ooura была быстрее на 1024 балла реальных БПФ. Тем не менее, вполне возможно, что FFTW теперь может работать намного лучше, но лицензировать его и кросс-компилировать для ARM неудобно, и я всегда считал, что FFTW слишком громоздкий и навязчивый для моих потребностей в DSP. VecLib от Apple очень хорош, но, к сожалению, они не перенесли его на iPhoneOS. Я открыл запрос функции в BugReporter, и вы тоже можете: https://bugreport.apple.com/
Как уже было сказано ранее, Accelerate Framework теперь предоставляет некоторые API, которые могут вам помочь.
Проверьте: