annotate yetilab/transform/window.yeti @ 262:9b07a28aefad
Fix window functions. We need tests for these.
author |
Chris Cannam |
date |
Wed, 22 May 2013 22:19:48 +0100 |
parents |
77c6a81c577f |
children |
772484665c5d |
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@262
|
7 cosinewin a0 a1 a2 a3 n1 =
|
Chris@262
|
8 (n = n1 - 1;
|
Chris@218
|
9 vec.fromList
|
Chris@38
|
10 (map do i:
|
Chris@38
|
11 a0
|
Chris@38
|
12 - a1 * cos(2 * pi * i / n)
|
Chris@38
|
13 + a2 * cos(4 * pi * i / n)
|
Chris@262
|
14 - a3 * cos(6 * pi * i / n)
|
Chris@262
|
15 done [0..n]));
|
Chris@38
|
16
|
Chris@38
|
17 hann = cosinewin 0.5 0.5 0.0 0.0;
|
Chris@38
|
18 hamming = cosinewin 0.54 0.46 0.0 0.0;
|
Chris@38
|
19 blackman = cosinewin 0.42 0.50 0.08 0.0;
|
Chris@262
|
20 nuttall = cosinewin 0.355768 0.487396 0.144232 0.012604;
|
Chris@262
|
21 blackmanNuttall = cosinewin 0.3635819 0.4891775 0.1365995 0.0106411;
|
Chris@38
|
22 blackmanHarris = cosinewin 0.35875 0.48829 0.14128 0.01168;
|
Chris@218
|
23 boxcar = vec.consts 0.5;
|
Chris@38
|
24
|
Chris@38
|
25 bartlett n =
|
Chris@218
|
26 vec.fromList
|
Chris@38
|
27 (m = n/2;
|
Chris@38
|
28 concat [
|
Chris@38
|
29 map do i:
|
Chris@38
|
30 i / m
|
Chris@38
|
31 done [0..m-1],
|
Chris@38
|
32 map do i:
|
Chris@38
|
33 1.0 - (i / m)
|
Chris@38
|
34 done [0..m-1]
|
Chris@38
|
35 ]);
|
Chris@38
|
36
|
Chris@49
|
37 windowed windowFunc frames =
|
Chris@43
|
38 case frames of
|
Chris@43
|
39 []: frames;
|
Chris@43
|
40 _: (first = head frames;
|
Chris@218
|
41 window = windowFunc (vec.length first);
|
Chris@43
|
42 map (bf.multiply window) frames);
|
Chris@43
|
43 esac;
|
Chris@43
|
44
|
Chris@38
|
45 {
|
Chris@262
|
46 cosinewin, hann, hamming, blackman, nuttall, blackmanNuttall, blackmanHarris,
|
Chris@262
|
47 boxcar, bartlett, windowed
|
Chris@38
|
48 };
|
Chris@38
|
49
|