annotate constant-q-cpp/misc/yeti/test.yeti @ 372:af71cbdab621 tip

Update bqvec code
author Chris Cannam
date Tue, 19 Nov 2019 10:13:32 +0000
parents 5d0a2ebb4d17
children
rev   line source
Chris@366 1 /*
Chris@366 2 Constant-Q library
Chris@366 3 Copyright (c) 2013-2014 Queen Mary, University of London
Chris@366 4
Chris@366 5 Permission is hereby granted, free of charge, to any person
Chris@366 6 obtaining a copy of this software and associated documentation
Chris@366 7 files (the "Software"), to deal in the Software without
Chris@366 8 restriction, including without limitation the rights to use, copy,
Chris@366 9 modify, merge, publish, distribute, sublicense, and/or sell copies
Chris@366 10 of the Software, and to permit persons to whom the Software is
Chris@366 11 furnished to do so, subject to the following conditions:
Chris@366 12
Chris@366 13 The above copyright notice and this permission notice shall be
Chris@366 14 included in all copies or substantial portions of the Software.
Chris@366 15
Chris@366 16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Chris@366 17 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Chris@366 18 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
Chris@366 19 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
Chris@366 20 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
Chris@366 21 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
Chris@366 22 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Chris@366 23
Chris@366 24 Except as contained in this notice, the names of the Centre for
Chris@366 25 Digital Music; Queen Mary, University of London; and Chris Cannam
Chris@366 26 shall not be used in advertising or otherwise to promote the sale,
Chris@366 27 use or other dealings in this Software without prior written
Chris@366 28 authorization.
Chris@366 29 */
Chris@366 30
Chris@366 31 program test;
Chris@366 32
Chris@366 33 { runTests } = load may.test;
Chris@366 34
Chris@366 35 // We want to test:
Chris@366 36 //
Chris@366 37 // Kernel design -- check size (number of bins, number of atoms);
Chris@366 38 // check an example kernel against known data
Chris@366 39 //
Chris@366 40 // Time alignment -- feed a dirac train, check that peaks in all bins
Chris@366 41 // align
Chris@366 42 //
Chris@366 43 // Frequency discrimination -- feed a sinusoid, check peaks
Chris@366 44 //
Chris@366 45 // Latency compensation -- for dirac at 0, check peak can be found at
Chris@366 46 // 0 plus the declared latency
Chris@366 47 //
Chris@366 48 // Signal-noise ratio
Chris@366 49 //
Chris@366 50 // Specimen output for simple test case
Chris@366 51
Chris@366 52 tests = [
Chris@366 53 "kernel" : load test_cqtkernel,
Chris@366 54 "frequency" : load test_frequency,
Chris@366 55 ];
Chris@366 56
Chris@366 57 bad = sum (mapHash do name testHash: runTests name testHash done tests);
Chris@366 58
Chris@366 59 if (bad > 0) then
Chris@366 60 println "\n** \(bad) test(s) failed!";
Chris@366 61 threadExit 1
Chris@366 62 else
Chris@366 63 ()
Chris@366 64 fi
Chris@366 65
Chris@366 66
Chris@366 67
Chris@366 68
Chris@366 69 /*
Chris@366 70 //testStream = manipulate.withDuration 96000 (syn.sinusoid 48000 500);
Chris@366 71 //testStream = manipulate.withDuration 96000 (syn.pulseTrain 48000 4);
Chris@366 72 testStream = af.open "sweep-48000.wav";
Chris@366 73 //testStream = af.open "sweep.wav";
Chris@366 74
Chris@366 75 // So the stream is [ 0, 1, 0, -1, 0, 1, 0, -1, ... ] :
Chris@366 76 //testStream = manipulate.withDuration 64 (syn.sinusoid 8 2);
Chris@366 77
Chris@366 78 testStream = manipulate.withDuration 32 (syn.pulseTrain 8 0.001);
Chris@366 79
Chris@366 80 eprintln "have test stream";
Chris@366 81
Chris@366 82 cq = cqt { maxFreq = testStream.sampleRate/2, minFreq = 50, binsPerOctave = 24 } testStream;
Chris@366 83
Chris@366 84 eprintln "bin frequencies: \(cq.kernel.binFrequencies)";
Chris@366 85
Chris@366 86 bigM = mat.concatHorizontal (map cm.magnitudes cq.output);
Chris@366 87
Chris@366 88 eprintln "overall output size = \(mat.size bigM)";
Chris@366 89
Chris@366 90 mat.print bigM;
Chris@366 91
Chris@366 92 //\() (plot.plot [Contour bigM]);
Chris@366 93 \() (plot.plot [Grid bigM]);
Chris@366 94 */
Chris@366 95 //()
Chris@366 96