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 inverso
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?