Transformada ràpida de Walsh-Hadamard

De testwiki
Salta a la navegació Salta a la cerca
La transformada ràpida de Walsh-Hadamard aplicada a un vector de longitud 8.

En matemàtiques computacionals, la transformada ràpida de Walsh-Hadamard ordenada de Hadamard (amb acrònim anglès FWHTh) és un algorisme eficient per calcular la transformada de Walsh-Hadamard (WHT). Una implementació ingènua del WHT de l'ordre n=2m tindria una complexitat computacional de O(n2). El FWHT h només requereix nlogn sumes o restes.

El FWHT h és un algorisme de dividir i conquerir que trenca recursivament un WHT de mida n en dos WHT més petits de mida n/2.[1] Aquesta implementació segueix la definició recursiva de la 2m×2m matriu de Hadamard Hm: [2]

Hm=12(Hm1Hm1Hm1Hm1).

El 1/2 els factors de normalització de cada etapa es poden agrupar o fins i tot ometre.

La transformació ràpida de Walsh-Hadamard ordenada per seqüència, també coneguda com a transformada ràpida de Walsh-Hadamard, FWHTw, s'obté calculant la FWHT h com a anterior, i després reordenant les sortides.[3]

Una implementació senzilla i ràpida no recursiva de la transformada de Walsh-Hadamard es desprèn de la descomposició de la matriu de transformada de Hadamard com Hm=Am, on A és m -essa arrel de Hm.[4]

Transformada Fast Walsh–Hadamard dela funció lògica 1010 0110.

Exemple de codi Python:

La funció original pot ésser expressada mitjançant el seu espectre de Walch com un polinomi aritmètic.
def fwht(a) -> None:
 '''In-place Fast Walsh–Hadamard Transform of array a.'''
 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 /= 2
 h *= 2

Referències

Plantilla:Referències

  1. Plantilla:Ref-publicació
  2. Plantilla:Ref-web
  3. Plantilla:Ref-web
  4. Yarlagadda and Hershey, "Hadamard Matrix Analysis and Synthesis", 1997 (Springer)