Estou interessado em implementações da transformação de Haar, e sua inversa, de modo que, quando compostas, sempre resultem na operação de identidade. Minhas entradas são ordinais discretas dentro de um determinado intervalo - e eu preciso que a saída da transformação Haar seja igualmente semelhante a números ordinais (ou pontos fixos) discretos.
Trabalhei com base no fato de que, se meu sinal de entrada consistir em amostras distribuídas uniformemente no intervalo e, assim como meu sinal transformado, em princípio, meu sinal original deve ser reproduzido perfeitamente pelo haar inverso.
Eu brinquei com esta implementação (Matlab) usando o GNU Octave:
http://people.sc.fsu.edu/~jburkardt/m_src/haar/haar.html
Que usa valores duplos de precisão ... me forçando a usar round () para estabelecer uma representação discreta dos dados transformados, de modo a ajustar a representação transformada no mesmo espaço de estado que o original. Sem surpresa, eu achei que precisava usar round () novamente para a saída da transformação inversa.
Provavelmente, não é de surpreender que round (haar_2d_inverse (round (haar_2d (sinal)))) não seja a função de identidade da maioria dos valores de sinal ... Anedoticamente, normalmente existem alguns erros de um por um. sinal reconstruído - que parece aproximadamente simétrico (+1 ou -1 em um pequeno número de amostras reconstruídas) e isso parece quase independente na escolha de n.
O que eu gostaria de saber é se existem implementações 'melhores' de haar_2d e haar_2d_inverse que funcionam em amostras ordinais? As anomalias são consequência da própria implementação do Haar ou da maneira como apliquei round () no estágio intermediário? Neste último caso, posso corrigir isso redimensionando antes de arredondar?