La transformada rápida de Walsh

Observemos que la transformada de Walsh bidimensional, puede calcularse aplicando repetidamente la transformada de Walsh unidimensional:

Un algoritmo que calcule la transformada de Walsh unidimensional tiene de complejidad O(N2). Existe un algoritmo "rápido" que calcula dicha transformada en O(N log N) operaciones (donde N=2k).

Para conseguir tal reducción, hemos de darnos cuenta que si escribimos N=2M entonces

W(u)=1/2 ( Wp(u) + Wi(u) )

donde

y

Además, se cumple que 

W(u+M)=1/2 ( Wp(u) - Wi(u) )

siendo  u=0,1,2,..., M-1.

Por tanto, para conocer la transformada de Walsh, W(u), para todo u, sólo tenemos que calcular Wp(u)  y Wi(u) para u=0,1,2,...,N/2-1. Si volvemos a aplicar el mismo razonamiento para M=2L, sólo tendremos que calcular el valor de Wp(u) y de Wi(u) para u=0,1,2,...,N/4-1, y así sucesivamente.

Por ejemplo, si N=16, debemos calcular Wp(u) y de Wi(u) para u=0,1,2,3,4,5,6,7. Observemos que Wp(u) utiliza los valores {f(0),f(2),f(4),f(6)} y Wi(u) los valores {f(1),f(3)f(5),f(7)}.

Por tanto, calcular Wp(u) es lo mismo que calcular la transformada de Wals de una función f1 de 4 valores tal que f1(0)=f(0), f1(1)=f(2), f1(2)=f(4), f1(3)=f(6). Y de forma análoga ocurre con    Wi(u).

La transformada de Walsh de f1  se calcula, hallando el valor de Wp(u) y de Wi(u) para u=0,1. Pero de nuevo, Wp(u) consiste en la transformada de Walsh de una función f2 de 2 valores tal que f2(0)=f1(0)=f(0) y f2(1)=f1(2)=f(4). Y de forma análoga ocurre con    Wi(u).

Este proceso puede verse también en forma matricial: la matriz W de Wals de dimensión N=2k puede descomponerse en k matrices

W=A1A2...Ak

de tal forma que Ai es una matriz sparse (con muchos ceros).

Ejercicio:

 

Para practicar: