So, I'm trying to cook up a wavelet package for you guys. I want to use
it to illustrate "notation as a tool of thought," and also so everyone
has wavelets with which to wavelet things.
Wavelets have multiple levels, and calculating them is a recursive
process on filtered values of the original time series. So, when you
calculate level 1 wavelets, you get the level 1 wavelet, plus the
filtered y at level 1. To calculate level 2, you operate on the
decimated y, etc.
At each level, this is done with a dyad called dwt, which has x as the
type of wavelet called, and y as the timeseries; dwt returns the next
level y, and the next level wavelet. So I do it with this verb:
dwtL=: 4 : 0
'lev k'=.x
'yn wn'=. k&dwt y
wn; (((<:lev);k)&dwtL^:(lev>1) yn)
)
called something like:
'w4 w3 w2 w1 y4'=.(4;'db6') dwtL yy
The boxing is pretty necessary for simple inversion, which can be
accomplished with the / adverb.
I think this is pretty clear code, but all the parenthesis and machinery
of temporary variables kind of bug me. Is there some better way to
accomplish the same thing without the temp variables, while retaining
some clarity of intention? Perhaps by using something which isn't the
power conjunction? Power is my "go to" loop when I can't do it with / or
\, but maybe it isn't the best thing to use (performance is good FWIIW).
-SL
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm