Быстрое преобразование Фурье
Материал из MachineLearning.
Nikita Elкhin (Обсуждение | вклад)
(Новая: == Быстрое преобразование Фурье == '''Быстрое преобразование Фурье''' (БПФ, {{lang-en|Fast Fourier Transform, FFT}}) — клас...)
К следующему изменению →
Версия 05:08, 18 июля 2026
Содержание |
Быстрое преобразование Фурье
Быстрое преобразование Фурье (БПФ, Шаблон:Lang-en) — класс алгоритмов, позволяющих вычислить дискретное преобразование Фурье (ДПФ) и обратное к нему за время . Прямое вычисление ДПФ по определению требует
арифметических операций, что делает БПФ незаменимым инструментом в задачах цифровой обработки сигналов, спектрального анализа, вычисления свёрток и умножения многочленов.
Определение и вычислительная сложность
Пусть задана последовательность комплексных чисел . Её дискретное преобразование Фурье определяется как
где — комплексный корень из единицы, называемый поворачивающим множителем. Обратное дискретное преобразование Фурье (ОДПФ) задаётся аналогично с заменой
на
и нормировкой
.
Непосредственное вычисление всех коэффициентов
требует
комплексных умножений и
сложений, т. е. имеет временную сложность
. При больших
(порядка
–
, типичных в приложениях) такое количество операций неприемлемо.
Быстрым преобразованием Фурье называют любой алгоритм, понижающий сложность до . Наиболее распространённым является алгоритм Кули — Тьюки, основанный на методе «разделяй и властвуй». Далее основное внимание уделяется случаю
как наиболее простому и эффективному для изложения, хотя современные библиотеки (FFTW, Intel MKL) активно используют смешанные основания для достижения максимальной производительности.
Алгоритм Кули — Тьюки
Алгоритм Кули — Тьюки[1] был опубликован в 1965 г., хотя его идеи восходят к Гауссу. Ключевая идея состоит в рекурсивном сведении вычисления ДПФ длины к двум ДПФ длины
и последующем объединении результатов с помощью
комплексных умножений и
сложений. Алгоритм эксплуатирует алгебраические свойства корней из единицы, в частности периодичность и симметрию. Для случая
это приводит к временной сложности
.
Существуют две симметричные формы алгоритма — с прореживанием по времени и по частоте. Ниже подробно разбирается вариант с прореживанием по времени, который наиболее наглядно демонстрирует принцип «разделяй и властвуй».
Прореживание по времени (Decimation in Time, DIT)
Пусть чётно. Разобьём исходную последовательность
на две подпоследовательности половинной длины, выбирая отсчёты с чётными и нечётными индексами:
Обозначим через и
их
-точечные ДПФ:
Теперь выразим искомое ДПФ через
и
. Для любого
справедливо:
В последнем переходе использовалось тождество , которое следует из определения поворачивающего множителя:
.
Таким образом, для первой половины выходных индексов () получаем:
Для второй половины () воспользуемся периодичностью ДПФ половинной длины:
,
, и тем, что
. Подстановка даёт:
Два последних соотношения
называются базовой операцией «бабочка». Она составляет элементарный шаг алгоритма и за один раз вычисляет по одному элементу из каждой половины выходного массива, используя одно комплексное умножение и два сложения.
Рекурсивно применяя ту же процедуру к подзадачам длины , а затем к
и так далее, мы в конечном итоге дойдём до ДПФ длины 1, которое является просто тождественным отображением (
). Глубина рекурсии составляет
. На каждом уровне рекурсии выполняется
бабочек, каждая из которых содержит одно комплексное умножение и два сложения.
Формально время работы удовлетворяет рекуррентному соотношению ,
. По основной теореме о рекуррентности это даёт
, то есть общее число комплексных умножений —
, сложений —
.
Прореживание по частоте (Decimation in Frequency, DIF)
В альтернативном подходе исходная последовательность делится на две половины:
и
для
. Вместо рекурсивного вычисления ДПФ чётных и нечётных индексов здесь сначала с помощью бабочек формируются две промежуточные последовательности, после чего вычисляются
-точечные ДПФ для получения чётных и нечётных частот. Вычислительная сложность остаётся такой же —
.
Итеративная реализация и бит-реверсивная перестановка
Прямая рекурсивная реализация требует дополнительной памяти порядка для хранения промежуточных массивов. На практике используют итеративный алгоритм, работающий «на месте» (
) с
дополнительной памяти (не считая массива входных данных). Алгоритм состоит из двух фаз.
- Бит-реверсивная перестановка. Входной массив переупорядочивается так, что элемент с индексом
переносится в позицию, двоичное представление которой является обратным к двоичному представлению
(длина двоичных слов равна
). Например, для
индекс
переходит в
. После этой перестановки рекурсивные подзадачи оказываются расположенными в памяти последовательно, что позволяет выполнять слияние снизу вверх.
- Послойное вычисление бабочек. Пусть номер слоя
пробегает значения от
до
. На слое
размер блока ДПФ равен
, а полублока —
. Для каждого блока с индексом
и для каждого элемента внутри полублока
выполняется бабочка над парой элементов с индексами
и
:
Здесь — предвычисленный поворачивающий множитель. Внешний цикл идёт по слоям
, затем по блокам, и наконец по позициям внутри полублока. После завершения последнего слоя массив
содержит коэффициенты ДПФ в естественном порядке.
Итеративная схема лежит в основе большинства высокопроизводительных библиотек, включая FFTW и Intel MKL.
Другие алгоритмы БПФ
Помимо алгоритма Кули — Тьюки для степеней двойки, существует ряд методов, ориентированных на произвольные длины .
- Составное
и гнездовые алгоритмы — обобщение Кули — Тьюки на случай
, в том числе для смешанного основания. Рекурсивно сводят ДПФ к ДПФ меньших длин, возможно, разных. Пример — алгоритм Синглтона[1].
- Алгоритм Гуда — Томаса (алгоритм простых множителей) — применяется, когда
со взаимно простыми
. Использует китайскую теорему об остатках для переиндексации, сводя ДПФ к двумерному без дополнительных поворачивающих множителей.
- Алгоритм Винограда (WFTA) — использует свёрточную структуру ДПФ для простых длин и тензорное произведение для составных. Минимизирует число умножений ценой усложнения адресации[1].
- Алгоритм Блюстейна (Chirp Z-Transform) — позволяет вычислить ДПФ произвольной длины
, сводя его к вычислению линейной свёртки, которая затем эффективно вычисляется с помощью БПФ. Для этого используется БПФ длины
, где
— наименьшая степень двойки, не меньшая
[1].
- БПФ для действительных данных — использует симметрию спектра действительного сигнала (
), что позволяет вдвое сократить память и вычисления. Широко распространены упакованные форматы хранения (Hermitian-symmetric).
Выбор конкретного алгоритма зависит от длины , архитектуры вычислителя и допустимой задержки.
Приложения в анализе данных
Быстрое преобразование Фурье занимает важное место в современном анализе данных и машинном обучении. Его способность эффективно переводить временные и пространственные зависимости в частотную область открывает возможности для извлечения признаков, быстрой обработки и построения масштабируемых моделей.
Анализ временных рядов и спектральные признаки
В задачах прогнозирования и классификации временных рядов часто бывает полезно представить сигнал через его частотные компоненты. БПФ позволяет:
- Выделять периодические тренды. Амплитудный спектр
мгновенно выявляет доминирующие частоты, что используется для обнаружения сезонностей, циклических паттернов в финансовых, метеорологических и сенсорных данных.
- Формировать спектральные признаки. На основе БПФ строятся такие признаки, как энергия в заданных частотных полосах, спектральный центроид, спад спектра, коэффициенты кепстра. Они широко применяются в задачах распознавания активности по акселерометру, мониторинга состояния промышленного оборудования и анализа биомедицинских сигналов (ЭЭГ, ЭКГ).
- Детекция аномалий с помощью спектральных остатков. Метод Spectral Residual[1] использует БПФ для выделения «неожиданных» компонент во временном ряде, что позволяет эффективно находить выбросы и аномалии в потоковых данных без обучения.
Быстрая свёртка в машинном обучении
Свёрточные операции — основа архитектур свёрточных нейронных сетей (CNN). Для больших ядер свёртки или при работе с одномерными сигналами высокой размерности прямые вычисления становятся затратными. БПФ даёт альтернативный путь: дополнив последовательности нулями до длины (где
— длины исходных векторов), линейную свёртку можно вычислить как
где — дополненные нулями сигналы, а
— поэлементное умножение. Это не только ускоряет вычисления на CPU и GPU (особенно с помощью таких библиотек, как cuFFT), но и позволяет реализовать свёртку с очень большим рецептивным полем, что полезно в задачах обработки аудио и длинных последовательностей. Аналогично, взаимная корреляция через БПФ используется для быстрого сопоставления шаблонов, например, при поиске объекта на изображении.
Признаки для аудио- и речевой аналитики
Практически все стандартные признаки в обработке речи и музыки опираются на БПФ:
- Мел-частотные кепстральные коэффициенты (MFCC). Вычисление мел-спектрограммы и последующего дискретного косинусного преобразования начинается с БПФ коротких кадров сигнала. Эти коэффициенты служат входом для систем распознавания речи, идентификации диктора и музыкальных рекомендательных систем.
- Спектрограммы как изображения. Во многих нейросетевых подходах (например, SoundNet, VGGish) аудиосигнал преобразуется в логарифмическую мел-спектрограмму, которая затем подаётся на вход CNN. Сама спектрограмма строится с помощью БПФ, и её качество напрямую влияет на точность классификации.
Обработка изображений и компьютерное зрение
Двумерное БПФ, получаемое последовательным одномерным БПФ по строкам и столбцам, — мощный инструмент в арсенале дата-сайентиста:
- Фильтрация и улучшение изображений. Частотная фильтрация (низкочастотная для подавления шума, высокочастотная для выделения контуров) выполняется элементарным умножением спектра на маску, после чего применяется обратное БПФ. Это стандартный этап предобработки в задачах распознавания.
- Ускорение глубоких сетей. Некоторые исследовательские работы предлагают переносить свёртки внутрь нейросетей в частотную область, что может снизить вычислительную сложность для слоёв с большими фильтрами[1].
- Поиск по образцу и регистрация. Фазовая корреляция, основанная на БПФ, позволяет находить сдвиг между двумя изображениями с субпиксельной точностью, что используется при совмещении снимков, отслеживании объектов и в задачах оптического потока.
Другие направления
- Умножение многочленов и больших чисел. Умножение многочленов степени
эквивалентно свёртке коэффициентов и выполняется за
с помощью БПФ. Это находит применение в алгоритмах длинной арифметики и криптографии, а также при вычислении ядерных методов (полиномиальные ядра).
- Решение уравнений в частных производных. Спектральные методы на основе БПФ являются основным инструментом для моделирования турбулентности, прогноза погоды и физических симуляций, где требуется быстрое решение периодических задач.
- Беспроводная связь. OFDM-модуляция в Wi-Fi, LTE, 5G реализуется с помощью БПФ/ОБПФ, что обеспечивает эффективную передачу данных, однако это скорее область передачи данных, чем их анализа.
БПФ продолжает оставаться активной областью исследований: появляются разреженные БПФ (sparse FFT) для сигналов с небольшим числом ненулевых частот, квантовые алгоритмы БПФ и высокоэффективные реализации для графических процессоров.
Смотрите также
- Дискретное преобразование Фурье
- Алгоритм Кули — Тьюки
- Алгоритм Герцеля
- Оконное преобразование Фурье
- Свёртка (математический анализ)
- Цифровая обработка сигналов
- Теорема Котельникова
- FFTW

