Быстрое преобразование Фурье

Быстрое преобразование Фурье

Быстрое преобразование Фурье (БПФ, FFT) — это алгоритм быстрого вычисления дискретного преобразования Фурье (ДПФ). То есть, алгоритм вычисления за количество действий, меньшее чем O(N^2), требуемых для прямого (по формуле) вычисления ДПФ. Иногда под БПФ понимается один из быстрых алгоритмов, называемый алгоритмом прореживания по частоте/времени или алгоритмом по основанию 2, имеющего сложность O(N\log(N)).

Содержание

Основной алгоритм

Покажем как выполнить дискретное преобразование Фурье за O(N(p_1+\cdots+p_n)) действий при N=p_1p_2\cdots p_n. В частности, при N=2^n понадобится O(N\log(N)) действий.

Дискретное преобразование Фурье преобразует набор чисел a_0, \dots, a_{n-1} в набор чисел b_0, \dots, b_{n-1}, такой, что b_i=\sum_{j=0}^{n-1}a_j\varepsilon^{ij}, где \varepsilon^n=1 и \varepsilon^k\neq 1 при 0<k<n. Алгоритм быстрого преобразования Фурье применим к любым коммутативным ассоциативным кольцам с единицей. Чаще всего этот алгоритм применяют к полю комплексных чисел (c \varepsilon=e^{2\pi i/n}) и к кольцам вычетов.

Основной шаг алгоритма состоит в сведении задачи для N чисел к задаче для p=N/q числам, где q — делитель N. Пусть мы уже умеем решать задачу для N/q чисел. Применим преобразование Фурье к наборам a_i,a_{q+i}, \dots, a_{q(p-1)+i} для i=0,1,\dots,q-1. Покажем теперь, как за O(Np) действий решить исходную задачу. Заметим, что b_i=\sum_{j=0}^{q-1} \varepsilon^{ij} (\sum_{k=0}^{p-1}a_{kq+j}\varepsilon^{kiq}). Выражения в скобках нам уже известны — это i\pmod p-тое число после преобразования Фурье j-той группы. Таким образом, для вычисления каждого b_i нужно O(q) действий, а для вычисления всех b_i — O(Nq) действий, что и требовалось получить.

Обратное преобразование Фурье

Для обратного преобразования Фурье можно применять алгоритм прямого преобразования Фурье — нужно лишь использовать \varepsilon^{-1} вместо \varepsilon (или применить операцию комплексного сопряжения в начале к входным данным, а затем к результату, полученному после прямого преобразования Фурье) и окончательный результат поделить на N.

Общий случай

Общий случай может быть сведён к предыдущему. Пусть 4N>2^k\ge2N. Заметим, что b_i=\varepsilon^{-i^2/2}\sum_{j=0}^{N-1}\varepsilon^{(i+j)^2/2}\varepsilon^{-j^2/2}a_j. Обозначим \bar{a}_i=\varepsilon^{-i^2/2}a_i, \bar{b}_i=\varepsilon^{i^2/2}b_i, c_i=\varepsilon^{(2N-2-i)^2/2}. Тогда \bar{b}_i=\sum_{j=0}^{2N-2-i}\bar{a}_jc_{2N-2-i-j}, если положить \bar{a}_i=0 при i\ge N.

Таким образом задача сведена к вычислению свёртки, но это можно сделать с помощью трёх преобразований Фурье для 2^k элементов. Выполняем прямое преобразование Фурье для \{\bar{a}_i\}_{i=0}^{i=2^k-1} и \{c_i\}_{i=0}^{i=2^k-1}, перемножаем поэлементно результаты и выполняем обратное преобразование Фурье.

Вычисления всех \bar{a}_i и c_i требуют O(N) действий, три преобразования Фурье требуют O(N\log(N)) действий, перемножение результатов преобразований Фурье требует O(N) действий, вычисление всех b_i зная значения свертки требует O(N) действий. Итого для дискретного преобразования Фурье требуется O(N\log(N)) действий для любого N.

Этот алгоритм быстрого преобразования Фурье может работать над кольцом только когда известны первообразные корни из единицы степеней 2N и 2^k.

Вывод преобразования из ДПФ

Дискретное преобразование Фурье для вектора  \vec x , состоящего из N элементов, имеет вид:

 \vec X = \hat A \vec x

элементы матрицы  \hat A имеют вид:  a_{N}^{mn} = \exp \left( -2\pi i \frac{mn}{N} \right) .

Пусть N четно, тогда ДПФ можно переписать следующим образом:

 X_m=\sum_{n=0}^{N-1} x_n a_{N}^{mn} = \sum_{n=0}^{N/2-1}x_{2n} a_{N}^{2nm} + \sum_{n=0}^{N/2-1}x_{2n+1} a_{N}^{(2n+1)m}

