Швидке перетворення Волша–Адамара


Швидке перетворення Волша–Адамара (ШПВА) — це ефективний алгоритм для обчислення перетворення Волша–Адамара (ПВА). Наївна реалізація ПВА порядку матиме обчислювальну складність O() . ШПВА вимагає лише додавань або віднімань.
ШПВА — це алгоритм типу «розділяй і володарюй», який рекурсивно розбиває ПВА розміру на два менших ПВА розміром .[1] Ця реалізація відповідає рекурсивному визначенню матриці Адамара розміром :
Коефіцієнти нормалізації для кожного етапу можуть бути згруповані разом або навіть пропущені.
Упорядковане за послідовністю , також відоме як упорядковане за Волшем ШПВА, отримується шляхом обчислення ШПВА, як зазначено вище, з наступним перегруповуванням виходів.
Проста швидка нерекурсивна реалізація перетворення Волша–Адамара випливає з розкладання матриці перетворення Адамара як , де A — корінь m -го числа .[2]
import math
def fwht(a) -> None:
"""In-place Fast Walsh–Hadamard Transform of array a."""
assert math.log2(len(a)).is_integer(), "length of a is a power of 2"
h = 1
while h < len(a):
# perform FWHT
for i in range(0, len(a), h * 2):
for j in range(i, i + h):
x = a[j]
y = a[j + h]
a[j] = x + y
a[j + h] = x - y
# normalize and increment
a /= math.sqrt(2)
h *= 2
- ↑ Fino, B. J.; Algazi, V. R. (1976). Unified Matrix Treatment of the Fast Walsh–Hadamard Transform. IEEE Transactions on Computers. 25 (11): 1142—1146. doi:10.1109/TC.1976.1674569.
- ↑ Yarlagadda, R. K. Rao; Hershey, John E. (1997). Hadamard Matrix Analysis and Synthesis. Boston, MA: Springer US. doi:10.1007/978-1-4615-6313-6. ISBN 978-1-4613-7898-3.
- Charles Constantine Gumas, A century old, the fast Hadamard transform proves useful in digital communications