Mercurial > hg > constant-q-cpp
changeset 68:b75c0eaaa6dd
Allow wrong max in alternate columns where expected max would be in lower octave (which is not present)
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 03 Mar 2014 08:32:45 +0000 |
parents | d6dd6e1cc00e |
children | 27007f8302f4 |
files | yeti/test_cqtkernel.yeti yeti/test_frequency.yeti |
diffstat | 2 files changed, 28 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/yeti/test_cqtkernel.yeti Fri Feb 28 17:18:54 2014 +0000 +++ b/yeti/test_cqtkernel.yeti Mon Mar 03 08:32:45 2014 +0000 @@ -11,7 +11,7 @@ k = makeKernel { sampleRate = 16, maxFreq = 8, binsPerOctave = 4 }; print k; cm.print k.kernel; -true; +false; ), ] is hash<string, () -> boolean>
--- a/yeti/test_frequency.yeti Fri Feb 28 17:18:54 2014 +0000 +++ b/yeti/test_frequency.yeti Mon Mar 03 08:32:45 2014 +0000 @@ -32,13 +32,21 @@ testFreqs = map (* 5) [ 0..10 ]; duration = sampleRate * 2; -threshold = 0.05; +threshold = 0.08; streamBuilder = sinTestStream sampleRate duration; binForFreq f = mm.round (bpo * mm.log2 (f / cqmin)) - 1; +report message matrix = + (eprintln message; + eprintln "matrix is:"; + mat.eprint matrix; + chart = plot.plot [Grid matrix]; + sleep 100; + chart#dispose()); + tests = mapIntoHash do f: "freq_\(f)" done do f: \( @@ -50,22 +58,30 @@ var colno = 0; success = all id (map do c: - // passes test if the correct max bin, or the expected max - // is out of range, or if all bins are below a threshold + // The test passes for this column if: + // + // * the max bin is the expected one, or + // + // * the expected max is out of range entirely (but + // we need to test _something_ in this case -- + // what?), or + // + // * all bins are below a threshold, or + // + // * this is an odd column and the expected max is in + // the lower octave + // + // We should also check that all values in the lower + // octave are zero for odd columns. + // expected = binForFreq f; good = (expected < 0 or expected >= vec.length c) or + ((colno % 2 == 1) and expected < (vec.length c / 2)) or (vec.max c < threshold) or (vec.maxindex c == binForFreq f); if (not good) then - println " * bad! maxindex \(vec.maxindex c) != expected \(binForFreq f) for freq \(f) in column \(colno) of \(mat.width m): column is \(vec.list c)"; - println "matrix is:"; - mat.print m; - chart = plot.plot [Grid m]; - sleep 100; - chart#dispose(); - else - print "✓"; + report " * bad! maxindex \(vec.maxindex c) != expected \(binForFreq f) for freq \(f) in column \(colno) of \(mat.width m): column is \(vec.list c)" m; fi; colno := colno + 1; good;