В контексте алгоритмов быстрого преобразования Фурье, бабочка - это часть вычисления, которая объединяет результаты меньшего дискретного преобразования Фурье (ДПФ) в большее ДПФ, или наоборот (разбиение большего ДПФ на частичные преобразования). Название «бабочка» происходит от формы диаграммы потока данных в случае radix-2, как описано ниже. Считается, что самым ранним появлением этого термина в печати является технический отчет 1969 MIT. Такую же структуру можно найти в алгоритме Витерби, который используется для поиска наиболее вероятной последовательности скрытых состояний.
Чаще всего термин «бабочка» появляется в контексте алгоритма БПФ Кули – Тьюки, который рекурсивно разбивает ДПФ составного размер n = rm в r меньших преобразований размера m, где r - "основание" преобразования. Эти более мелкие ДПФ затем объединяются с помощью бабочек размера r, которые сами являются ДПФ размера r (выполняются m раз на соответствующих выходных данных суб-преобразований), предварительно умноженные на корни из единицы (известные как факторы поворота ). (Это случай «прореживания во времени»; можно также выполнить шаги в обратном порядке, известные как «прореживание по частоте», когда сначала появляются бабочки, а затем умножаются на множители твиддла. См. Также Кули– Статья по БПФ Тьюки.)
В случае алгоритма Кули – Тьюки с основанием 2, бабочка - это просто ДПФ размера 2, которое принимает два входа (x 0, x 1) (соответствующие выходные данные двух суб-преобразований) и дает два выходных сигнала (y 0, y 1) по формуле (не включая множителей тиддла ):
Если нарисовать диаграмму потока данных для этой пары операций, (x 0, x Линии от 1) до (y 0, y 1) пересекаются и напоминают крылья бабочки, отсюда и название (см. Также иллюстрацию справа).
БПФ с децимацией во времени по основанию 2 разбивает ДПФ длиной N на два ДПФ с длиной N / 2, за которыми следует этап комбинирования, состоящий из множества операций бабочки.Более конкретно, прореживание по основанию 2 - своевременный алгоритм БПФ на n = 2 входах относительно примитивного корня n-й степени из единицы полагается на O (n log 2 n) бабочек в форме:
, где k - целое число, зависящее от вычисляемой части преобразования. В то время как соответствующее обратное преобразование может быть выполнено математически путем замены ω на ω (и, возможно, умножения на общий масштабный коэффициент, в зависимости от соглашения о нормализации), можно также напрямую инвертировать бабочек:
соответствующий алгоритму БПФ с децимацией по частоте.
Бабочка также может использоваться для улучшения случайности больших массивов частично случайных чисел, приводя каждое 32- или 64-битное слово в причинный контакт с каждым другим словом через желаемое алгоритм хеширования, так что изменение любого одного бита имеет возможность изменить все биты в большом массиве.
Это вычисление называется «бабочкой»