Алгоритм БПФ Рейдера
Алгоритм Рейдера (1968), [ 1 ] названный в честь Чарльза М. Рейдера из Лаборатории Линкольна Массачусетского технологического института , представляет собой алгоритм быстрого преобразования Фурье (БПФ), который вычисляет дискретное преобразование Фурье (ДПФ) простых размеров путем повторного выражения ДПФ в виде циклической свертки (другой алгоритм для БПФ простых чисел). размеров, алгоритм Блюстейна также работает, переписывая ДПФ как свертку).
Поскольку алгоритм Рейдера зависит только от периодичности ядра ДПФ, он напрямую применим к любому другому преобразованию (простого порядка) с аналогичным свойством, такому как теоретико-числовое преобразование или дискретное преобразование Хартли .
Алгоритм можно модифицировать, чтобы получить двукратную экономию в случае ДПФ реальных данных, используя слегка измененную переиндексацию/перестановку для получения двух циклических сверток реальных данных половинного размера; [ 2 ] альтернативная адаптация для ДПФ реальных данных использует дискретное преобразование Хартли . [ 3 ]
Виноград расширил алгоритм Рейдера, включив в него размеры ДПФ простой степени. , [ 4 ] [ 5 ] и сегодня алгоритм Рейдера иногда описывается как частный случай алгоритма БПФ Винограда , также называемого алгоритмом мультипликативного преобразования Фурье (Tolimieri et al., 1997), [ 6 ] что относится к еще большему классу размеров. Однако для составных размеров, таких как степени простых чисел, алгоритм БПФ Кули-Тьюки намного проще и практичнее реализовать, поэтому алгоритм Рейдера обычно используется только для базовых случаев Кули-Тьюки . с большими простыми числами рекурсивного разложения ДПФ [ 3 ]
Алгоритм
[ редактировать ]
Начнем с определения дискретного преобразования Фурье:
Если N — простое число, то множество ненулевых индексов образует группу при умножении модулю N. по Одним из следствий теории чисел таких групп является то, что существует генератор группы (иногда называемый примитивным корнем ), который можно найти путем перебора или несколько более совершенных алгоритмов. [ 7 ] ). Этот генератор представляет собой целое число g такое, что для любого ненулевого индекса n и уникального (образуя биекцию от q до ненулевого n ). Сходным образом, для любого ненулевого индекса k и для уникального , где отрицательный показатель степени обозначает мультипликативную обратную величину . Это означает, что мы можем переписать ДПФ, используя эти новые индексы p и q, как:
(Напомним, что x n и X k неявно периодичны по N , а также что ( тождество Эйлера ). Таким образом, все индексы и показатели степени берутся по модулю N , как того требует групповая арифметика.)
Окончательное суммирование, приведенное выше, представляет собой в точности циклическую свертку двух последовательностей a q и b q (длины N –1, поскольку ) определяется:
Оценка свертки
[ редактировать ]Поскольку N –1 является составным, эту свертку можно выполнить непосредственно с помощью теоремы о свертке и более традиционных алгоритмов БПФ. Однако это может быть неэффективно, если N –1 само по себе имеет большие простые множители, что требует рекурсивного использования алгоритма Рейдера. Вместо этого можно вычислить циклическую свертку длины ( N –1) точно, дополняя ее нулями до длины не менее 2( N –1)–1, скажем, до степени двойки , которую затем можно вычислить за O ( N log N ) время без рекурсивного применения алгоритма Рейдера.
Таким образом, этот алгоритм требует сложения O( N ) плюс времени O( N log N ) для свертки. На практике сложения O( N ) часто могут выполняться путем поглощения сложений сверткой: если свертка выполняется парой БПФ, то сумма x n определяется выходным сигналом постоянного тока (0-го) БПФ. из q можно добавить ко всем выходным данным , плюс x 0 и x 0 добавив его к постоянному члену свертки перед обратным БПФ. Тем не менее, этот алгоритм требует больше операций, чем БПФ близких составных размеров, и на практике обычно занимает в 3–10 раз больше времени.
Если алгоритм Рейдера выполняется с использованием БПФ размера N –1 для вычисления свертки, а не путем заполнения нулями, как упоминалось выше, эффективность сильно зависит от N и количества раз, которое алгоритм Рейдера должен применяться рекурсивно. Худшим случаем было бы, если бы N –1 было 2 N 2 , где N 2 простое число, N 2 –1 = 2 N 3 , где N 3 простое число, и так далее. В таких случаях, если предположить, что цепочка простых чисел простирается до некоторого ограниченного значения, рекурсивное применение алгоритма Рейдера фактически потребует O( N 2 ) время [ сомнительно – обсудить ] . Такие N j называются простыми числами Софи Жермен , а такая их последовательность называется цепью Каннингема первого рода. Однако наблюдается медленный рост длин цепочек Каннингема, чем log 2 ( N ), поэтому алгоритм Рейдера, примененный таким образом, вероятно, не является O ( N 2 это, возможно, хуже, чем O( N log N ), хотя в худших случаях ). К счастью, гарантия сложности O( N log N ) может быть достигнута путем заполнения нулями.
Ссылки
[ редактировать ]- ^ CM Rader, «Дискретное преобразование Фурье, когда количество выборок данных простое», Proc. IEEE 56, 1107–1108 (1968).
- ^ С. Чу и К. Буррус, «Алгоритм FTT с простым коэффициентом [ sic ] с использованием распределенной арифметики», IEEE Transactions on Acoustics, Speech and Signal Processing 30 (2), 217–227 (1982).
- ^ Jump up to: а б Маттео Фриго и Стивен Дж. Джонсон , « Проектирование и реализация FFTW3 », Proceedings of the IEEE 93 (2), 216–231 (2005).
- ^ С. Виноград, «О вычислении дискретного преобразования Фурье», Proc. Национальная академия наук США , 73 (4), 1005–1006 (1976).
- ^ С. Виноград, «О вычислении дискретного преобразования Фурье», Mathematics of Computing , 32 (141), 175–199 (1978).
- ^ Р. Толимьери, М. Ан и К.Лу, Алгоритмы дискретного преобразования Фурье и свертки , Springer-Verlag, 2-е изд., 1997.
- ^ Дональд Э. Кнут, Искусство компьютерного программирования, том. 2: Получисловые алгоритмы , 3-е издание, раздел 4.5.4, с. 391 (Аддисон-Уэсли, 1998).