Коэффициенты  a_{N}^{2nm} и  a_{N}^{(2n+1)m} можно переписать следующим образом (M=N/2):

 a_{N}^{2nm} = \exp \left( -2\pi i \frac{2mn}{N} \right) = \exp \left( -2\pi i \frac{mn}{N/2} \right) = a_{M}^{nm}
 a_{N}^{(2n+1)m} = \exp \left( -2\pi i \frac{m}{N} \right)  a_{M}^{nm}

В результате получаем:

 X_m=\sum_{n=0}^{M-1} x_{2n} a_{M}^{nm} + \exp \left( -2\pi i \frac{m}{N} \right) \sum_{n=0}^{M-1} x_{2n+1} a_{M}^{nm}

То есть дискретное преобразование Фурье от вектора, состоящего из N отсчетов, свелось к линейной композиции двух ДПФ от \frac N2 отсчетов, и если для первоначальной задачи требовалось N^2 операций, то для полученной композиции — \frac{N^2}{2} . Если M является степенью двух, то это разделение можно продолжать рекурсивно до тех пор, пока не дойдем до двухточечного преобразования Фурье, которое вычисляется по следующим формулам:


\begin{cases}
X_0=x_0+x_1\\
X_1=x_0-x_1
\end{cases}

Пример программы

Ниже приведен пример расчета комплексного БПФ, написанный на С:

Ниже приведен пример вычисления модуля спектра действительного массива чисел на основе реализации быстрого преобразования Фурье, написанный на C++ :

Пример реализации на Delphi :

Пример реализации на C#

Графическое представление работы вышеприведенного алгоритма.

Ссылки

  • Преобразование Фурье — Суть метода, теоремы, физические эффекты при преобразовании реальных сигналов, примеры оптимизированных программ на C++.
  • FFTW — свободно распространяемая библиотека, написанная на С, поддерживает разложение n-мерного сигнала, представленного как вещественными, так и комплексными числами.  (англ.)

Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "Быстрое преобразование Фурье" в других словарях:

  • быстрое преобразование Фурье — БПФ Алгоритм, используемый в компьютерах для сокращения времени выполнения преобразования Фурье. [Система неразрушающего контроля. Виды (методы) и технология неразрушающего контроля. Термины и определения (справочное пособие). Москва 2003 г.]… …   Справочник технического переводчика

  • быстрое преобразование Фурье — sparčioji Fourier transformacija statusas T sritis automatika atitikmenys: angl. fast Fourier transform vok. schnelle Fouriertransformation, f rus. быстрое преобразование Фурье, n pranc. transformation de Fourier rapide, f ryšiai: sinonimas –… …   Automatikos terminų žodynas

  • Преобразование Фурье над конечным полем — Дискретное преобразование Фурье над конечным полем  это один из видов дискретного преобразования Фурье для вектора над конечным полем GF(q), определяемое как вектор , где n делит qm − 1 при некотором целом положительном m, с компонентами,… …   Википедия

  • Преобразование Фурье — Преобразование Фурье  операция, сопоставляющая функции вещественной переменной другую функцию вещественной переменной. Эта новая функция описывает коэффициенты («амплитуды») при разложении исходной функции на элементарные составляющие … …   Википедия

  • Дискретное преобразование Фурье — (в англоязычной литературе DFT, Discrete Fourier Transform)  это одно из преобразований Фурье, широко применяемых в алгоритмах цифровой обработки сигналов (его модификации применяются в сжатии звука в MP3, сжатии изображений в JPEG и др.), а …   Википедия

  • Дискретное преобразование Фурье над конечным полем — Дискретное преобразование Фурье над конечным полем  это один из видов дискретного преобразования Фурье для вектора над конечным полем , определяемое как вектор , где делит при некотором целом положительном …   Википедия

  • Фурье преобразование — Преобразование Фурье  операция, сопоставляющая функции вещественной переменной другую функцию вещественной переменной. Эта новая функция описывает коэффициенты («амплитуды») при разложении исходной функции на элементарные составляющие … …   Википедия

  • ФУРЬЕ ПРЕОБРАЗОВАНИЕ ДИСКРЕТНОЕ — преобразование, используемое для гармонич. анализа функций, заданных на дискретном множестве точек. Если на множестве точек функция задана своими значениями Т> 0 период функции, то Ф. п. д. вектора х= (х 0, x1, ..., xN 1) есть вектор где F… …   Математическая энциклопедия

  • Быстрое — село в Харьковском районе Харьковской области Украины. Быстрое озеро в Пустошкинском районе Псковской области См. также: Быстрое питание Быстрое прототипирование Быстрое преобразование Фурье Быстрое умножение …   Википедия

  • Фурье ряд — Ряд Фурье  представление произвольной функции f с периодом τ в виде ряда Этот ряд может быть также переписан в виде . где Ak  амплитуда k го гармонического колебания (функции cos),   кру …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»