Implementações de transformação Discreta (Inversa) de Haar (2D)

7

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.0..(2n1)

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?

aSteve
fonte
Parece que você precisaria de matemática de ponto fixo, em vez de tentar aproximar-se de ponto flutuante.
datageist
Eu suspeito que você esteja certo - datagrafista -, mas essa dependência da raiz 2 é relevante e pode tornar isso complicado. Estou surpreso por não encontrar uma implementação de exemplo com uma pesquisa no google.
precisa saber é o seguinte

Respostas:

1

Eu acho que em 2D Haar, não é necessário, se a transformação for aplicada simultaneamente nas duas direções. Seria da forma de , que requer apenas implementação de ponto fixo, com o ponto Q sendo escolhido com base no número de níveis. Eu tinha usado isso para implementar o Haar em C para sistemas embarcados e funciona sem erros de arredondamento / truncamento.2a+b+c+d2

Nota:
Meu representante não é 50, então postando como resposta. Se alguém puder movê-lo para os comentários, seria bom.
tpb261
fonte