Mercurial > hg > constant-q-cpp
diff yeti/cqt.yeti @ 13:e2372a642b45
Comments
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 28 Oct 2013 17:16:55 +0000 |
parents | d7af615c2cc1 |
children | 26d61c9f1f40 |
line wrap: on
line diff
--- a/yeti/cqt.yeti Fri Oct 25 17:39:35 2013 +0100 +++ b/yeti/cqt.yeti Mon Oct 28 17:16:55 2013 +0000 @@ -54,20 +54,18 @@ done frames; done [0..octaves-1]; - // cqblocks is now a list<list<matrix>>. Each top-level list + // The cqblocks list is a list<list<matrix>>. Each top-level list // corresponds to an octave, from highest to lowest, each having // twice as many elements in its list as the next octave. The // sub-lists are sampled in time with an effective spacing of // fftSize * 2^(octave-1) audio frames, and the matrices are row // vectors with atomsPerFrame * binsPerOctave complex elements. - - - //!!! The comment below isn't true -- this is based on traditional - // cqt -- the atom hop structure for this version is different - // though so review later on - - // Each (2^(octaves-1) * fftHop) input frames gives us an output - // structure conceptually like this: + // + // *** + // + // In a typical constant-Q structure, each (2^(octaves-1) * + // fftHop) input frames gives us an output structure conceptually + // like this: // // [][][][][][][][] <- fftHop frames per highest-octave output value // [][][][][][][][] layered as many times as binsPerOctave (here 2) @@ -78,12 +76,17 @@ // [--------------] // [--------------] // - // Our input is as a set of lazy frame lists, one list per octave. - // For each frame in the lowest octave + // *** + // + // But the kernel we're using here has more than one temporally + // spaced atom; each individual cell is a row vector with + // atomsPerFrame * binsPerOctave elements, but that actually + // represents a rectangular matrix of result cells with width + // atomsPerFrame and height binsPerOctave. The columns of this + // matrix (the atoms) then need to be spaced by 2^(octave-1) + // relative to those from the highest octave. - println "prepared block list"; - cqblocks; - + cqblocks ); testStream = manipulate.withDuration 96000 (syn.sinusoid 48000 500);