Chris@38: Chris@93: module yetilab.transform.window; Chris@38: Chris@93: b = load yetilab.block.block; Chris@93: bf = load yetilab.block.blockfuncs; Chris@38: Chris@38: cosinewin a0 a1 a2 a3 n = Chris@38: b.fromList Chris@38: (map do i: Chris@38: a0 Chris@38: - a1 * cos(2 * pi * i / n) Chris@38: + a2 * cos(4 * pi * i / n) Chris@38: - a2 * cos(6 * pi * i / n) Chris@38: done [0..n-1]); Chris@38: Chris@38: hann = cosinewin 0.5 0.5 0.0 0.0; Chris@38: hamming = cosinewin 0.54 0.46 0.0 0.0; Chris@38: blackman = cosinewin 0.42 0.50 0.08 0.0; Chris@38: nuttall = cosinewin 0.3635819 0.4891775 0.1365995 0.0106411; Chris@38: blackmanHarris = cosinewin 0.35875 0.48829 0.14128 0.01168; Chris@38: boxcar = b.consts 0.5; Chris@38: Chris@38: bartlett n = Chris@38: b.fromList Chris@38: (m = n/2; Chris@38: concat [ Chris@38: map do i: Chris@38: i / m Chris@38: done [0..m-1], Chris@38: map do i: Chris@38: 1.0 - (i / m) Chris@38: done [0..m-1] Chris@38: ]); Chris@38: Chris@49: windowed windowFunc frames = Chris@43: case frames of Chris@43: []: frames; Chris@43: _: (first = head frames; Chris@43: window = windowFunc (b.length first); Chris@43: map (bf.multiply window) frames); Chris@43: esac; Chris@43: Chris@38: { Chris@43: cosinewin, hann, hamming, blackman, nuttall, blackmanHarris, boxcar, bartlett, Chris@49: windowed Chris@38: }; Chris@38: