Требуется алгоритм БПФ с фиксированной точкой

Я разрабатываю алгоритм аудиоприложения для мобильных платформ. Мне кажется, что в настоящее время поддержка вычислений с плавающей запятой на многих мобильных процессорах не является повсеместной, и разработка с фиксированной точкой была бы более безопасной ставкой.

Я писал подпрограммы БПФ в форме с плавающей запятой в течение некоторого времени с некоторым успехом, однако написать одну из них в фиксированной точке оказалось довольно сложно. А именно, я был бы рад улучшить точность, а также найти способ справиться с потенциальными переполнениями. Проблема в том, что, в отличие от БПФ с плавающей запятой, описания алгоритмов БПФ с фиксированной точкой трудно найти в Интернете.

Кто-нибудь имел опыт разработки таких алгоритмов?


person Werdok    schedule 09.10.2013    source источник
comment
Если под мобильным устройством вы имеете в виду мобильные телефоны, обратите внимание, что почти все поставляемые в настоящее время смартфоны содержат процессоры ARM, которые поддерживают аппаратные арифметические единицы с плавающей запятой. Возможно, не для старых мобильных телефонов (PalmOS, Android 1.x и т. д.) и аппаратного обеспечения сенсорного типа.   -  person hotpaw2    schedule 10.10.2013


Ответы (3)


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

Если вам по-прежнему нужен портативный БПФ с фиксированной точкой ANSI C, я знаю только один вариант: kissfft. (Отказ от ответственности: я написал это)

person Mark Borgerding    schedule 10.10.2013
comment
Привет, Марк, пару дней назад я действительно читал ваш код, и кажется, что это единственное готовое решение в Интернете для БПФ с фиксированной точкой. Возможно, вы правы в том, что для достижения оптимальной производительности необходимо искать встроенное в платформу БПФ, я посмотрю на это. - person Werdok; 11.10.2013

Я много читал о http://anthonix.com/ffts/index.html — это хорошо работает на мобильных платформах - сайт содержит бенчмарки

person BillyBigPotatoes    schedule 09.10.2013
comment
Спасибо, я не знал об этом, но я боюсь, что он написан и для плавающей точки. - person Werdok; 10.10.2013

Я работал над автоматизированным инструментом, который преобразует код C с плавающей запятой в код с фиксированной запятой, с различными вариантами компромисса между точностью и временем выполнения. У меня были хорошие результаты с рядом алгоритмов, включая дискретное косинусное преобразование 2D 8x8. Моя целевая платформа обычно представляет собой процессор ARM Cortex-M, но аналогичные результаты должны быть достигнуты и на других платформах. Не могли бы вы позволить мне попробовать ваше БПФ?

person Community    schedule 09.10.2013
comment
Да, это было бы здорово, только не будет ли проблемой тот факт, что я работаю на Common Lisp? Я мог бы переписать его на C, если нужно, но это заняло бы день или два. - person Werdok; 10.10.2013