2009-10-20 3 views
7

Я пытаюсь найти очень быстрое и эффективное преобразование Фурье (FFT). Кто-нибудь знает о хороших. Мне нужно запустить его на iPhone, чтобы он не был интенсивным. Вместо этого, возможно, вы знаете один, который вейвлет нравится, мне нужно разрешение по частоте, но только узкая полоса (диапазон вокального аудио до 10 кГц макс ... даже 10 кГц может быть слишком высоким). Im думает также об усечении этого FFT, чтобы сохранить частотное разрешение, устраняя нежелательную полосу частот. Это для iphoneЗнаете ли вы хороший и эффективный БПФ?

... Я взглянул на FFT в Aurio touch, но кажется, что это int FFT, но мое приложение использует поплавки ..... это даст большой прирост производительности, чтобы попробовать и адаптировать программу к int FFT или нет (что я действительно не чувствую, как делать ... плюс aurio touch использует radix 2 FFT, который не так уж и хорош).

+0

Учитывая Wavelet Transform не вычисляется таким же образом, как ДПФ, я бы сказал, что нет никакого алгоритма FFT вейвлет-как. – rlbond

+0

как о вейвлет-подобном fft в смысле вместо квадратной матрицы (4096by4096 для БПФ из 4096 образцов) мы используем 4096 отсчетов времени на 1024 частотных бункерах ... они не будут охватывать всю группу nyquist, и так будет сохраняйте желаемое частотное разрешение, не требуя для их вычисления всех ... это масштабный аспект всплесков всплесков, но только с одной шкалой .... так что я вроде как применяю фильтр .... который является частью WFT –

ответ

3

Производительность FFTW устанавливает стандарт для произвольной длины БПФ - особенно для неэнергии 2 длины в 2 и более размерах. Коммерческая лицензия на FFTW составляет 5000 долларов США, что может быть или не соответствовать вашему бюджету.

Однако, похоже, что у вас есть проблема с обработкой 1D сигнала, и в этом случае у вас есть еще несколько вариантов. Если вы можете добавить либо прокладку, либо образец ваших данных в длину длиной до 2, то многие библиотеки будут предлагать разумная производительность. Проверьте это list алгоритмов FFT, которые FFTW использовали для сравнения - многие из них бесплатны, а некоторые могут быть адекватными. Я бы, наверное, начинал с хорошего старого численного recipes, который предлагает легкую мощность 2, 1D FFT-реализации бесплатно и некоторую типизацию - и будет очень эффективен с точки зрения памяти.

BTW - для голоса вам, вероятно, нужно всего лишь перейти на 3-4Khz .... 10Khz - это путь вверх для голоса человека .

+0

Я согласен, но со стандартным FFT разрешение нижней полосы частот сильно ударило по уменьшению размера FFT, потому что частотные бункеры становятся слишком большими –

+0

спасибо, я посмотрю на эти ссылки, так как я всегда в силе 2 длины –

4

Дайте самое быстрое преобразование Фурье на Западе (FFTW) a, Производительность хороша по сравнению с другими, но это не совсем бесплатно. См. Подробности коммерческого использования here. Очевидно, что это библиотека c, у вас не должно возникнуть проблем с ее связыванием как статической библиотеки с вашим iphone-приложением.

+1

Он использует разделяемую память FYI, вы не можете безопасно запускать его параллельно. на самом деле не уверен, что это проблема на iphone или нет (возможно, нет?) –

+1

Если вы не возражаете, чтобы отпустить ваше приложение под GPLv2 (вы не можете использовать GPLv3 для iPhone-приложения), это совершенно бесплатно. Если это несовместимо с вашей бизнес-моделью, вам нужно будет проверить коммерческие параметры. –

7

Я обернул библиотеку FFT Ooura в Objective-C. Код Ooura имеет сопоставимую производительность с FFTW, но полностью и совершенно бесплатно.

Этот код использует двойную точность и имеет несколько встроенных типов окон (прямоугольник, Blackwell, Triangle, Hamming). Я использую код FFT Ooura для реализации Welch's method, который будет генерировать гораздо более плавные спектры при просмотре с течением времени.

Проверьте это по адресу: http://github.com/alexbw/iPhoneFFT

+0

просто последующие действия (три года спустя) - вы должны попытаться НЕ использовать iPhoneFFT в своем проекте. Apple выпустила vDSP и Accelerate.h на iPhone, и вы должны использовать такие функции, как vDSP_fft_zrip() для вычисления БПФ. Это БОЛЬШАЯ сделка быстрее, чем все, что я написал. – alexbw

+0

Действительно большие куски работы Алекс, проверили Октава и Оскопа обоих. Мне интересно, есть ли какие-либо библиотеки iOS, которые успешно обертывают vDSP для обнаружения человеческих звуков - теперь позвольте мне сказать вам, что я не знаю, означает ли это определение высоты тона или полоса пропуска или что. –

+0

Это само по себе является открытым вопросом исследования в области информатики (чтобы сделать это надежно).Если вас интересует определенный звук, запишите множество примеров и посмотрите на их спектрограммы. Это должно помочь вам создать фильтр, который может выборочно реагировать на него. – alexbw

2

Вот ссылка первичный источник числовым программным Ooura в:

http://www.kurims.kyoto-u.ac.jp/~ooura/

Я использовал много FFTs Ooura в течение многих лет, я должен послать он «domo», по крайней мере, и я использую его настоящий radix-4 в нескольких разрабатываемых iPad и iPhone приложениях. Я перевел код для работы с 32-битной одинарной точностью для производительности на ARM. Глядя на сборку, выпущенную с XCode 3.2.2, она очень хорошо прорисовывает команды NEON SIMD. Я был наполовину разочарован, так как я был готов немного векторизовать код для повышения производительности. Эти оптимизации не могут быть реализованы без предварительного перевода БПФ на единую точность.

В то время как я использовал Objective-C в течение многих лет, я активно развивал его и даже преподавал курсовое программирование, используя его, я не подготовил такую ​​обертку (хотя в 1992 году я сделал то же самое, другой БПФ) по соображениям производительности.

Я не тестировал FFTW против БПФ Оуры не менее 10 лет, но когда я использовал библиотеку Оуры, она была быстрее для 1024 точек реального БПФ. Однако вполне возможно, что FFTW может сделать гораздо лучше сейчас, но лицензирование и перекрестное компиляция для ARM неудобно, и я всегда считал FFTW слишком громоздким и назойливым для моих потребностей в DSP. Apple VecLib очень хорош, но, к сожалению, они не портировали его на iPhoneOS. Я открыл функцию запрос в BugReporter, и вы тоже можете: https://bugreport.apple.com/

+0

FFTW должен быть намного быстрее для длин, которые не являются круглыми числами в двоичном формате, например. для простых чисел. –

12

The iPhone OS4 SDK will include the Accelerate framework, который будет (наконец) дает Apple, написанной FFT функции

Ускорить обеспечивает сотни математических функций оптимизированы для iPhone и IPod коснуться, в том числе процедур обработки сигналов, быстрых преобразований Фурье , основной вектора и матричных операций, и стандартных промышленных функций для матриц факторинговых и решения систем из линейные уравнения.

Смежные вопросы