Найти статью
Алгоритм Гуда — Томаса
Алгоритм Гуда — Томаса — алгоритм вычисления быстрого преобразования Фурье, применяющийся к последовательностям, длина которых равна произведению двух взаимно простых чисел[1][2].
Алгоритм Гуда — Томаса не следует путать с алгоритмом Кули — Тьюки, где делители длины преобразования не обязаны быть взаимно простыми. Алгоритм Гуда — Томаса ограничен этим условием, а также задействует более сложную схему переиндексации, чем алгоритм Кули — Тьюки, но при этом не требует промежуточного умножения на комплексные множители и потому несколько проще с точки зрения вычислений[3][4].
Построение алгоритма
Для произвольного натурального числа дискретным преобразованием Фурье комплексного вектора , где , называется комплексный вектор , где , компоненты которого задаются формулой:
где .
Пусть , где и взаимно просты. Пусть также и — новые входные индексы, задающиеся соотношениями[5]:
Отсюда по китайской теореме об остатках и соотношению Безу следует, что существуют такие целые числа и , что
и Аналогично, пусть и — новые выходные индексы, задающиеся соотношениями
Тогда
С использованием обозначений
исходная формула принимает вид
то есть произошёл переход от одномерного преобразования длины к двумерному преобразованию размера . При этом число умножений и число сложений стало равно примерно [6].
Современная реализация
- Разделение на потоки. Каждый вычислительный блок обрабатывает свою строку/столбец матрицы. Игровые и профессиональные GPU (такие как архитектуры NVIDIA Ampere, Hopper или Ada Lovelace) используют модель памяти с высокой пропускной способностью[7].
- Использование
cuFFTиVkFFT.Хотя для длин, являющихся степенью двойки, применяются традиционные алгоритмы (Кули — Тьюки), современные программные библиотеки включают алгоритмы разложения на взаимно простые множители. К примеру, фреймворк VkFFT отслеживает и оптимизирует доступ к памяти без банковских конфликтов, поддерживая эффективные длины последовательностей[8]. - Векторизация в малых полях. Для специфических научных вычислений используются реализации, где базовые длины вроде 3, 5, 7 или 13 трансформируются с помощью разделения по блокам (thread block level) и вычисляются непосредственно в быстрой разделяемой памяти[9].
Примечания
- ↑ ДИСКРЕТНОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ И ЕГО БЫСТРЫЕ АЛГОРИТМЫ - Современные наукоемкие технологии (рус.). top-technologies.ru. Дата обращения: 21 мая 2026.
- ↑ Беспалов М. С. INDEXING IN THE GOOD–THOMAS FAST FOURIER TRANSFORM ALGORITHM // Computational Mathematics and Mathematical Physics. — 2025-12-15. — Т. 65, вып. 3. — ISSN 3034-5332.
- ↑ Блейхут, 1989, с. 141.
- ↑ БЫСТРЫЕ АЛГОРИТМЫ ДИСКРЕТНОГО ПРЕОБРАЗОВАНИЯ ФУРЬЕ. КиберЛенинка. Дата обращения: 21 мая 2026.
- ↑ Блейхут, 1989, с. 142.
- ↑ Блейхут, 1989, с. 143.
- ↑ Application of the GPU Tensor Core in EEG Signal Processing: A Case on Independent Component Analysis.
- ↑ GitHub - DTolm/VkFFT: Vulkan/CUDA/HIP/OpenCL/Level Zero/Metal Fast Fourier Transform library (англ.). GitHub. Дата обращения: 21 мая 2026.
- ↑ Big Prime Field FFT on the GPU
Литература
- Блейхут, Р.. Быстрые алгоритмы цифровой обработки сигналов. — М.: Мир, 1989. — 448 с.