Введение

Бабочки в алгоритмах БПФ

В контексте алгоритмов быстрого преобразования Фурье (БПФ) бабочка – это часть вычисления, объединяющая результаты меньших дискретных преобразований Фурье (ДПФ) в большее ДПФ или, наоборот, разбивающая большее ДПФ на подпреобразования. Название «бабочка» происходит от формы диаграммы потока данных в случае радикса 2, как описано ниже. Считается, что первое упоминание этого термина в печати относится к техническому отчету MIT 1969 года. Та же структура также встречается в алгоритме Витерби, используемом для поиска наиболее вероятной последовательности скрытых состояний. Чаще всего термин «бабочка» используется в контексте алгоритма Кули–Тьюки БПФ, который рекурсивно разбивает ДПФ составного размера n = rm на r меньших преобразований размера m, где r – «радикс» преобразования. Эти меньшие ДПФ затем объединяются посредством бабочек размера r, которые сами являются ДПФ размера r (выполняемыми m раз над соответствующими выходами подпреобразований) и предварительно умножаются на корни из единицы (известные как факторы поворота). (Это случай «децимации по времени»; шаги также можно выполнять в обратном порядке, известном как «децимация по частоте», где бабочки выполняются первыми и затем умножаются на факторы поворота. Подробнее см. статью о БПФ Кули–Тьюки.)

Другие применения

Бабочка также может быть использована для повышения случайности больших массивов частично случайных чисел, обеспечивая причинно-следственную связь каждого 32- или 64-битного слова со всеми остальными словами посредством выбранного алгоритма хеширования, так что изменение любого бита может повлечь изменение всех битов в массиве.