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