Articulo de referencia

Transformación rápida de Walsh-Hadamard

La transformada rápida de Walsh-Hadamard aplicada a un vector de longitud 8 Ejemplo para el vector de entrada (1, 0, 1, 0, 0, 1, 1, 0) En matemáticas computacionales, la transfo...

La transformada rápida de Walsh-Hadamard aplicada a un vector de longitud 8
Ejemplo para el vector de entrada (1, 0, 1, 0, 0, 1, 1, 0)

En matemáticas computacionales, la transformada rápida de Walsh-Hadamard ordenada por Hadamard ( FWHT h ) es un algoritmo eficiente para calcular la transformada de Walsh-Hadamard (WHT). Una implementación ingenua de la WHT de ordennorte=2metro{\displaystyle n=2^{m}}tendría una complejidad computacional de O(norte2{\displaystyle n^{2}}) . El FWHT h solo requierenorteregistronorte{\displaystyle n\log n}sumas o restas.

El FWHT h es un algoritmo de divide y vencerás que descompone recursivamente un WHT de tamañonorte{\displaystyle n}en dos WHT más pequeños de tamañonorte/2{\displaystyle n/2}. [ 1 ] Esta implementación sigue la definición recursiva de la2metro×2metro{\displaystyle 2^{m}\times 2^{m}}Matriz de HadamardHmetro{\displaystyle H_{m}}:

Hmetro=12(Hmetro1Hmetro1Hmetro1Hmetro1).{\displaystyle H_{m}={\frac {1}{\sqrt {2}}}{\begin{pmatrix}H_{m-1}&H_{m-1}\\H_{m-1}&-H_{m-1}\end{pmatrix}}.}

El1/2{\displaystyle 1/{\sqrt {2}}}Los factores de normalización para cada etapa pueden agruparse o incluso omitirse.

La transformada de Walsh-Hadamard rápida, FWHT w , ordenada en secuencia , también conocida como ordenada por Walsh, se obtiene calculando la FWHT h como se indicó anteriormente y luego reorganizando las salidas.

Una implementación simple, rápida y no recursiva de la transformada de Walsh-Hadamard se obtiene a partir de la descomposición de la matriz de la transformada de Hadamard comoHmetro=Ametro{\displaystyle H_{m}=A^{m}}, donde A es la raíz m -ésima deHmetro{\displaystyle H_{m}}. [ 2 ]

Código de ejemplo en Python

import math def fwht ( a ) -> None : """Transformación rápida de Walsh-Hadamard in situ del array a.""" assert math . log2 ( len ( a )) . is_integer (), "la longitud de a es una potencia de 2" h = 1 while h < len ( a ): # realizar 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 # normalizar e incrementar a /= math . sqrt ( 2 ) h *= 2

Véase también

Referencias

  1. Fino, BJ; Algazi, VR (1976). "Tratamiento matricial unificado de la transformada rápida de Walsh-Hadamard". IEEE Transactions on Computers . 25 (11): 1142– 1146. doi : 10.1109/TC.1976.1674569 . S2CID 13252360 . 
  2. Yarlagadda y Hershey, "Análisis y síntesis de la matriz de Hadamard", 1997 (Springer)
  • Charles Constantine Gumas, Con un siglo de antigüedad, la rápida transformada de Hadamard demuestra su utilidad en las comunicaciones digitales.