Implementaciones de transformación discretas (inversas) de Haar (2D)

7

Estoy interesado en implementaciones de la transformación de Haar y su inversa, de modo que cuando se componen siempre resultan en la operación de identidad. Mis entradas son ordinales discretos dentro de un rango dado, y necesito que la salida de la transformación de Haar sea un número ordinal (o de punto fijo) discretamente similar.

He trabajado sobre la base de que si mi señal de entrada consta de muestras distribuidas uniformemente en el rango y, al igual que mi señal transformada, entonces, en principio, mi señal original debería ser reproducida perfectamente por el pelo inverso0..(2n1)

He incursionado en esta implementación (Matlab) usando GNU Octave:

http://people.sc.fsu.edu/~jburkardt/m_src/haar/haar.html

Que usa valores de doble precisión ... obligándome a usar round () para establecer una representación discreta de los datos transformados para ajustar la representación transformada en el mismo espacio de estado que el original. Como era de esperar, descubrí que necesitaba usar round () nuevamente para la salida de la transformación inversa.

Probablemente no sorprenda que round (haar_2d_inverse (round (haar_2d (signal)))) no sea exactamente la función de identidad para la mayoría de los valores de señal ... Como anécdota, generalmente hay algunos errores out-by-one en el señal reconstruida, que parece más o menos simétrica (+1 o -1 en un pequeño número de muestras reconstruidas) y esto parece casi independiente de la elección de n.

Lo que me gustaría saber es si hay implementaciones 'mejores' de haar_2d y haar_2d_inverse que funcionan en muestras ordinales. ¿Son las anomalías la consecuencia de la implementación de Haar en sí o la forma en que apliqué round () en la etapa intermedia? Si es esto último, ¿puedo rectificar esto escalando antes de redondear?

aSteve
fuente
Parece que necesitarías matemáticas de punto fijo, en lugar de tratar de aproximarlo con punto flotante.
Datageist
Sospecho que tienes razón, datageist, pero esa dependencia de root-2 es relevante y podría hacer que esto sea complicado. Me sorprende que no pueda encontrar una implementación de muestra con una búsqueda en Google.
aSteve

Respuestas:

1

Creo que en 2D Haar, no es necesario, si la transformación se aplica simultáneamente en ambas direcciones. Sería de la forma , que solo requiere la implementación de un punto fijo con el punto Q elegido en función del número de niveles. Había usado esto para implementar Haar en C para sistemas integrados, y funciona sin errores de redondeo / truncamiento.2a+b+c+d2

Nota:
Mi representante no tiene 50 años, así que publico como respuesta. Si alguien puede moverlo a los comentarios, sería bueno.
tpb261
fuente