My apologies guys: I should have included the other bits, but I thought something might pop out immediately, and I didn't want to spam up the list with lots of code. Adverbs and conjunctions, I am still a bit intimidated by; wouldn't have thought of that. FWIIW, I have to think about higher dimensions: I think you'd need different verbs for images. For images, you'll almost certainly want to use "max overlap DWT" which takes arbitrary size inputs.

Interesting, small use case (the output may or may not be informative, but it is correct):

yvals =. ((0 1 2 _1 #~ 4 %~ ]) + (1 o. i.) + 1 o. (o. 1) %~ i.) 256 NB. this number must be 2^N
wavelets =. (4;'db4')dwtL yvals

dwtL=: 4 : 0
 'lev k'=.x
 'yn wn'=. k&dwt y
 wn; (((<:lev);k)&dwtL^:(lev>1) yn)
)


Here is what I have for dwt:

oddx=: ] {~ ([: (] #~ 0 1 $~ #) [: i. [: # ]) -/ [: i. [: # [
dwt=: 4 : 0
'hpf lpf'=.wdict x
 yvals=. hpf&oddx y
(yvals +/ . * lpf);(yvals +/ . * hpf)
)

wdict is a bunch of constants for the different kinds of wavelets, which I will abbreviate to just the Daubechies wavelets:


NB. get the high pass from the low pass, return a box list of both
HpLp =: ] ;~ |. * _1 ^ [: i. #

wdict=: 3 : 0
 select. y
  case. 'db4' do.
HpLp 0.482962913144534, 0.836516303737808, 0.224143868042013, _0.12940952255126
  case. 'db6' do.
HpLp 0.332670552950083, 0.806891509311093, 0.459877502118491, _0.135011020010255, _0.0854412738820267, 0.0352262918857096
  case. 'db8' do.
HpLp 0.230377813307443, 0.714846570548406, 0.630880767935879, _0.0279837694166834, _0.187034811717913, 0.0308413818353661, 0.0328830116666778, _0.0105974017850021
  case. 'db16' do.
HpLp 0.0544158422431049, 0.312871590914303, 0.67563073629729, 0.585354683654191, _0.0158291052563816, _0.28401554296157, 0.0004724845739124, 0.128747426620484, _0.0173693010018083, _0.0440882539307952, 0.0139810279173995, 0.0087460940474061, _0.0048703529934518, _0.000391740373377, 0.0006754494064506, _0.0001174767841248
 end.
)


>It's indeed difficult to suggest things if we can not try it out.
Conceptually, I'd say things which don't change in one  invocation are prime
candidates for being changed into adverb arguments.
Eg. fixing thewavelet type as "u" would eliminate the need for boxes in
the left argument, something along the lines of:

dwtL2=: 1 : 0
'yn wn'=. u&dwt y
wn; ((<:x)&dwtL2^:(x>1) yn)
)


----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to