A быстрое преобразование Фурье (БПФ ): алгоритм , который вычисляет дискретное преобразование Фурье (ДПФ) отслеживает или ее обратное (IDFT). Анализ Фурье преобразует сигнал из его исходной области в представление в частотной области и наоборот. ДПФ получается разложением обеспечивать значения на компоненты с разными частотами. Эта операция полезна во многих областях, но вычисление ее непосредственно из определения часто медленно, чтобы быть практичным. БПФ быстро вычисляет такие преобразования путем преобразования фактори матрицы ДПФ в произведение разреженных (в основном нулевых) множителей. В результате ему удается уменьшить сложность вычислений ДПФ из , который возникает, если просто применить определение ДПФ к
, где
- размер данных. Разница в скорости может быть огромной, особенно для длинных наборов данных, где N может исчисляться тысячами или миллионами. При наличии ошибки округления многие алгоритмы БПФ намного точнее, чем прямая или косвенная оценка ДПФ. Существует множество различных алгоритмов БПФ, основанных на широком спектре опубликованных теорий, от простых арифметики комплексных чисел до теории групп и теории чисел.
Быстрые преобразования Фурье широко распространены. используется для приложений в инженерии, музыке, науке и математике. Основные идеи были популяризированы в 1965 году, но некоторые алгоритмы получены еще в 1805 году. В 1994 году Гилберт Стренг описал БПФ как «самый важный числовой алгоритм нашей жизни»., и он был включен в 10 лучших алгоритмов 20-го века журналом IEEE Вычислительная техника в науке и технике.
Самые известные алгоритмы БПФ зависят от факторизации из N, но есть БПФ с O (N log N) сложностью для всех N, даже для простого Н. Многие алгоритмы БПФ зависят только от того факта, что является корнем N-го примитива единиц, и, таким образом, аналогичным преобразованием любого конечным полем, таким как теоретико-числовые преобразования. Обратное ДПФ такое же, как ДПФ, но с противоположным знаком в экспоненте и коэффициентом 1 / N, любой алгоритм БПФ может быть легко адаптирован для него.
Развитие быстрых алгоритмов для ДПФ можно проследить от Карла Фридриха Неопубликованная работа Гаусса в 1805 году, когда он нуждался в ней для интерполяции орбиты астероидов Паллас и Юнона по выборочным наблюдениям. Его метод был очень похож на метод, опубликованный в 1965 году Джеймсом Кули и Джоном Тьюки, которым обычно приписывают новое современное универсальное алгоритма БПФ. Хотя работа Гаусса предшествовала даже результатам Жозефа Фурье в 1822 году, он не проанализировал время вычислений и в конечном итоге использовал другие методы для достижения своей цели.
Между 1805 и 1965 годами некоторые версии БПФ были опубликованы другими авторами. Фрэнк Йейтс в 1932 году опубликовал свою версию, названную алгоритмом взаимодействия, которая обеспечла эффективное вычисление преобразований Адамара и Уолша. Алгоритм Йейтса до сих пор используется в области статистического дизайна и анализа экспериментов. В 1942 г. Г. К. Дэниэлсон и Корнелиус Ланцош опубликовал свою версию вычислений ДПФ для рентгеновской кристаллографии, области, в которой вычисление преобразований Фурье представляет собой серьезное узкое место. В то время как многие методы в прошлом были сосредоточены на уменьшении постоянного множителя для вычислений с использованием преимуществ " симметрии », Дэниэлсон и Ланцош поняли, что можно использовать« периодичность »и применить« трюк с удвоением », чтобы получить
время выполнения.
Джеймс Кули и Джон Тьюки опубликовали более общую версию БПФ в 1965 году, которая применима, когда N составным, а не обязательно степенью 2. Тьюки придумал идею во время встречи Научно-консультативного комитета президента Кеннеди, где обсуждалась тема обнаружения ядерных испытаний данных Советским Союзом путем установки датчиков, окружающих страну извне, для анализа выходных этих датчиков потреб алгоритма БПФ Ричард Гарвин признал общую применимость алгоритма не только к проблемам национальной безопасности, но и к широкому кругу проблем, включая одну, представляющую для непосредственный интерес, определение периодичности ориентации спинов. в трехмерном кристалле гелия-3. Гарвин передал идею Тьюки Кули (оба работали в лаборатории IBM Watson ) для реализации. Кули и Тьюки опубликовали статью относительно короткого срока - шесть месяцев. Одним из алгоритмов цифровой обработки сигналов является алгоритм, который был подвергнут сомнению, и алгоритм стал общественным достоянием, в результате компьютерной революции следующего десятилетия.
Пусть x 0,…, x N - 1 будет комплексными числами. ДПФ определяется формулой
где - примитив корень N-й степени из 1.
Непосредственная оценка этого определения требует : операций имеется N выходов X k, и каждый выход требует суммы N условий. БПФ - это любой метод вычисления одних и тех же результатов в операциях
. Все известные алгоритмы БПФ требуют операций Θ
, хотя нет никаких доказательств того, что более низкая оценка сложности невозможна.
Чтобы проиллюстрировать экономию БПФ, рассмотрим подсчет сложных умножений и сложений для N = 4096 точек данных. Оценка сумм ДПФ напрямую включает N комплексных умножений и N (N - 1) сложных сложений, из которых операций можно сэкономить, исключив тривиальные операции, например, умножение на 1, в результате чего остается около 30 миллионов. С другой стороны, алгоритм Radix-2 Кули - Тьюки для N в степени 2 может вычислить тот же результат только с (N / 2) log 2 (N) комплексное умножение (же без учета упрощений умножения на 1 и т.п.) и N log 2 (N) сложных сложений, всего около 30 000 операций - в тысячу раз меньше, чем при прямом вычислении. На практике на фактическую производительность современных компьютеров обычно влияют факторы, отличные от скорости арифметических операций, анализ является сложным (например, см. Frigo Johnson, 2005), но общее улучшение от
до
остается.
Безусловно, наиболее часто используемым БПФ является алгоритм Кули-Тьюки. Этот алгоритм разделяй и властвуй, который рекурсивно разбивает ДПФ любого составного размера N = N 1N2на множество меньших ДПФ размером N 1 и N 2, наряду с умножениями O (N) на комплексные корни из единицы, традиционно называемые множителями тиддла (после Gentleman and Sande, 1966).
Этот метод (и общая идея БПФ) был популяризирован публикацией Кули и Тьюки в 1965 году, но позже было обнаружено, что эти два автора независимо друг от друга заново изобрелированный, известный Карл Фридрих Гаусс около 1805 г. (переоткрытый несколько раз в ограниченных формах).
Наиболее известное использование алгоритма Кули-Тьюки - разделение преобразования на две части размером N / 2 на каждом шаге, и поэтому оно ограничено величиной степени двойки, но любая факторизация может использоваться в целом (как известно и Гауссу, и Кули / Тьюки). Они называются случаями с основанием 2 и смешанным основанием, соответственно (и другие варианты, такие как БПФ с разделенным основанием, также имеют свои собственные ресурсы). Хотя основная идея является рекурсивной, большинство реализаций изменяют алгоритм, чтобы избежать явной рекурсии. Кроме того, как алгоритм Кули - Тьюки разбивает ДПФ на более мелкие ДПФ, его можно произвольно комбинировать с любым другим алгоритмом ДПФ, например описанным ниже.
Существуют алгоритмы БПФ, отличные от Кули - Тьюки. Корнелиус Ланцош провел новаторскую работу по БПФ и БПФ (метод) с Г. К. Дэниэлсон (1940).
Для N = N 1N2с coprime N1и N 2 можно использовать prime- Фактор (алгоритм Гуда - Томаса) (PFA), основанный на китайской теореме об остатках, для факторизации ДПФ аналогично алгоритму Кули - Тьюки, но без факторов твидла. Алгоритм Рейдера - Бреннера (1976) представляет факторизацию, подобную Кули - Тьюки, но с чисто мнимыми вращающимися множителями, сокращающими умножения за счет увеличения числа сложений и уменьшения числовой стабильности ; Позже его заменил вариант Кули-Тьюки с разделением по основанию (который обеспечивает такое же количество умножений, но с меньшим количеством умножений и без точности потерь). Алгоритмы, рекурсивно разлагающие ДПФ на более мелкие операции, отличные от ДПФ, включая Бруун и алгоритмы. (Алгоритмы Рейдера - Бреннера и QFT были предложены для размеров степени двойки, но не исключено, что они могут быть адаптированы для общих составных размеров, алгоритм Н. Брууна применим к произвольным четным составным размерам.) Алгоритм Брууна, в пример, основан на интерпретации БПФ как рекурсивной факторизации многочлена z - 1, здесь в полиномы с действительными коэффициентами вида z - 1 и z + az + 1.
Другая полиномиальная точка используется алгоритмом БПФ Винограда, который разлагает z - 1 на циклотомические многочлены - они часто имеют коэффициенты 1, 0 или -1, и поэтому требуют небольшого (если есть) умножения, поэтому Виноград может получить для получения БПФ с минимальным умножением и часто используется для поиска эффективных алгоритмов для малых факторов. Действительно, Виноград показал, что ДПФ может быть вычислено с помощью O (N) иррациональных умножений, что привело к доказанной достижимой нижней границе числа умножений для размеров двойки; К сожалению, это происходит за счет гораздо большего количества дополнений, компромисс более не выгоден для современных процессоров с аппаратными умножителями. В частности, Виноград также использует PFA, а также алгоритм Rader для БПФ простых размеров.
Алгоритм Рейдера, использующий существование генератора для мультипликативной группы по модулю простого N, выражает ДПФ простого размера N как циклическую свертку (составного) размера N-1, который может быть вычислен парой обычных БПФ с помощью теоремы свертки (хотя Виноград использует другие методы свертки). Другое БПФ простого размера принадлежит Л. И. Блюстейну и иногда называется алгоритмом chirp-z ; он также повторно выражает ДПФ как свертку, но на этот раз того же размера (который может быть дополнен нулями до степени двойки и оценен, например, с помощью БПФ Кули - Тьюки с основанием 2), посредством тождества
Гексагональное быстрое преобразование Фурье направлено на вычисление эффективного БПФ для данных с гексагональной выборкой с использованием новой схемы адресации для гексагональной сетки, называемой адресацией набора массивов (ASA).
Во многих приложениях входные данные для ДПФ являются чисто реальными, и в случае выходных данных удовлетворяют симмет
и эффективные алгоритмы БПФ были разработаны для этой ситуации (см., например, Sorensen, 1987). Один из подходов в использовании обычного алгоритма (например, Кули - Тьюки) и удалении избыточных частей вычислений, что позволяет примерно в два раза экономить время и память. В качестве альтернативы можно выразить ДПФ с вещественным входом четной длины как комплексное ДПФ половинной длины (действующей и мнимой части которого являются четкие / нечетные элементы исходных реальных данных), за которым следует O (N) пост- технологические операции.
Когда-то считалось, что ДПФ с реальным вводом можно более эффективно вычислять с помощью дискретного преобразования Хартли (DHT), но использовалось, что специализированный алгоритм ДПФ с реальным вводом (БПФ) обычно требует меньшего количества операций, чем соответствующий алгоритм DHT (БПФ) для того же количества входов. Алгоритм Брууна (см. Выше) - еще один метод, который изначально предлагался для использования реальных входных данных, но он не оказался популярным.
Существуют дополнительные спецификации БПФ для реальных данных, которые имеют симметрию чет / нечет, и в этом случае можно получить еще один коэффициент, примерно равный двум, по времени и памяти, и ДПФ становится дискретное косинусное / синусоидальное преобразование (DCT / DST ). Вместо того, чтобы напрямую использовать алгоритм БПФ для этих случаев, DCT / DST также можно вычислить с помощью БПФ реальных данных в сочетании с O (N) предварительной и постобработкой.
![]() | Нерешенная проблема в информатике :. Какова нижняя граница сложности алгоритмов быстрого преобразования Фурье? Могут ли они быть быстрее, чем |
Фундаментальный вопрос, давно представляющий теоретический интерес, - доказать нижние границы сложности и точно количество операций быстрого преобразования Фурье, многие нерешенные проблемы остаются. Строго не доказано, действительно ли для ДПФ требуется Ω (N log N) (т. Е. Порядок N log N или больше), даже операций для простого случая степени двух размеров, хотя нет алгоритмов с меньшей сложностью. известны. В частности, в центре внимания таких вопросов, как обычно находится подсчет арифметических операций, хотя фактическая производительность на современных компьютерах, таких как кэш или обычно оптимизация конвейера процессора.
Согласно работе Шмуэля Винограда (1978), точная нижняя граница Θ (N) известна для количества действительных умножений, требуемых БПФ. Можно показать, что только иррациональные действительные умножения необходимы для вычисления ДПФ длины двойки
. Более того, известны явные подсчета, позволяющие достичь этого (Heideman Burrus, 1986; Duhamel, 1990). Однако эти алгоритмы требуют слишком большого количества дополнений, чтобы быть практичными, по крайней мере, на крайней мере современных компьютеров с аппаратными умножителями (Дюамель, 1990; Frigo Johnson, 2005).
Точная нижняя граница не известна из количества требуемых дополнений, хотя нижние оценки были доказаны при некоторых ограничительных предположениях относительно алгоритмов. В 1973 году Моргенштерн доказал свою границу Ω (N log N) на счетчик сложения для алгоритмов, в которых мультипликативные константы имеют ограниченные значения (что верно для всех алгоритмов БПФ). Этот результат, однако, используется масштабирование унитарной матрицы с коэффициентом ), и действительно не объяснять, почему матрицу Фурье труднее вычислить, чем любую другую унитарную матрицу (включая единичную матрицу) при таком же масштабировании. Пан (1986) доказал нижнюю границу Ω (N log N), предполагая оценку «асинхронности» алгоритма БПФ, но общность предположения неясна. В случае степени двойки N Пападимитриу (1979) утверждал, что число
сложения комплексных чисел, достигаемого алгоритмами Кули-Тьюки, является оптимальным при определенных предположениях о графе алгоритма (его предположения подразумевают, среди прочего, что никакие аддитивные тождества в корнях единицы не используются). (Этот аргумент будет означать, что требуется не менее
реальных добавлений, хотя это не является жесткой границей, поскольку дополнительные добавления требуются как часть умножения комплексных чисел.) До сих пор ни один опубликованный алгоритм БПФ не достиг менее
complex- сложение чисел (или их эквивалент) для степени двойки N.
Третья проблема - минимизировать общее количество действительных умножений и сложений, иногда называемое «арифметической сложностью» (хотя в данном контексте это точное количество, а не рассматриваемая асимптотическая сложность). Опять же, точная нижняя граница не доказана. Однако с 1968 года самый низкий опубликованный счет для степени двойки N долгое время достигался с помощью алгоритма БПФ с разделением оснований, который требует вещественное умножение и сложение для N>1. Это было недавно уменьшено до
(Джонсон и Фриго, 2007; Ланди, Ван Бускерк, 2007). Несколько большее количество (но все же лучше, чем разделенное основание для N ≥ 256) оказалось доказуемо оптимальным для N ≤ 512 при дополнительных ограничениях на возможные алгоритмы (потоковые графы, подобные разделенному основанию с единичным модулем мультипликативных коэффициентов), путем сокращения к выполнимости по модулю теорий проблема, решаемая с помощью грубой силы (Haynal Haynal, 2011).
Большинство попыток снизить или доказать сложность алгоритмов БПФ имеют сосредоточен на обычном случае сложных данных, потому что он самый простой. Однако БПФ со сложными данными настолько тесно связаны с алгоритмами для решения связанных проблем, таких как БПФ реальных данных, дискретное косинусноепреобразование, дискретное преобразование Хартли и т. Д., Что любое улучшение один из них, приведет к улучшению других (Дюамель и Веттерли, 1990).
Все указанные выше алгоритмы БПФ точно вычисляют ДПФ (т. Е. Пренебрегая плавающей точки ошибок). Однако было предложено несколько алгоритмов «БПФ», которые вычисляют ДПФ с ошибкой, которая может быть сделана сколь угодно малой за счет увеличения объема вычислений. Такие алгоритмы обменивают ошибку аппроксимации на увеличенную скорость или другие свойства. Например, приближенный алгоритм БПФ Эдельмана и др. (1999) использует более низких требований к связи для параллельных вычислений с помощью быстрого многополюсного метода. Приближенное БПФ на основе вейвлета, разработанное Гуо и Буррусом (1996), учитывает разреженные входы / выход локы (временная / частотная установка) более эффективно, чем это возможно при точном БПФ. Другой алгоритм для приближенного вычисления подмножества выходных данных ДПФ Шентову и др. (1995). Алгоритм Эдельмана одинаково хорошо работает как с разреженными, так и с неразреженными данными, поскольку он основан на сжимаемости (дефицит ранга) самой матрицы Фурье, а не на сжимаемости (разреженности) данных. И наоборот, если данные разрежены, то есть если только K из N коэффициентов Фурье отличны от нуля, то сложность может быть уменьшена до O (K log (N) log (N / K)), и это было сделано для получения к практическому ускорению по сравнению с обычным БПФ для N / K>32 в примере с большим N (N = 2) с использованием вероятного приближенного алгоритма (который дает наибольшие коэффициенты K с точностью до нескольких после запятой).
Алгоритмы БПФ ошибки при использовании арифметики с плавающей запятой конечной точности, но эти ошибки обычно довольно малы; алгоритмов БПФ, например Кули - Тьюки, имеют превосходные большинство числовых свойств как следствие структуры попарного суммирования алгоритмов. Верхняя граница относительной ошибки для алгоритма Кули - Тьюки составляет O (ε log N) по сравнению с O (εN) для формулы ДПФ, где ε - машинная относительная точность с плавающей запятой. Фактически, среднеквадратичные ошибки (rms) намного лучше этих верхних границ, составляющих только O (ε √log N) для Кули - Тьюки и O (ε √N) для наивного ДПФ (Шацман, 1996). Эти, однако, очень чувствительны к точности показателей вращения, результаты используются в БПФ (т. Е. Значения тригонометрической функции ), и нередко неосторожные реализации БПФ имеют гораздо худшую точность, например, если они используют неточные формулы тригонометрического повторения. Некоторые БПФ, отличные от Кули - Тьюки, такие как алгоритм Рейдера - Бреннера, по своей сути менее стабильны.
В арифметике с фиксированной точкой ошибки конечной точности, накопленные алгоритмы БПФ, хуже, среднеквадратичные ошибки растут как O (√N) для алгоритма Кули-Тьюки (Welch, 1969). Достижение этой точности требует особого внимания к масштабированию, чтобы минимизировать потерю точности, алгоритмы БПФ с фиксированной точкой включают изменение масштаба на каждом промежуточном этапе декомпозиции, например, Кули - Тьюки.
Для проверки правильности реализации БПФ строгие гарантии могут быть получены за время O (N log N) с помощью простой процедуры проверки линейности, импульсной характеристики и свойств сдвига во времени преобразования на случайном входные данные (Ergün, 1995).
Как определено в статье многомерное ДПФ, многомерное ДПФ
преобразует массив x nс d-мерным вектор индексов набором из d вложенных суммирований (более
для каждого j), где деление n/N, определенное как
, выполнено поэлементно. Эквивалентно, это композиция из наборов одномерных ДПФ, выполняемых по одному измерению за раз (в любом порядке).
Эта композиционная точка зрения применяется простейший и наиболее распространенный алгоритм многомерного ДПФ, известный как алгоритм строка-столбец (после двумерного случая, приведенного ниже). То есть просто выполняется последовательность из d одномерных БПФ (любым из вышеперечисленных алгоритмов): сначала вы преобразовываете по измерению n 1, затем по измерению n 2 и так далее (или вообще любой заказ работает). Легко показать, что этот метод имеет обычную сложность O (N log N), где - общее количество преобразованных точек данных. В частности, имеется N / N 1 преобразований размера N 1 и т.д., поэтому сложность следовать БПФ составляет:
В двух измерениях x kможно рассматривать как матрица, и этот алгоритм соответствует выполнению БПФ всех строк (соответственно столбцов), группируя полученные преобразованные строки (соответственно столбцы) вместе как другие
матрица, а затем выполнение БПФ для каждого из столбцов (соответственно строк) второй этой матрицы, и аналогичным образом матрицаем результаты в итоговую матрицу результатов.
В более чем двух измеренийх для кэша локальности часто бывает выгодно группировать измерения рекурсивно. Например, трехмерное БПФ может сначала выполнить двумерное БПФ каждого планарного «среза» для каждого фиксированного n175>1, а затем выполнить одномерное БПФ вдоль n 1 направления. В более общем смысле, асимптотически другим алгоритм без учета кеширования состоит из рекурсивного деления измерений на две группы и
, которые рекурсивно преобразуются (округление, если d не четно) (см. Frigo and Johnson, 2005). Тем не менее, это остается простой вариацией алгоритма строка-столбец, которая в итоге требует только одного алгоритма БПФ в качестве базового случая и по-прежнему имеет сложность O (N log N). Еще одна разновидность в том, чтобы использовать преобразования матрицы между новыми методами измерения, чтобы работать с непрерывными данными; это особенно важно для ситуации вне ядра и распределенной памяти, когда доступ к несмежным данным занимает очень много времени.
Существуют другие многомерные алгоритмы БПФ, отличные от алгоритма строка-столбец, хотя все они сложность O (N log N). Возможно, самым основным БПФ без столбца и безусловного алгоритма алгоритм вектор-основание БПФ, который является обобщением обычного алгоритма Кули-Тьюки, в котором размерности преобразования делятся на вектор корней на каждый шагу. (Это также может иметь преимущества кеширования.) В простейшем случае вектор-основание системы счисления равны (например, вектор-основание-основание-2 делит все измерения на два), но это не обязательно. Векторное основание системы счисления только с одним основанием системы счисления, отличным от единицы, т.е.
, по сути, является алгоритмом строка-столбец. Другие, более сложные методы включают в себя алгоритмы полиномиального преобразования, разработанные Нуссбаумером (1977), которые рассматривают преобразование в терминах сверток и полиномиальных произведений. См. Duhamel и Vetterli (1990) для получения дополнительной информации и ссылок.
Обобщение O (Nlog N) до сферических гармоник на сфере S с N узлами было описано Моленкампом вместе с предполагаемым алгоритмом (но не доказано) имеет сложность O (N журнал (N)); Mohlenkamp также предоставляет возможности в библиотеке libftsh. Алгоритм сферической гармоники со сложностью O (Nlog N) описан Рохлиным и Тигертом.
Алгоритм быстрого сворачивания аналогичен БПФ, за исключением того, что он работает с последовательностью разбиения на интервалы. формы волны, а не ряд реальных или комплексных скалярных значений. Вращение (которое в БПФ - это умножение на комплексный вектор) - это круговой сдвиг формы сигнала компонента.
Различные группы также опубликовали алгоритмы «БПФ» для неравномерно распределенных данных, как описано в Potts et al. (2001). Такие алгоритмы не вычисляют строго ДПФ (которое определено только для данных с равными интервалами), а скорее некоторую его аппроксимацию (неравномерное вычисление Фурье , или ДПФ, которое часто вычисляется только вычисляется). В более общем плане существуют другие методы спектральной оценки.
БПФ используется в цифровой записи, дискретизации, аддитивном синтезе и коррекции высоты тона программы обеспечение.
Важность БПФ проистекает из факта, что он сделал работу в частотной области в равной степени вычислительно выполнимой как во временной или пространственной области. Некоторые из важных приложений БПФ включают:
Язык | Команда / метод | Предварительные требования |
---|---|---|
R | stats :: fft (x) | Нет |
Octave / MATLAB | fft (x) | Нет |
Python | fft.fft (x) | numpy |
Mathematica | Фурье [x] | Нет |
Джулия | fft (A [, dims]) | FFTW |
связанные с БПФ алгоритмы:
Реализации БПФ:
Другие ссылки:
| journal =
()