Expand description
very simple rust iterators that yield generalized cosine, hanning, hamming, blackman, nuttall and triangular windows
useful for smoothing the sharp discontinuities at the beginning and end of a slice of samples when doing a short time fourier transform. windowing also improves temporal resolution by making the signal near the time being analyzed have higher weight than the signal further away from the time being analyzed.
all iterators yield f64
s.
previously they were generic over the floating type used.
this was removed because it introduced complexity.
if you need f32
s just .map(|x| x as f32)
over the iterator.
§example
you will most likely want to collect the yielded values in a vector and then multiply that window vector repeatedly with some data vectors to apodize them.
here is an example of that for a hanning window (hamming, blackman and nuttall are analogous).
#[macro_use]
extern crate approx;
fn main() {
// create a hanning window iterator of size 7
// and collect the values it yields in a Vec
let window = apodize::hanning_iter(7).collect::<Vec<f64>>();
let expected = vec![
0.0,
0.24999999999999994,
0.7499999999999999,
1.0,
0.7500000000000002,
0.25,
0.0
];
assert_ulps_eq!(window.as_slice(), expected.as_slice(), max_ulps = 10);
// some data we want to apodize (multiply with the window)
let data: Vec<f64> = vec![1., 2., 3., 4., 5., 6., 7.];
// buffer that will hold data * window
let mut windowed_data = vec![0.; data.len()];
for (windowed, (window, data)) in windowed_data.iter_mut().zip(window.iter().zip(data.iter())) {
*windowed = *window * *data;
}
let expected = vec![
0.0,
0.4999999999999999,
2.2499999999999996,
4.0,
3.750000000000001,
1.5,
0.0
];
assert_ulps_eq!(windowed_data.as_slice(), expected.as_slice(), max_ulps = 10);
}
Structs§
- Cosine
Window Iter - holds the window coefficients and iteration state of an iterator for a cosine window
- Triangular
Window Iter - holds the iteration state of an iterator for a triangular window
Functions§
- blackman_
iter - returns an iterator that yields the values for a blackman
window of
size
- cosine_
at - returns the value of the cosine
window
of
size
with the coefficientsa
,b
,c
andd
atindex
- cosine_
iter - returns an iterator that yields the values for a cosine
window of
size
with the coefficientsa
,b
,c
andd
- hamming_
iter - returns an iterator that yields the values for a hamming
window of
size
- hanning_
iter - returns an iterator that yields the values for a hanning
window of
size
- nuttall_
iter - returns an iterator that yields the values for a nuttall
window of
size
- triangular_
at - returns the value of the
[triangular window]
(https://en.wikipedia.org/wiki/Window_function#Triangular_window)
of
size
atindex
- triangular_
iter - returns an iterator that yields the values for a triangular
window
if
l = size - 1
then the outermost values of the window are0
. ifl = size
then the outermost values of the window are higher. ifl = size + 1
then the outermost values of the window are even higher.