c@116
|
1 /*
|
c@116
|
2 Constant-Q library
|
c@116
|
3 Copyright (c) 2013-2014 Queen Mary, University of London
|
c@116
|
4
|
c@116
|
5 Permission is hereby granted, free of charge, to any person
|
c@116
|
6 obtaining a copy of this software and associated documentation
|
c@116
|
7 files (the "Software"), to deal in the Software without
|
c@116
|
8 restriction, including without limitation the rights to use, copy,
|
c@116
|
9 modify, merge, publish, distribute, sublicense, and/or sell copies
|
c@116
|
10 of the Software, and to permit persons to whom the Software is
|
c@116
|
11 furnished to do so, subject to the following conditions:
|
c@116
|
12
|
c@116
|
13 The above copyright notice and this permission notice shall be
|
c@116
|
14 included in all copies or substantial portions of the Software.
|
c@116
|
15
|
c@116
|
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
c@116
|
17 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
c@116
|
18 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
c@116
|
19 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
c@116
|
20 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
c@116
|
21 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
c@116
|
22 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
c@116
|
23
|
c@116
|
24 Except as contained in this notice, the names of the Centre for
|
c@116
|
25 Digital Music; Queen Mary, University of London; and Chris Cannam
|
c@116
|
26 shall not be used in advertising or otherwise to promote the sale,
|
c@116
|
27 use or other dealings in this Software without prior written
|
c@116
|
28 authorization.
|
c@116
|
29 */
|
c@116
|
30
|
c@116
|
31 module test_cqtkernel;
|
c@116
|
32
|
c@116
|
33 cm = load may.matrix.complex;
|
c@116
|
34 mm = load may.mathmisc;
|
c@116
|
35
|
c@116
|
36 { compare, compareUsing } = load may.test;
|
c@116
|
37
|
c@116
|
38 { makeKernel } = load cqtkernel;
|
c@116
|
39
|
c@116
|
40 eps = 1e-7;
|
c@116
|
41
|
c@116
|
42 compareClose = compareUsing do a b: abs (a - b) < eps done;
|
c@116
|
43
|
c@116
|
44 [
|
c@116
|
45
|
c@116
|
46 "minimal": \(
|
c@116
|
47 k = makeKernel { sampleRate = 16, maxFreq = 8, binsPerOctave = 4 };
|
c@116
|
48 compare k.binsPerOctave 4 and
|
c@116
|
49 compare (cm.size k.kernel) {
|
c@116
|
50 rows = k.binsPerOctave * k.atomsPerFrame,
|
c@116
|
51 columns = k.fftSize
|
c@116
|
52 } and
|
c@116
|
53 compareClose k.maxFrequency 8 and
|
c@116
|
54 compareClose k.minFrequency (4 * (mm.pow 2 (1/4))) and
|
c@116
|
55 compare k.atomsPerFrame 5 and
|
c@116
|
56 compare k.fftSize 32 and
|
c@116
|
57 compare (length k.binFrequencies) k.binsPerOctave and
|
c@116
|
58 compareClose (head k.binFrequencies) k.minFrequency and
|
c@116
|
59 compareClose (head (reverse k.binFrequencies)) k.maxFrequency
|
c@116
|
60 ),
|
c@116
|
61
|
c@116
|
62 ] is hash<string, () -> boolean>
|
c@116
|
63
|