Add reverse haar wavelet transform and tests
parent
b7dc7296db
commit
8ec695332a
extra/math/haar
|
@ -0,0 +1,2 @@
|
|||
Slava Pestov
|
||||
Aaron Schaefer
|
|
@ -0,0 +1,5 @@
|
|||
USING: math.haar tools.test ;
|
||||
IN: math.haar.tests
|
||||
|
||||
[ { 3 2 -1 -2 3 0 4 1 } ] [ { 7 1 6 6 3 -5 4 2 } haar ] unit-test
|
||||
[ { 7 1 6 6 3 -5 4 2 } ] [ { 3 2 -1 -2 3 0 4 1 } rev-haar ] unit-test
|
|
@ -1,15 +1,30 @@
|
|||
! Haar wavelet transform -- http://dmr.ath.cx/gfx/haar/
|
||||
USING: sequences math kernel splitting grouping columns ;
|
||||
! Copyright (c) 2008 Slava Pestov, Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: assocs columns grouping kernel math math.statistics math.vectors
|
||||
sequences ;
|
||||
IN: math.haar
|
||||
|
||||
! Haar Wavelet Transform -- http://dmr.ath.cx/gfx/haar/
|
||||
|
||||
<PRIVATE
|
||||
|
||||
: averages ( seq -- seq )
|
||||
[ first2 + 2 / ] map ;
|
||||
[ mean ] map ;
|
||||
|
||||
: differences ( seq averages -- differences )
|
||||
>r 0 <column> r> [ - ] 2map ;
|
||||
[ 0 <column> ] dip v- ;
|
||||
|
||||
: haar-step ( seq -- differences averages )
|
||||
2 group dup averages [ differences ] keep ;
|
||||
|
||||
: rev-haar-step ( seq -- seq )
|
||||
halves [ v+ ] [ v- ] 2bi zip concat ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
: haar ( seq -- seq )
|
||||
dup length 1 <= [ haar-step haar prepend ] unless ;
|
||||
|
||||
: rev-haar ( seq -- seq )
|
||||
dup length 2 > [ halves swap rev-haar prepend ] when rev-haar-step ;
|
||||
|
||||
|
|
Loading…
Reference in New Issue