Mercurial > hg > may
changeset 360:900b2eb67023
Sketch interpolate/decimate tests (wrong for various reasons)
author | Chris Cannam |
---|---|
date | Tue, 02 Jul 2013 22:24:57 +0100 |
parents | 52aaf0a09de6 |
children | 6a8263b37ea1 |
files | may/stream/test/test_filter.yeti |
diffstat | 1 files changed, 53 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/may/stream/test/test_filter.yeti Tue Jun 25 10:08:30 2013 +0100 +++ b/may/stream/test/test_filter.yeti Tue Jul 02 22:24:57 2013 +0100 @@ -2,10 +2,13 @@ module may.stream.test.test_filter; vec = load may.vector; +bf = load may.vector.blockfuncs; mat = load may.matrix; syn = load may.stream.syntheticstream; filt = load may.stream.filter; +pl = load may.plot;//!!! + { compare, compareUsing } = load may.test.test; compareClose = compareUsing @@ -616,6 +619,56 @@ done convolutionOptions); ), +"interpolated-\(name)": \( + // Interpolating a sinusoid should give us a sinusoid + sinusoid = syn.sinusoid 8 2; // 2Hz sine sampled at 8Hz: [ 0, 1, 0, -1 ] etc + input = maybeDuration 16 sinusoid; + output = filt.interpolated 2 input; + result = output.read 32; + reference = syn.sinusoid 16 2; + expected = reference.read 32; + compareOutputs a b = compareClose + (map vec.list (mat.asRows a)) (map vec.list (mat.asRows b)); + if not compareOutputs result expected then + \() (pl.plot [Vector (mat.getRow 0 result), Vector (mat.getRow 0 expected)]); + false + else true fi; +), + +"decimated-\(name)": \( + // Decimating a sinusoid should give us a sinusoid + sinusoid = syn.sinusoid 32 2; // 2Hz sine sampled at 16Hz + input = maybeDuration 64 sinusoid; + output = filt.decimated 2 input; + result = output.read 32; + reference = syn.sinusoid 16 2; + expected = reference.read 32; + compareOutputs a b = compareClose + (map vec.list (mat.asRows a)) (map vec.list (mat.asRows b)); + if not compareOutputs result expected then + \() (pl.plot [Vector (mat.getRow 0 result), Vector (mat.getRow 0 expected)]); + false + else true fi; +), + +"int-dec-\(name)": \( + // Interpolating any signal then decimating by the same factor + // should get us the original back again + data = vec.fromList [ 0, 0.1, -0.3, -0.4, -0.3, 0, 0.5, 0.2, 0.8, -0.1 ]; + data = vec.concat [ data, bf.scaled (5/4) data, bf.scaled (3/4) data, data ]; + data = vec.concat [ data, data ]; + input = maybeDuration (vec.length data) (syn.precalculatedMono 4 data); + intermediate = filt.interpolated 2 input; + output = filt.decimated 2 intermediate; + result = output.read (vec.length data); + if not compareClose [vec.list (mat.getRow 0 result)] [vec.list data] then + \() (pl.plot [Vector (mat.getRow 0 result), Vector data]); + up = (filt.interpolated 2 (syn.precalculatedMono 4 data)).read 80; + \() (pl.plot [Vector (mat.getRow 0 up)]); + false + else true fi; +), + //!!! still no tests for filters with multi-channel inputs ]);