1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use std::f32;
use std::f32::consts::PI;
pub fn reverse_bits(val: usize, power: usize) -> usize {
let mut reversed = 0;
for i in 0..power {
let cur_bit = if (1 << i) & val > 0 { 1 } else { 0 };
reversed |= cur_bit << (power - i - 1);
}
reversed
}
pub fn hann_function(n: u32, samples: u32) -> f32 {
0.5 * (1.0 - f32::cos((2.0 * PI * n as f32) / (samples as f32 - 1.0)))
}
pub fn blackman_harris(n: u32, samples: u32) -> f32 {
const A0: f32 = 0.35875;
const A1: f32 = 0.48829;
const A2: f32 = 0.14128;
const A3: f32 = 0.01168;
let arg = 2.0 * PI * n as f32 / (samples as f32 - 1.0);
A0 - A1 * f32::cos(arg) + A2 * f32::cos(2.0 * arg) - A3 * f32::cos(3.0 * arg)
}