合成すると常に恒等演算が行われるように、Haar変換とその逆の実装に興味があります。私の入力は、指定された範囲内の離散的な序数です。Haar変換の出力も、同様に離散的な序数(または固定小数点)の数値にする必要があります。
私は、入力信号が範囲内に均一に分散されたサンプルで構成されている場合に基づいて作業しました そして、私の変換された信号もそうです、そしてそれで、原則として、私の元の信号は逆ハールによって完全に再現されるべきです。
私は、GNU Octaveを使用してこの(Matlab)実装に手を加えました。
http://people.sc.fsu.edu/~jburkardt/m_src/haar/haar.html
これは倍精度値を使用します...変換された表現を元の状態空間と同じ状態空間に合わせるために、round()を使用して変換されたデータの離散表現を確立するように強制します。当然のことながら、逆変換の出力に対して再びround()を使用する必要があることがわかりました。
round(haar_2d_inverse(round(haar_2d(signal))))がほとんどの信号値の恒等関数ではないことは、おそらく驚くことではありません...事例では、通常、再構成された信号-ほぼ対称に見え(少数の再構成されたサンプルで+1または-1)、これはnの選択にほとんど依存しないようです。
私が知りたいのは、順序サンプルで機能するhaar_2dおよびhaar_2d_inverseの「より良い」実装があるかどうかです。異常は、Haar実装自体の結果なのか、中間段階でround()を適用した方法なのでしょうか?後者の場合、丸める前にスケーリングしてこれを修正できますか?