annotate yetilab/transform/window.yeti @ 254:5eb57c649de0 sparse

Using hashes is simpler, but turns out to be mostly no faster and sometimes much slower. Not one to merge back.
author Chris Cannam
date Tue, 21 May 2013 17:40:33 +0100
parents 77c6a81c577f
children 9b07a28aefad
rev   line source
Chris@38 1
Chris@93 2 module yetilab.transform.window;
Chris@38 3
Chris@222 4 vec = load yetilab.vector.vector;
Chris@222 5 bf = load yetilab.vector.blockfuncs;
Chris@38 6
Chris@38 7 cosinewin a0 a1 a2 a3 n =
Chris@218 8 vec.fromList
Chris@38 9 (map do i:
Chris@38 10 a0
Chris@38 11 - a1 * cos(2 * pi * i / n)
Chris@38 12 + a2 * cos(4 * pi * i / n)
Chris@38 13 - a2 * cos(6 * pi * i / n)
Chris@38 14 done [0..n-1]);
Chris@38 15
Chris@38 16 hann = cosinewin 0.5 0.5 0.0 0.0;
Chris@38 17 hamming = cosinewin 0.54 0.46 0.0 0.0;
Chris@38 18 blackman = cosinewin 0.42 0.50 0.08 0.0;
Chris@38 19 nuttall = cosinewin 0.3635819 0.4891775 0.1365995 0.0106411;
Chris@38 20 blackmanHarris = cosinewin 0.35875 0.48829 0.14128 0.01168;
Chris@218 21 boxcar = vec.consts 0.5;
Chris@38 22
Chris@38 23 bartlett n =
Chris@218 24 vec.fromList
Chris@38 25 (m = n/2;
Chris@38 26 concat [
Chris@38 27 map do i:
Chris@38 28 i / m
Chris@38 29 done [0..m-1],
Chris@38 30 map do i:
Chris@38 31 1.0 - (i / m)
Chris@38 32 done [0..m-1]
Chris@38 33 ]);
Chris@38 34
Chris@49 35 windowed windowFunc frames =
Chris@43 36 case frames of
Chris@43 37 []: frames;
Chris@43 38 _: (first = head frames;
Chris@218 39 window = windowFunc (vec.length first);
Chris@43 40 map (bf.multiply window) frames);
Chris@43 41 esac;
Chris@43 42
Chris@38 43 {
Chris@43 44 cosinewin, hann, hamming, blackman, nuttall, blackmanHarris, boxcar, bartlett,
Chris@49 45 windowed
Chris@38 46 };
Chris@38 47