Метеликова діаграма
У контексті алгоритмів швидкого перетворення Фур'є «метелик» — це елемент обчислення, що об'єднує результати менших дискретних перетворень Фур'є (ДПФ) для створення більших ДПФ або, навпаки, розкладає більші ДПФ на менші. Назва «метелик» походить від форми діаграми потоку даних для другого степеня, як описано нижче.[1] Вважається, що цей термін вперше опубліковано у технічному звіті MIT за 1969 рік.[2][3] Подібна структура зустрічається й у алгоритмі Вітербі, який використовується для пошуку найбільш імовірної послідовності прихованих станів.
Термін «метелик» найчастіше використовується у контексті алгоритму ШПФ Кулі–Тьюкі, який рекурсивно розбиває ДПФ розмірності на менших перетворень розмірності , де є «основою» перетворення. Ці менші ДПФ потім об'єднуються за допомогою метеликів розмірності , що фактично є ДПФ розмірності (і так разів на відповідних виходах підперетворень), попередньо помножених на корені з одиниці (відомі як коефіцієнти обертання[en]). Це описує процес «децимації в часі». Можна також виконати кроки у зворотному порядку, що відоме як «децимація в частоті», де метелики застосовуються спочатку, а потім множаться на обертальні коефіцієнти. Додаткову інформацію можна знайти у статті про Кулі–Тьюкі ШПФ.
У випадку алгоритму Кулі–Тьюкі за основою 2 метелик є просто ДПФ основи 2, який приймає два входи — виходи двох підперетворень — і перетворює їх на два вихідні значення за формулою (без урахування коефіцієнтів обертання[en]):
Якщо зобразити діаграму потоку даних для цієї пари операцій, що перетворюють (, ) на (, ), лінії будуть перетинатися і нагадуватимуть крила метелика . Звідси і походить назва (див. також ілюстрацію праворуч).
Щобільше, алгоритм БПФ з проріджуванням у часі з основою 2 на вхідних даних, що використовує первинний корінь -го ступеня з одиниці залежить від () метеликів виду:
де — ціле число, що залежить від частини перетворення, яка обчислюється. Водночас відповідне зворотне перетворення можна математично виконати, замінивши на (і, можливо, помноживши на загальний масштабний коефіцієнт, залежно від умов нормалізації). Також можна безпосередньо інвертувати метеликів:
що відповідає алгоритму ШПФ з децимацією по частоті.
Метелик також застосовується для покращення випадковості великих масивів частково випадкових чисел, встановлюючи причинно-наслідковий зв'язок між кожним 32- або 64-бітним словом і всіма іншими словами за допомогою вибраного алгоритму хешування. Це гарантує, що зміна будь-якого біта призводить до зміни всіх бітів у великому масиві.[4]
- ↑ Alan V. Oppenheim, Ronald W. Schafer, and John R. Buck, Discrete-Time Signal Processing, 2nd edition (Upper Saddle River, NJ: Prentice Hall, 1989)
- ↑ C. J. Weinstein (21 листопада 1969). Quantization Effects in Digital Filters (Звіт). MIT Lincoln Laboratory. с. 42. Архів оригіналу за 11 лютого 2015. Процитовано 10 лютого 2015.
This computation, referred to as a 'butterfly'
- ↑ Cipra, Barry A. (4 червня 2012). FFT and Butterfly Diagram. mathoverflow.net. Процитовано 10 лютого 2015.
- ↑ Press, WH; Teukolsky, SA; Vetterling, WT; Flannery, BP (2007), Section 7.2 Completely Hashing a Large Array, Numerical Recipes: The Art of Scientific Computing (вид. 3rd), New York: Cambridge University Press, ISBN 978-0-521-88068-8, архів оригіналу за 11 серпня 2011, процитовано 13 серпня 2011