Перевод статьи из свободной библиотеки Википедия.
Автор: Смоляная Дарья Владимировна.
Источних находится по адресу http://en.wikipedia.org/wiki/Fast_Fourier_transform
Быстрое преобразование Фурье
Материал из Википедии, свободной энциклопедии
Быстрое преобразование Фурье (FFT) представляет собой эффективный алгоритм для вычисления дискретного преобразования Фурье (ДПФ) и обратного ДПФ. Есть много различных алгоритмов БПФ, в которых применяется широкий спектр областей математики, от простой комплексно-численной арифметики до теории групп и теории чисел; в этой статье делается обзор имеющихся методов и некоторых их общих свойств, а уже конкретные алгоритмы описаны во вспомогательных статьях.
ДПФ раскладывает последовательности значений на компоненты различных частот.
Эта операция является полезной во многих областях (для ознакомления со свойствами и примерами применения см. дискретное преобразование Фурье), но расчет преобразования непосредственно по формулам, очень часто слишком медленый для практического применения.
БПФ это способ получить тот же результат, но значительно быстрее: расчет ДПФ из N точек непосредственно по формулам, занимает O (N 2) арифметических операций, тогда как БПФ можно вычислить и получить тот же результат, но уже за O (N log N) операций.
Разница в скорости расчетов может быть существенной, особенно при больших объемах данных, где N, на практике, может достигать порядка тысячи или миллиона, и время вычисления может быть сокращено, в таких случаях, на несколько порядков. Уровень ускорения расчетов приблизительно пропорционален N / LOG (N).
Это огромное ускорение делает ДПФ приемлемым алгоритмом для применения его на практике; алгоритмы, которые реализуют БПФ имеют большое значение для широкого спектра приложений, от цифровой обработки сигналов и решения дифференциальных уравнений в частных производных до алгоритмов быстрого перемножения больших чисел.
Наиболее известны алгоритмы БПФ зависящие от факторизации N, однако (в отличие от популярных заблуждение) есть алгоритмы БПФ со сложностью вычисления равной O (N log N) для всех N, даже для натуральных N.
Многие алгоритмы БПФ зависят только от того, что является примитивным корнем единицы. И, таким образом, могут применяться к аналогичным трансформациям для каких-либо конечных полей, таких, как теоретико-числовых преобразований.
С другой стороны обратное ДПФ это такая же трансформация, как и прямое ДПФ, но с обратным знаком в экспоненте, и дополнительный множитель равный 1 / N из любого алгоритма БПФ может легко сделать его обратную формулу.
БПФ вычисляет ДПФ и дает точно такой же результат, как и расчет ДПФ по его стандартным формулам напрямую; единственное различие заключается в том, что БПФ значительно быстрее.
Пусть х 0,… хN -1 будут комплексными числами. ДПФ определяется по формуле
Непосредственная обработка этой формулы требует O (N 2) операций: тут N выходящих значений X K, и каждое требует расчета суммы N выражении. В тоже врямя БПФ можно считать любой метод, который дает те же результаты , но за O (N log N) операций. Точнее, все известные алгоритмы БПФ требует Θ (N log N) операций (технически, O обозначает лишь верхнюю границу), хотя нет никаких доказательств того, что невозможно достичь меньшей сложности.
Для иллюстрации экономии на БПФ, рассмотрим вопрос о количестве умножений и сложений. Расчет ДПФ непосредственно связан с N 2 комплексных операций умножения и N (N - 1) комплексных операций сложения [из которых O (N) операций может быть сохранена путем устранения тривиальных операций, таких как умножение на 1].
Известный БПФ алгоритм Кули-Тьюки, для всех N, которые являются степенью 2, можно получить тот же результат уже с (N / 2)log2 N комплексными умножениями (опять же, игнорируя упрощенные умножения на 1, и т.п.) и N log2 N комплексных сложений.
На практике же, фактическая производительность на современных компьютерах, как правило, зависит от других факторов, помимо арифметики, и это является непростой темой (см., например, Фриго и Джонсон, 2005), но общее улучшение от Θ (N 2) до Θ (N log N) все же остается необходимым.
Основополагающий вопрос и давний интерес для теоретиков заключается в том, чтобы доказать, нижние границы по сложности и найти точное количество операций для быстрого преобразования Фурье, и эти проблемы остаются открытыми. Не строго доказано даже то, а действительно ли ДПФ требуют Ω (N log N) (то есть, порядка N logN или более) операции, даже для простого случая размеров равных степени двойки, хотя никаких алгоритмов с меньшими сложностями, как известно нет. В частности, количество арифметических операций, как правило, это центр внимания для вопросов подобного рода, хотя фактическая производительность на современных компьютерах, определяется также многими другими факторами, такими, как кэш-памяти и процессоры с поточной оптимизацией.
Следуя новаторской работе Винограда (1978), Θ (Н) нижняя граница известна для количества реальных умножений требующихся для БПФ. Может быть доказано, что только итеративных реальных умножений требуется выполнить для вычисления ДПФ для всех N, являющихся степенью двойки ( N = 2m ).
Кроме того, явно известны алгоритмы для достижения этой цели (Heideman И Burrus, 1986; Duhamel, 1990). К сожалению, эти алгоритмы требуют слишком много сложений, что бы быть пригодными на практике, по крайней мере, на современных компьютерах с аппаратными умножителями. Жесткая нижняя граница не дает представления о количестве необходимых сложений, хотя нижние оценки были подтверждены в некоторых алгоритмах. В 1973 году Моргенштерн доказал Ω (N log N), как границу снизу, на основе алгоритмов, где множительные константы имеют ограниченные величины (что верно для большинства, но не для всех алгоритмов БПФ).Для случая «N – это степень двойки», Papadimitriou (1979) утверждал, что количество N log2 N сложений комплексных чисел, которых достигли в алгоритме Кули-Тьюки , является оптимальным при определенных предположениях о графе этого алгоритма (его допущения предполагают, среди прочего, что ни одно сложение в корнях единицы не используется). (Этот аргумент предполагает, что требуется, по меньшей мере, 2 Nlog2 N реальных сложений, хотя это и не является жестким ограничением, поскольку дополнительные сложения требуется как часть умножений комплексных чисел.) До сих пор нет опубликованного алгоритма БПФ, который добивался бы меньше N log2 N комплекснозначного числа сложений (или их эквивалент) для всех N, которые являются степенью двойки.
Третья проблема заключается в том, чтобы свести к минимуму общее число вещественных умножений и сложений, иногда называемых "арифметической сложностью" (хотя в данном контексте это выражение является точным и не подразумевает асимптотической сложности, которая в настоящее время и рассматривается). Повторюсь, не было доказано ни одной жесткой нижней границы. Начиная с 1968 года, однако, минимальное опубликованное количество действий для всех N равных степеням двойки, было давно достигнуто на БПФ алгоритмах с разделенными системами счислений, которые требуют 4 N log2 N - 6 N + 8 реальных умножений и сложений для N> 1. Но и это было недавно сокращено до (Джонсон и Фрайго, 2007; Ланди и Ван Баскирк, 2007). Большинство попыток снизить или доказать сложность алгоритма БПФ были сосредоточены на очередной проблеме по работе с комплексными данными, поскольку она является наиболее простой. Тем не менее, БПФ с комплексными данными имеют проблемы, настолько тесно связанные с другими алгоритмами, такими, как БПФ с вещественными данными, дискретное косинус-преобразования, дискретные преобразования Хартли, и так далее, что любое улучшение в одном из них сразу же приведет к улучшению положения и в другом.
Все эти алгоритмы FFT обсуждаемые ниже вычисляют ДПФ . А некоторые "БПФ" алгоритмы были предложены, однако, для того, что бы вычислить ДПФ примерно, с ошибкой, которая может быть сколь угодно малой за счет увеличения числа расчетов. Такие алгоритмы направляют ошибку приближения на увеличения скорости и другие свойства. Например, алгоритм приближений БПФ Эдельмана и др. (1999) достигает нижней коммуникационной потребности в параллельных вычислениях с помощью специального метода быстрого умножения. А вейвлет базированный алгоритм приближенных вычислений БПФ по Го и Баррусу (1996) принимает разреженные данные более эффективно, чем это возможно с точным БПФ. Другой алгоритм приближенного вычисления подмножества ДПФ выдает их (Шентов и др.). Только алгоритм Эдельмана работает одинаково хорошо, как с разреженными, так и не разреженными данными, поскольку он основан на сжимаемости (уровне дефицита) матрицы Фурье, а не на сжимаемости (разряженных) данных.
Даже в "точных" БПФ алгоритмах имеются ошибки при конечной точности с использованием арифметики с плавающей точкой, но эти ошибки, как правило, весьма невелики, большинство алгоритмов БПФ, например Кули-Тьюки, имеют отличные численные свойства. Верхняя граница по относительной погрешности на алгоритме Кули-Тьюки O (ε log N), по сравнению с O (ε N 3 / 2) для родной ДПФ формулой (Джентльман и Санде, 1966).