WikiDer > Быстрое преобразование Фурье
А быстрое преобразование Фурье (БПФ) является алгоритм который вычисляет дискретное преобразование Фурье (ДПФ) последовательности или ее обратной (IDFT). Анализ Фурье преобразует сигнал из исходного домена (часто во времени или пространстве) в представление в частотная область наоборот. ДПФ получается разложением последовательность значений на составляющие разных частот.[1] Эта операция полезна во многих областях, но вычисление ее непосредственно из определения часто слишком медленно, чтобы быть практичным. БПФ быстро вычисляет такие преобразования с помощью факторизация то Матрица ДПФ в продукт редкий (в основном нулевые) факторы.[2] В результате удается снизить сложность вычисления ДПФ из , который возникает, если просто применить определение ДПФ к , куда это размер данных. Разница в скорости может быть огромной, особенно для длинных наборов данных, в которых N может быть в тысячах или миллионах. В присутствии ошибка округления, многие алгоритмы БПФ намного точнее, чем прямая или косвенная оценка определения ДПФ. Существует множество различных алгоритмов БПФ, основанных на широком спектре опубликованных теорий, от простых до простых. арифметика комплексных чисел к теория групп и теория чисел.
Быстрые преобразования Фурье широко используются для Приложения в области инженерии, музыки, естественных наук и математики. Основные идеи были популяризированы в 1965 году, но некоторые алгоритмы были получены еще в 1805 году.[1] В 1994 г. Гилберт Стрэнг описал БПФ как «самый важный численный алгоритм нашей жизни »,[3][4] и он был включен в 10 лучших алгоритмов 20-го века IEEE журнал Вычислительная техника в науке и технике.[5]
Наиболее известные алгоритмы БПФ зависят от факторизация из N, но есть БПФ с O (N бревноN) сложность для всех N, даже для основной N. Многие алгоритмы БПФ зависят только от того, что является N-й первобытный корень единства, и, таким образом, может применяться к аналогичным преобразованиям над любым конечное поле, Такие как теоретико-числовые преобразования. Поскольку обратное ДПФ такое же, как ДПФ, но с противоположным знаком в экспоненте и 1 /N Фактор, любой алгоритм БПФ может быть легко адаптирован под него.
История
Развитие быстрых алгоритмов для ДПФ можно проследить до Карл Фридрих Гаусснеопубликованная работа 1805 года, когда ему понадобилось интерполировать орбиту астероидов. Паллада и Юнона из выборочных наблюдений.[6][7] Его метод был очень похож на метод, опубликованный в 1965 г. Джеймс Кули и Джон Тьюки, которым обычно приписывают изобретение современного универсального алгоритма БПФ. Хотя работа Гаусса предшествовала даже Жозеф ФурьеРезультаты 1822 года, он не анализировал время вычислений и в конечном итоге использовал другие методы для достижения своей цели.
Между 1805 и 1965 годами некоторые версии БПФ были опубликованы другими авторами. Фрэнк Йейтс в 1932 г. опубликовал свою версию под названием алгоритм взаимодействия, который предоставил эффективное вычисление преобразований Адамара и Уолша.[8] Алгоритм Йейтса до сих пор используется в области статистического дизайна и анализа экспериментов. В 1942 г. Дж. К. Дэниэлсон и Корнелиус Ланцош опубликовали свою версию для вычисления ДПФ для рентгеновская кристаллография, область, в которой вычисление преобразований Фурье представляет собой серьезное узкое место.[9][10] Хотя многие методы в прошлом были сосредоточены на уменьшении постоянного коэффициента для вычисление с использованием преимущества «симметрии», Дэниэлсон и Ланцош поняли, что можно использовать «периодичность» и применить «трюк удвоения», чтобы получить время выполнения.[11]
Джеймс Кули и Джон Тьюки опубликовали более общая версия БПФ в 1965 году, что применимо, когда N является составным и не обязательно является степенью двойки.[12] Тьюки пришла в голову идея во время встречи Президент КеннедиНаучно-консультативный комитет, где обсуждалась тема обнаружения ядерных испытаний Советским Союзом путем установки датчиков, которые окружают страну извне. Для анализа выходных данных этих датчиков потребуется алгоритм БПФ. В беседе с Тьюки Ричард Гарвин признал общую применимость алгоритма не только к проблемам национальной безопасности, но и к широкому кругу проблем, в том числе к одной, представляющей для него непосредственный интерес, - к определению периодичностей ориентации спинов в трехмерном кристалле гелия-3.[13] Гарвин передал идею Тьюки Кули (оба работали в Лаборатории IBM Watson) для реализации.[14] Кули и Тьюки опубликовали статью за относительно короткий срок - шесть месяцев.[15] Поскольку Тьюки не работал в IBM, патентоспособность идеи была подвергнута сомнению, и алгоритм стал общественным достоянием, что в результате компьютерной революции следующего десятилетия сделало БПФ одним из незаменимых алгоритмов в цифровой обработке сигналов.
Определение
Позволять Икс0, …, ИксN−1 быть сложные числа. В DFT определяется формулой
куда это примитивный Nкорень 1-го числа.
Для непосредственной оценки этого определения требуется операции: есть N выходы Иксk, и для каждого вывода требуется сумма N термины. БПФ - это любой метод вычисления тех же результатов в операции. Все известные алгоритмы БПФ требуют Θ операций, хотя нет никаких известных доказательств того, что более низкая оценка сложности невозможна.[16]
Чтобы проиллюстрировать экономию при использовании БПФ, рассмотрим количество сложных умножений и сложений для N = 4096 точек данных. Оценка сумм ДПФ напрямую включает N2 комплексные умножения и N(N - 1) сложные дополнения, из которых операций можно сэкономить, исключив тривиальные операции, такие как умножение на 1, в результате чего останется около 30 миллионов операций. С другой стороны, основание системы счисления-2 Алгоритм Кули-Тьюки, за N степень двойки может вычислить тот же результат с помощью только (N/ 2) журнал2(N) комплексные умножения (опять же, игнорируя упрощения умножений на 1 и тому подобное) и N бревно2(N) сложных дополнений, всего около 30 000 операций - в тысячу раз меньше, чем при прямой оценке. На практике на фактическую производительность современных компьютеров обычно влияют факторы, отличные от скорости арифметических операций, и анализ является сложной задачей (например, см. Frigo & Джонсон, 2005),[17] но общее улучшение от к останки.
Алгоритмы
Алгоритм Кули-Тьюки
Безусловно, наиболее часто используемым БПФ является алгоритм Кули – Тьюки. Это разделяй и властвуй алгоритм который рекурсивно ломает ДПФ любого составной размер N = N1N2 на множество меньших ДПФ размеров N1 и N2, вместе с O (N) умножения на комплексные корни единства традиционно называется факторы поворота (после Джентльмена и Санде, 1966 г.[18]).
Этот метод (и общая идея БПФ) был популяризирован публикацией Кули и Тьюки в 1965 г.[12] но позже это было обнаружено[1] что эти два автора независимо друг от друга заново изобрели алгоритм, известный Карл Фридрих Гаусс около 1805 г.[19] (и впоследствии переоткрывалась несколько раз в ограниченных формах).
Наиболее известное использование алгоритма Кули-Тьюки - разделение преобразования на две части размера N/ 2 на каждом шаге, и поэтому ограничен величиной степени двойки, но в целом можно использовать любую факторизацию (как было известно и Гауссу, и Кули / Тьюки[1]). Их называют основание системы счисления-2 и смешанная система счисления случаях соответственно (и другие варианты, такие как БПФ с разделенным основанием тоже есть свои имена). Хотя основная идея является рекурсивной, большинство традиционных реализаций изменяют алгоритм, чтобы избежать явной рекурсии. Кроме того, поскольку алгоритм Кули – Тьюки разбивает ДПФ на более мелкие ДПФ, его можно произвольно комбинировать с любым другим алгоритмом ДПФ, например, описанным ниже.
Другие алгоритмы БПФ
Есть алгоритмы БПФ, отличные от Кули – Тьюки. Корнелиус Ланцош проделал новаторскую работу по БПФ и БПФ (быстрая выборка Фурье метод) с Дж. К. Дэниэлсон (1940).[нужна цитата]
За N = N1N2 с совмещать N1 и N2, можно использовать главный фактор Алгоритм (Гуда – Томаса) (PFA), основанный на Китайская теорема об остатках, чтобы факторизовать ДПФ аналогично Кули – Тьюки, но без факторов твидла. Алгоритм Рейдера – Бреннера (1976)[20] представляет собой факторизацию Кули-Тьюки, но с чисто мнимыми множителями, сокращающими умножения за счет увеличения числа сложений и уменьшением числовая стабильность; позже он был заменен расщепленный основание вариант Кули-Тьюки (который обеспечивает такое же количество умножений, но с меньшим количеством сложений и без потери точности). Алгоритмы, рекурсивно разделяющие ДПФ на более мелкие операции, отличные от ДПФ, включают алгоритмы Брууна и QFT алгоритмы. (Рейдер – Бреннер[20] и QFT были предложены для размеров степени двойки, но не исключено, что они могут быть адаптированы для общих составных N. Алгоритм Брууна применим к произвольным четным составным размерам.) Алгоритм Брууна, в частности, основан на интерпретации БПФ как рекурсивной факторизации многочлен zN - 1, здесь на многочлены с действительными коэффициентами вида zM - 1 и z2M + azM + 1.
Другая полиномиальная точка зрения используется алгоритмом Винограда БПФ,[21][22] который факторизует zN - 1 в циклотомические многочлены- они часто имеют коэффициенты 1, 0 или -1 и поэтому требуют небольшого (если вообще есть) умножения, поэтому Виноград может использоваться для получения БПФ с минимальным умножением и часто используется для поиска эффективных алгоритмов для малых факторов. Действительно, Виноград показал, что ДПФ может быть вычислено только за O (N) иррациональные умножения, приводящие к доказанной достижимой нижней границе числа умножений для величин степени двойки; К сожалению, это происходит за счет гораздо большего количества дополнений, что больше не выгодно для современных процессоры с аппаратные умножители. В частности, Winograd также использует PFA, а также алгоритм Rader для БПФ основной размеры.
Алгоритм Рейдера, используя существование генератор для мультипликативного группа по простому модулю N, выражает ДПФ простого размера N как циклический свертка (составного) размера N - 1, который затем может быть вычислен парой обычных БПФ через теорема свертки (хотя Виноград использует другие методы свертки). Еще одно БПФ простого размера принадлежит Л. И. Блюстейну и иногда называется алгоритм chirp-z; он также повторно выражает ДПФ как свертку, но на этот раз одно и тоже размер (который может быть дополнен нулями до сила двух и оценивается с помощью БПФ Кули-Тьюки с основанием счисления 2, например) через тождество
Гексагональное быстрое преобразование Фурье нацелен на вычисление эффективного БПФ для данных с гексагональной выборкой с использованием новой схемы адресации для гексагональных сеток, называемой адресацией набора массивов (ASA).
Алгоритмы БПФ, специализированные для реальных или симметричных данных
Во многих приложениях входные данные для ДПФ являются чисто реальными, и в этом случае выходные данные удовлетворяют симметрии
и для этой ситуации были разработаны эффективные алгоритмы БПФ (см., например, Sorensen, 1987).[23][24] Один из подходов состоит в использовании обычного алгоритма (например, Кули-Тьюки) и удалении избыточных частей вычислений, что позволяет примерно в два раза экономить время и память. В качестве альтернативы можно выразить четное-длина ДПФ действительного входа как комплексное ДПФ половинной длины (действительная и мнимая части которого являются четными / нечетными элементами исходных реальных данных), за которым следует O (N) операции постобработки.
Когда-то считалось, что ДПФ с реальным вводом можно более эффективно вычислять с помощью дискретное преобразование Хартли (DHT), но впоследствии утверждалось, что обычно можно найти специализированный алгоритм ДПФ для реального ввода (БПФ), который требует меньше операций, чем соответствующий алгоритм DHT (БПФ) для того же количества входов.[23] Алгоритм Брууна (см. Выше) - это еще один метод, который изначально был предложен для использования реальных входных данных, но он не оказался популярным.
Существуют и другие специализации БПФ для случаев реальных данных, которые даже странно симметрии, и в этом случае можно получить еще один коэффициент примерно в два раза по времени и памяти, и ДПФ становится дискретный косинус/синусоидальное преобразование (ы) (DCT/Летнее время). Вместо того, чтобы напрямую изменять алгоритм БПФ для этих случаев, DCT / DST также можно вычислить с помощью БПФ реальных данных в сочетании с O (N) пре- и постобработка.
Вычислительные проблемы
Границы сложности и количества операций
Нерешенная проблема в информатике: Какова нижняя граница сложности алгоритмов быстрого преобразования Фурье? Могут ли они быть быстрее, чем ? (больше нерешенных проблем в информатике) |
Фундаментальный вопрос, давно представляющий теоретический интерес, - это доказательство нижних оценок на сложность и точное количество операций быстрого преобразования Фурье, и многие нерешенные проблемы остаются. Строго не доказано, действительно ли ДПФ требуют Ω (N бревноN) (т. е. порядок N бревноN или выше) операций, даже для простого случая сила двух размеры, хотя не известны алгоритмы меньшей сложности. В частности, в центре внимания таких вопросов обычно находится подсчет арифметических операций, хотя фактическая производительность на современных компьютерах определяется многими другими факторами, такими как тайник или же Конвейер процессора оптимизация.
После работы Шмуэль Виноград (1978),[21] плотный Θ (N) нижняя граница известна для числа действительных умножений, требуемых БПФ. Можно показать, что только иррациональные действительные умножения требуются для вычисления ДПФ длины степени двойки . Более того, известны явные алгоритмы, позволяющие достичь этого подсчета (Heideman & Буррус, 1986;[25] Дюамель, 1990[26]). Однако эти алгоритмы требуют слишком большого количества дополнений, чтобы быть практичными, по крайней мере, на современных компьютерах с аппаратными умножителями (Duhamel, 1990;[26] Фриго и Джонсон, 2005).[17]
Точная нижняя граница количества требуемых дополнений неизвестна, хотя нижние оценки были доказаны при некоторых ограничительных предположениях относительно алгоритмов. В 1973 году Моргенштерн[27] доказал, что Ω (N бревноN) нижняя граница количества сложения для алгоритмов, в которых мультипликативные константы имеют ограниченные величины (что верно для большинства, но не для всех алгоритмов БПФ). Этот результат, однако, применим только к ненормализованному преобразованию Фурье (которое является масштабированием унитарной матрицы с коэффициентом ), и не объясняет, почему матрицу Фурье труднее вычислить, чем любую другую унитарную матрицу (включая единичную матрицу) при таком же масштабировании. Сковорода (1986)[28] доказал, что Ω (N бревноN) нижняя граница, предполагающая оценку меры «асинхронности» алгоритма БПФ, но общность этого предположения неясна. В случае силы двойки N, Пападимитриу (1979)[29] утверждал, что число сложения комплексных чисел, достигаемого алгоритмами Кули – Тьюки, равно оптимальный при определенных предположениях о график алгоритма (его предположения подразумевают, среди прочего, что никакие аддитивные тождества в корнях единицы не используются). (Этот аргумент подразумевает, что по крайней мере требуются реальные добавления, хотя это не является жесткой границей, потому что дополнительные добавления требуются как часть умножения комплексных чисел.) До сих пор ни один опубликованный алгоритм БПФ не достиг менее чем сложение комплексных чисел (или их эквивалент) для степени двойкиN.
Третья проблема - минимизировать общий количество действительных умножений и сложений, иногда называемое «арифметической сложностью» (хотя в данном контексте рассматривается точное количество, а не асимптотическая сложность). Опять же, точная нижняя граница не доказана. Однако с 1968 года самый низкий опубликованный показатель степени двойки. N был давно достигнут алгоритм БПФ с разделенным основанием, что требует реальные умножения и сложения для N > 1. Недавно это было сокращено до (Джонсон и Фриго, 2007;[16] Ланди и Ван Бускерк, 2007[30]). Немного большее количество (но все же лучше, чем разделенное основание для N ≥ 256) оказался доказуемо оптимальным для N ≤ 512 при дополнительных ограничениях на возможные алгоритмы (потоковые графы с разделенным основанием и мультипликативными множителями единичного модуля) путем сведения к выполнимость по модулю теорий проблема решаемая грубая сила (Хайнал и Хайнал, 2011).[31]
Большинство попыток снизить или доказать сложность алгоритмов БПФ были сосредоточены на обычном случае сложных данных, потому что он самый простой. Однако БПФ со сложными данными так тесно связаны с алгоритмами для решения связанных проблем, таких как БПФ с реальными данными, дискретные косинусные преобразования, дискретные преобразования Хартлии так далее, что любое улучшение в одном из них немедленно приведет к улучшениям в других (Duhamel & Vetterli, 1990).[32]
Приближения
Все описанные выше алгоритмы БПФ точно вычисляют ДПФ (т. Е. Пренебрегая плавающая точка ошибки). Однако было предложено несколько алгоритмов «БПФ», которые вычисляют ДПФ. примерно, с ошибкой, которую можно сделать сколь угодно малой за счет увеличения объема вычислений. Такие алгоритмы обменивают ошибку аппроксимации на увеличенную скорость или другие свойства. Например, приближенный алгоритм БПФ Эдельмана и др. (1999)[33] достигает более низких требований к коммуникации для параллельные вычисления с помощью быстрый мультипольный метод. А вейвлетприблизительное БПФ на основе Го и Бурруса (1996)[34] учитывает разреженные входы / выходы (временная / частотная локализация) более эффективно, чем это возможно при точном БПФ. Другой алгоритм для приближенного вычисления подмножества выходных сигналов ДПФ принадлежит Шентову и др. (1995).[35] Алгоритм Эдельмана одинаково хорошо работает как с разреженными, так и с неразреженными данными, поскольку он основан на сжимаемости (дефицит ранга) самой матрицы Фурье, а не на сжимаемости (разреженности) данных. И наоборот, если данные немногочисленны, то есть если только K снаружи N Коэффициенты Фурье отличны от нуля - тогда сложность может быть уменьшена до O (K бревно(N) бревно(N/K)), и было продемонстрировано, что это приводит к практическому ускорению по сравнению с обычным БПФ для N/K > 32 в большом-N пример (N = 222) с использованием вероятностного приближенного алгоритма (который оценивает наибольшую K коэффициенты до нескольких десятичных знаков).[36]
Точность
В алгоритмах БПФ есть ошибки, когда используется арифметика с плавающей запятой конечной точности, но эти ошибки обычно довольно малы; большинство алгоритмов БПФ, например Кули – Тьюки, обладают превосходными числовыми свойствами благодаря попарное суммирование структура алгоритмов. Верхняя граница относительная ошибка для алгоритма Кули – Тьюки O (ε бревно N) по сравнению с O (εN3/2) для наивной формулы ДПФ,[18] где ε - машинная относительная точность с плавающей запятой. Фактически, среднеквадратичное значение (среднеквадратичные) ошибки намного лучше этих верхних оценок, составляя всего O (ε √бревно N) для Кули – Тьюки и O (ε √N) для наивного ДПФ (Schatzman, 1996).[37] Эти результаты, однако, очень чувствительны к точности коэффициентов вращения, используемых в БПФ (т. Е. тригонометрическая функция значения), и нередко неосторожные реализации БПФ имеют гораздо худшую точность, например если они используют неточные тригонометрическое повторение формулы. Некоторые БПФ, отличные от Кули – Тьюки, такие как алгоритм Рейдера – Бреннера, по своей сути менее стабильны.
В арифметика с фиксированной точкой, ошибки конечной точности, накопленные алгоритмами БПФ, хуже, среднеквадратичные ошибки растут как O (√N) для алгоритма Кули – Тьюки (Welch, 1969).[38] Достижение этой точности требует особого внимания к масштабированию, чтобы минимизировать потерю точности, а алгоритмы БПФ с фиксированной точкой включают изменение масштаба на каждом промежуточном этапе разложения, например, Кули – Тьюки.
Чтобы проверить правильность реализации БПФ, можно получить строгие гарантии за O (N бревноN) времени с помощью простой процедуры проверки линейности, импульсной характеристики и свойств сдвига во времени преобразования на случайных входах (Ergün, 1995).[39]
Многомерные БПФ
Как определено в многомерное ДПФ статья, многомерное ДПФ
преобразует массив Иксп с d-размерный вектор индексов набором d вложенные суммирования (более для каждого j), где деление п/N, определяется как , выполняется поэлементно. Эквивалентно, это композиция последовательности d наборы одномерных ДПФ, выполняемых по одному измерению за раз (в любом порядке).
Эта композиционная точка зрения сразу обеспечивает простейший и наиболее распространенный алгоритм многомерного ДПФ, известный как строка столбец алгоритм (после двумерного случая ниже). То есть просто выполняется последовательность d одномерные БПФ (по любому из вышеперечисленных алгоритмов): сначала вы преобразуете п1 измерение, затем по п2 размер и так далее (или вообще любой заказ работает). Легко показать, что этот метод имеет обычный O (N бревноN) сложность, где - общее количество преобразованных точек данных. В частности, есть N/N1 трансформирует размер N1и так далее, поэтому сложность последовательности БПФ составляет:
В двух измерениях Иксk можно рассматривать как матрица, и этот алгоритм соответствует первому выполнению БПФ всех строк (соответственно столбцов), группируя полученные преобразованные строки (соответственно столбцы) вместе как другие матрица, а затем выполнение БПФ для каждого из столбцов (соответственно строк) этой второй матрицы и аналогичным образом группирование результатов в матрицу окончательных результатов.
В более чем двух измерениях часто бывает выгодно тайник locality для рекурсивной группировки измерений. Например, трехмерное БПФ может сначала выполнить двумерное БПФ каждого планарного «среза» для каждого фиксированного п1, а затем выполнить одномерное БПФ по п1 направление. В более общем плане асимптотически оптимальный не обращающий внимания на тайник алгоритм состоит из рекурсивного разделения измерений на две группы и которые рекурсивно преобразуются (округление, если d не даже) (см. Frigo and Johnson, 2005).[17] Тем не менее, это остается простой вариацией алгоритма строка-столбец, которая в конечном итоге требует только одномерного алгоритма БПФ в качестве базового случая и все еще имеет O (N бревноN) сложность. Еще один вариант - выполнить матрицу транспозиции между преобразованием последующих измерений, так что преобразования работают с непрерывными данными; это особенно важно для вне ядра и распределенная память ситуации, когда доступ к несмежным данным занимает очень много времени.
Существуют и другие многомерные алгоритмы БПФ, отличные от алгоритма строка-столбец, хотя все они имеют O (N бревноN) сложность. Возможно, самым простым БПФ без столбца-строки является векторный алгоритм БПФ, который является обобщением обычного алгоритма Кули – Тьюки, в котором размерность преобразования делится на вектор корней на каждом шагу. (Это также может иметь преимущества кеширования.) Простейший случай векторной системы счисления - это когда все корни равны (например, vector-radix-2 делит все размеров на два), но это не обязательно. Векторный основание системы счисления только с одним неединичным основанием за раз, т.е. , по сути, является алгоритмом строка-столбец. Другие, более сложные методы включают алгоритмы полиномиального преобразования из Nussbaumer (1977),[40] которые рассматривают преобразование в терминах сверток и полиномиальных произведений. См. Duhamel и Vetterli (1990).[32] для получения дополнительной информации и ссылок.
Другие обобщения
О (N5/2бревноN) обобщение на сферические гармоники на сфере S2 с N2 узлы были описаны Mohlenkamp,[41] вместе с алгоритмом, предположительно (но не доказанным), что O (N2 бревно2(N)) сложность; Mohlenkamp также предоставляет реализацию в библиотеке libftsh.[42] Алгоритм сферической гармоники с O (N2бревноN) сложность описана Рохлиным и Тигертом.[43]
В алгоритм быстрого сворачивания аналогичен БПФ, за исключением того, что он работает с серией бинированных сигналов, а не с серией реальных или комплексных скалярных значений. Вращение (которое в БПФ - это умножение на комплексный вектор) - это круговой сдвиг формы сигнала компонента.
Различные группы также опубликовали алгоритмы «БПФ» для неравномерных данных, как описано в Potts. и другие. (2001).[44] Такие алгоритмы не вычисляют строго ДПФ (которое определено только для данных с равными интервалами), а скорее их приближение (a неравномерное дискретное преобразование Фурье, или NDFT, который часто вычисляется только приблизительно). В более общем плане существуют различные другие методы спектральная оценка.
Приложения
БПФ используется в цифровой записи, дискретизации, аддитивный синтез и коррекция высоты тона программного обеспечения.[45]
Важность БПФ проистекает из того факта, что он сделал работу в частотной области в равной мере вычислительно возможной, как работу во временной или пространственной области. Некоторые из важных приложений БПФ включают:[15][46]
- Быстрое целочисленное и полиномиальное умножение
- Эффективное умножение матрицы на вектор для Теплиц, циркулирующий и другие структурированные матрицы
- Алгоритмы фильтрации (см. перекрытие-добавить и перекрытие-сохранение методы)
- Быстрые алгоритмы для дискретный косинус или же преобразование синуса (например. быстрое DCT используется для JPEG и MPEG/MP3 кодирование и декодирование)
- Быстрый Чебышевское приближение
- Решение разностные уравнения
- Расчет изотопные распределения.[47]
Области исследований
- Большие БПФ
- С ростом объема больших данных в таких областях, как астрономия, возникла потребность в 512k FFT для определенных расчетов интерферометрии. Данные, собранные такими проектами, как WMAP и LIGO требуют БПФ десятков миллиардов точек. Поскольку этот размер не помещается в основную память, так называемые БПФ вне ядра являются активной областью исследований.[48]
- Приблизительное БПФ
- Для таких приложений, как МРТ, необходимо вычислять ДПФ для неравномерно расположенных точек сетки и / или частот. Подходы, основанные на многополюсности, могут вычислять приблизительные величины с коэффициентом увеличения времени выполнения.[49]
- Групповые БПФ
- БПФ также можно объяснить и интерпретировать с помощью теория представлений групп что позволяет сделать дальнейшие обобщения. Функция на любой компактной группе, в том числе нециклической, имеет разложение по базису из неприводимых матричных элементов. Поиск эффективного алгоритма для выполнения этой смены базиса остается активной областью исследований. Приложения, включая эффективные сферическая гармоника расширение, анализируя определенные Марковские процессы, робототехника и др.[50]
- Квантовые БПФ
- Быстрый алгоритм Шора для целочисленная факторизация на квантовом компьютере есть подпрограмма для вычисления ДПФ двоичного вектора. Это реализовано в виде последовательности 1- или 2-битных квантовых вентилей, теперь известных как квантовое БПФ, которое фактически является БПФ Кули-Тьюки, реализованным как конкретная факторизация матрицы Фурье. Расширение этих идей в настоящее время изучается.
Ссылка на язык
Язык | Команда / Метод | Предварительные условия |
---|---|---|
р | stats :: fft (x) | Никто |
Октава/MATLAB | fft (x) | Никто |
Python | fft.fft (x) | тупой |
Mathematica | Фурье [x] | Никто |
Юля | fft (A [, dims]) | FFTW |
Смотрите также
Алгоритмы, связанные с БПФ:
- Алгоритм Кули – Тьюки БПФ
- Алгоритм БПФ с простым коэффициентом
- Алгоритм БПФ Брууна
- Алгоритм БПФ Рейдера
- Алгоритм БПФ Блюстейна
- Алгоритм Герцеля - Вычисляет отдельные члены дискретного преобразования Фурье
Реализации БПФ:
- АЛГЛИБ - Библиотека C ++ и C # с реальной / сложной реализацией БПФ.
- FFTW «Самое быстрое преобразование Фурье на Западе» - библиотека C для дискретного преобразования Фурье (ДПФ) в одном или нескольких измерениях.
- ФФТС - Самое быстрое преобразование Фурье на юге.
- FFTPACK - еще одна библиотека Fortran FFT (общественное достояние)
- Intel Интегрированные примитивы производительности
- Intel Математическая библиотека ядра
- cuFFT - БПФ для CUDA с ускорением на GPU
Другие ссылки:
- Добавить перекрытие/Сохранение перекрытия - эффективные методы свертки с использованием БПФ для длинных сигналов
- Алгоритм Одлыжко – Шёнхаге применяет БПФ к конечным Серия Дирихле.
- Алгоритм Шёнхаге – Штрассена - асимптотически быстрый алгоритм умножения для больших целых чисел
- Диаграмма бабочки - диаграмма, используемая для описания БПФ.
- Спектральная музыка (включает применение анализа DFT к музыкальной композиции)
- Анализатор спектра - любое из нескольких устройств, выполняющих спектральный анализ, часто с помощью DFT
- Временные ряды
- Быстрое преобразование Уолша – Адамара
- Обобщенный распределительный закон
- Многомерное преобразование
- Многомерная дискретная свертка
- Матрица ДПФ
Рекомендации
- ^ а б c d Хайдеман, Майкл Т .; Джонсон, Дон Х .; Буррус, Чарльз Сидни (1984). «Гаусс и история быстрого преобразования Фурье» (PDF). Журнал IEEE ASSP. 1 (4): 14–21. CiteSeerX 10.1.1.309.181. Дои:10.1109 / MASSP.1984.1162257. S2CID 10032502.
- ^ Ван Лоан, Чарльз (1992). Вычислительные рамки для быстрого преобразования Фурье. СИАМ.
- ^ Стрэнг, Гилберт (Май – июнь 1994 г.). «Вейвлеты». Американский ученый. 82 (3): 250–255. JSTOR 29775194.
- ^ Kent, Ray D .; Прочтите, Чарльз (2002). Акустический анализ речи. ISBN 0-7693-0112-6.
- ^ Донгарра, Джек; Салливан, Фрэнсис (январь 2000 г.). «Приглашенные редакторы. Введение в 10 лучших алгоритмов». Вычислительная техника в науке и технике. 2 (1): 22–23. Bibcode:2000CSE ..... 2a..22D. Дои:10.1109 / MCISE.2000.814652. ISSN 1521-9615.
- ^ Гаусс, Карл Фридрих (1866). "Theoria interpolationis Methodo nova tractata" [Теория о новом методе интерполяции]. Nachlass (Неопубликованная рукопись). Верке (на латинском и немецком языках). 3. Геттинген, Германия: Königlichen Gesellschaft der Wissenschaften zu Göttingen. С. 265–303.
- ^ Хайдеман, Майкл Т .; Джонсон, Дон Х .; Буррус, Чарльз Сидни (1985-09-01). «Гаусс и история быстрого преобразования Фурье». Архив истории точных наук. 34 (3): 265–277. CiteSeerX 10.1.1.309.181. Дои:10.1007 / BF00348431. ISSN 0003-9519. S2CID 122847826.
- ^ Йейтс, Фрэнк (1937). «Планирование и анализ факторных экспериментов». Техническое сообщение № 35 Бюро почв Содружества. 142 (3585): 90–92. Bibcode:1938Натура 142 ... 90F. Дои:10.1038 / 142090a0. S2CID 23501205.
- ^ Дэниэлсон, Гордон С.; Ланцош, Корнелиус (1942). «Некоторые усовершенствования в практическом анализе Фурье и их применение к рассеянию рентгеновских лучей на жидкостях». Журнал Института Франклина. 233 (4): 365–380. Дои:10.1016 / S0016-0032 (42) 90767-1.
- ^ Ланцош, Корнелиус (1956). Прикладной анализ. Прентис – Холл.
- ^ Кули, Джеймс У.; Льюис, Питер А. В .; Уэлч, Питер Д. (июнь 1967). «Исторические заметки о быстром преобразовании Фурье». Транзакции IEEE по аудио и электроакустике. 15 (2): 76–79. CiteSeerX 10.1.1.467.7209. Дои:10.1109 / TAU.1967.1161903. ISSN 0018-9278.
- ^ а б Кули, Джеймс У.; Тьюки, Джон У. (1965). «Алгоритм машинного расчета сложных рядов Фурье». Математика вычислений. 19 (90): 297–301. Дои:10.1090 / S0025-5718-1965-0178586-1. ISSN 0025-5718.
- ^ Кули, Джеймс У. (1987). Повторное открытие алгоритма быстрого преобразования Фурье (PDF). Microchimica Acta. III. Вена, Австрия. С. 33–45.
- ^ Гарвин, Ричард (июнь 1969). "Быстрое преобразование Фурье как пример трудностей с широким использованием новой техники" (PDF). Транзакции IEEE по аудио и электроакустике. AU-17 (2): 68–72.
- ^ а б Рокмор, Дэниел Н. (январь 2000 г.). «БПФ: алгоритм, который может использовать вся семья». Вычислительная техника в науке и технике. 2 (1): 60–64. Bibcode:2000CSE ..... 2a..60R. CiteSeerX 10.1.1.17.228. Дои:10.1109/5992.814659. ISSN 1521-9615.
- ^ а б Фриго, Маттео; Джонсон, Стивен Г. (январь 2007 г.) [2006-12-19]. «Модифицированный БПФ с разделенным основанием с меньшим количеством арифметических операций». Транзакции IEEE при обработке сигналов. 55 (1): 111–119. Bibcode:2007ITSP ... 55..111J. CiteSeerX 10.1.1.582.5497. Дои:10.1109 / чайная ложка.2006.882087. S2CID 14772428.
- ^ а б c Фриго, Маттео; Джонсон, Стивен Г. (2005). «Дизайн и реализация FFTW3» (PDF). Труды IEEE. 93 (2): 216–231. CiteSeerX 10.1.1.66.3097. Дои:10.1109 / jproc.2004.840301. S2CID 6644892.
- ^ а б Джентльмен, В. Морвен; Санде, Г. (1966). «Быстрые преобразования Фурье - для удовольствия и выгоды». Труды AFIPS. 29: 563–578. Дои:10.1145/1464291.1464352. S2CID 207170956.
- ^ Гаусс, Карл Фридрих (1866) [1805]. Theoria interpolationis Methodo nova tractata. Верке (на латинском и немецком языках). 3. Геттинген, Германия: Königliche Gesellschaft der Wissenschaften. С. 265–327.
- ^ а б Бреннер, Норман М .; Рейдер, Чарльз М. (1976). «Новый принцип быстрого преобразования Фурье». Транзакции IEEE по акустике, речи и обработке сигналов. 24 (3): 264–266. Дои:10.1109 / ТАССП.1976.1162805.
- ^ а б Виноград, Шмуэль (1978). «О вычислении дискретного преобразования Фурье». Математика вычислений. 32 (141): 175–199. Дои:10.1090 / S0025-5718-1978-0468306-4. JSTOR 2006266. ЧВК 430186. PMID 16592303.
- ^ Виноград, Шмуэль (1979). «О мультипликативной сложности дискретного преобразования Фурье». Успехи в математике. 32 (2): 83–117. Дои:10.1016/0001-8708(79)90037-9.
- ^ а б Соренсен, Хенрик В .; Джонс, Дуглас Л.; Хайдеман, Майкл Т .; Буррус, Чарльз Сидни (1987). «Действительные алгоритмы быстрого преобразования Фурье». Транзакции IEEE по акустике, речи и обработке сигналов. 35 (6): 849–863. CiteSeerX 10.1.1.205.4523. Дои:10.1109 / ТАССП.1987.1165220.
- ^ Соренсен, Хенрик В .; Джонс, Дуглас Л.; Хайдеман, Майкл Т .; Буррус, Чарльз Сидни (1987). "Поправки" к алгоритмам быстрого преобразования Фурье с действительными значениями"". Транзакции IEEE по акустике, речи и обработке сигналов. 35 (9): 1353. Дои:10.1109 / ТАССП.1987.1165284.
- ^ Хайдеман, Майкл Т .; Буррус, Чарльз Сидни (1986). "На количество умножений, необходимых для вычисления длины-2п ДПФ ». Транзакции IEEE по акустике, речи и обработке сигналов. 34 (1): 91–95. Дои:10.1109 / ТАССП.1986.1164785.
- ^ а б Дюамель, Пьер (1990). "Алгоритмы, отвечающие нижним оценкам мультипликативной сложности длины 2п ДПФ и их связь с практическими алгоритмами ». Транзакции IEEE по акустике, речи и обработке сигналов. 38 (9): 1504–1511. Дои:10.1109/29.60070.
- ^ Моргенштерн, Жак (1973). «Замечание о нижней оценке линейной сложности быстрого преобразования Фурье». Журнал ACM. 20 (2): 305–306. Дои:10.1145/321752.321761. S2CID 2790142.
- ^ Пан, Виктор Я. (1986-01-02). «Компромисс между аддитивной сложностью и асинхронностью линейных и билинейных алгоритмов». Письма об обработке информации. 22 (1): 11–14. Дои:10.1016/0020-0190(86)90035-9. Получено 2017-10-31.
- ^ Пападимитриу, Христос Х. (1979). «Оптимальность быстрого преобразования Фурье». Журнал ACM. 26: 95–102. Дои:10.1145/322108.322118. S2CID 850634.
- ^ Ланди, Томас Дж .; Ван Бускерк, Джеймс (2007). "Новый матричный подход к реальным БПФ и сверткам длины 2k". Вычисление. 80 (1): 23–45. Дои:10.1007 / s00607-007-0222-6. S2CID 27296044.
- ^ Хайнал, Стив; Хайнал, Хайди (2011). «Генерация и поиск семейств алгоритмов БПФ» (PDF). Журнал по выполнимости, логическому моделированию и вычислениям. 7 (4): 145–187. arXiv:1103.5740. Bibcode:2011arXiv1103.5740H. Дои:10.3233 / SAT190084. S2CID 173109. Архивировано из оригинал (PDF) на 2012-04-26.
- ^ а б Дюамель, Пьер; Веттерли, Мартин (1990). «Быстрые преобразования Фурье: обзор учебного пособия и современное состояние». Обработка сигналов. 19 (4): 259–299. Дои:10.1016 / 0165-1684 (90) 90158-У.
- ^ Эдельман, Алан; Маккоркодейл, Питер; Толедо, Сиван (1999). "Будущее быстрое преобразование Фурье?" (PDF). Журнал SIAM по научным вычислениям. 20 (3): 1094–1114. CiteSeerX 10.1.1.54.9339. Дои:10.1137 / S1064827597316266.
- ^ Го, Хайтао; Буррус, Чарльз Сидни (1996). «Быстрое приближенное преобразование Фурье с помощью вейвлет-преобразования». Труды SPIE. Вейвлет-приложения в обработке сигналов и изображений IV. 2825: 250–259. Bibcode:1996SPIE.2825..250G. CiteSeerX 10.1.1.54.3984. Дои:10.1117/12.255236. S2CID 120514955.
- ^ Шентов, Огнян В .; Mitra, Sanjit K .; Heute, Ульрих; Хоссен, Абдул Н. (1995). "Subband DFT. I. Definition, interpretations and extensions". Обработка сигналов. 41 (3): 261–277. Дои:10.1016/0165-1684(94)00103-7.
- ^ Hassanieh, Haitham; Indyk, Piotr; Katabi, Dina; Price, Eric (January 2012). "Simple and Practical Algorithm for Sparse Fourier Transform" (PDF). ACM-SIAM Symposium on Discrete Algorithms. (NB. See also the sFFT Web Page.)
- ^ Schatzman, James C. (1996). "Accuracy of the discrete Fourier transform and the fast Fourier transform". Журнал SIAM по научным вычислениям. 17 (5): 1150–1166. CiteSeerX 10.1.1.495.9184. Дои:10.1137/s1064827593247023.
- ^ Welch, Peter D. (1969). "A fixed-point fast Fourier transform error analysis". Транзакции IEEE по аудио и электроакустике. 17 (2): 151–157. Дои:10.1109/TAU.1969.1162035.
- ^ Ergün, Funda (1995). Testing multivariate linear functions: Overcoming the generator bottleneck. Proceedings of the 27th ACM Symposium on the Theory of Computing. Киото, Япония. pp. 407–416. Дои:10.1145/225058.225167. ISBN 978-0897917186. S2CID 15512806.
- ^ Nussbaumer, Henri J. (1977). "Digital filtering using polynomial transforms". Письма об электронике. 13 (13): 386–387. Дои:10.1049/el:19770280.
- ^ Mohlenkamp, Martin J. (1999). "A Fast Transform for Spherical Harmonics" (PDF). Журнал анализа Фурье и приложений. 5 (2–3): 159–184. CiteSeerX 10.1.1.135.9830. Дои:10.1007/BF01261607. S2CID 119482349. Получено 2018-01-11.
- ^ "libftsh library". Архивировано из оригинал на 2010-06-23. Получено 2007-01-09.
- ^ Rokhlin, Vladimir; Tygert, Mark (2006). "Fast Algorithms for Spherical Harmonic Expansions" (PDF). Журнал SIAM по научным вычислениям. 27 (6): 1903–1928. CiteSeerX 10.1.1.125.7415. Дои:10.1137/050623073. Получено 2014-09-18. [1]
- ^ Поттс, Дэниел; Steidl, Gabriele; Tasche, Manfred (2001). "Fast Fourier transforms for nonequispaced data: A tutorial" (PDF). In Benedetto, J. J.; Ferreira, P. (eds.). Современная теория выборки: математика и приложения. Биркхойзер.
- ^ Берджесс, Ричард Джеймс (2014). История музыкального производства. Издательство Оксфордского университета. ISBN 978-0199357178. Получено 1 августа 2019.
- ^ Chu, Eleanor; George, Alan (1999-11-11) [1999-11-11]. «Глава 16». Inside the FFT Black Box: Serial and Parallel Fast Fourier Transform Algorithms. CRC Press. pp. 153–168. ISBN 978-1-42004996-1.
- ^ Fernandez-de-Cossio Diaz, Jorge; Fernandez-de-Cossio, Jorge (2012-08-08). "Computation of Isotopic Peak Center-Mass Distribution by Fourier Transform". Аналитическая химия. 84 (16): 7052–7056. Дои:10.1021/ac301296a. ISSN 0003-2700. PMID 22873736.
- ^ Cormen, Thomas H.; Nicol, David M. (1998). "Performing out-of-core FFTs on parallel disk systems" (PDF). Параллельные вычисления. 24 (1): 5–20. CiteSeerX 10.1.1.44.8212. Дои:10.1016/S0167-8191(97)00114-2.[постоянная мертвая ссылка]
- ^ Датт, Алок; Rokhlin, Vladimir (1993-11-01). «Быстрые преобразования Фурье для данных без интервала». Журнал SIAM по научным вычислениям. 14 (6): 1368–1393. Дои:10.1137/0914081. ISSN 1064-8275.
- ^ Rockmore, Daniel N. (2004). "Recent Progress and Applications in Group FFTs". In Byrnes, Jim (ed.). Computational Noncommutative Algebra and Applications. NATO Science Series II: Mathematics, Physics and Chemistry. 136. Springer Нидерланды. pp. 227–254. CiteSeerX 10.1.1.324.4700. Дои:10.1007/1-4020-2307-3_9. ISBN 978-1-4020-1982-1. S2CID 1412268. Отсутствует или пусто
| название =
(помощь)
дальнейшее чтение
- Brigham, E. Oran (2002). "The Fast Fourier Transform". Нью-Йорк, США: Prentice-Hall. Цитировать журнал требует
| журнал =
(помощь) - Кормен, Томас Х.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2001). "Chapter 30: Polynomials and the FFT". Введение в алгоритмы (2-е изд.). MIT Press / Макгроу-Хилл. ISBN 0-262-03293-7.
- Elliott, Douglas F.; Rao, K. Ramamohan (1982). Fast transforms: Algorithms, analyses, applications. Нью-Йорк, США: Академическая пресса.
- Guo, Haitao; Sitton, Gary A.; Burrus, Charles Sidney (1994). "The Quick Discrete Fourier Transform". Proceedings of ICASSP '94. IEEE International Conference on Acoustics, Speech and Signal Processing. Proceedings on the IEEE Conference on Acoustics, Speech, and Signal Processing (ICASSP). 3. С. 445–448. Дои:10.1109/ICASSP.1994.389994. ISBN 978-0-7803-1775-8. S2CID 42639206.
- Johnson, Steven G.; Frigo, Matteo (2007). "A modified split-radix FFT with fewer arithmetic operations" (PDF). Транзакции IEEE при обработке сигналов. 55 (1): 111–119. Bibcode:2007ITSP...55..111J. CiteSeerX 10.1.1.582.5497. Дои:10.1109/tsp.2006.882087. S2CID 14772428.
- Press, William H .; Teukolsky, Saul A .; Веттерлинг, Уильям Т .; Flannery, Brian P. (2007). "Chapter 12. Fast Fourier Transform". Числовые рецепты: искусство научных вычислений (3-е изд.). Нью-Йорк, США: Издательство Кембриджского университета. ISBN 978-0-521-88068-8.
- Singleton, Richard Collom (June 1969). "A Short Bibliography on the Fast Fourier Transform". Special Issue on Fast Fourier Transform. Транзакции IEEE по аудио и электроакустике. AU-17. IEEE Audio and Electroacoustics Group. С. 166–169. Дои:10.1109/TAU.1969.1162029. (NB. Contains extensive bibliography.)
внешняя ссылка
- Fast Fourier Algorithm
- Быстрые преобразования Фурье, Связи online book edited by Charles Sidney Burrus, with chapters by Charles Sidney Burrus, Ivan Selesnick, Markus Pueschel, Matteo Frigo, and Steven G. Johnson (2008).
- Links to FFT code and information online.
- National Taiwan University – FFT
- FFT programming in C++ — Cooley–Tukey algorithm.
- Online documentation, links, book, and code.
- Using FFT to construct aggregate probability distributions
- Шри Веларатна "Thirty years of FFT analyzers", Звук и вибрация (Январь 1997 г., юбилейный выпуск 30-летия). A historical review of hardware FFT devices.
- FFT Basics and Case Study Using Multi-Instrument
- FFT Textbook notes, PPTs, Videos at Holistic Numerical Methods Institute.
- ALGLIB FFT Code GPL Licensed multilanguage (VBA, C++, Pascal, etc.) numerical analysis and data processing library.
- MIT's sFFT MIT Sparse FFT algorithm and implementation.
- VB6 FFT VB6 optimized library implementation with source code.
- Fast Fourier transform illustrated Demo examples and FFT calculator.
- Discrete Fourier Transform (Forward) A JavaScript implementation of FFTPACK code by Swarztrauber.
- Fourier Transforms of Discrete Signals (Microlink IT College)
- Interactive FFT Tutorial A visual interactive intro to Fourier transforms and FFT methods.