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
48
use alloc::vec::Vec;
pub fn apply_lpf_i16_dp(data: &mut [i16], sample_rate_hz: u16, cutoff_frequency_hz: u16) {
let rc = 1.0 / (cutoff_frequency_hz as f64 * 2.0 * core::f64::consts::PI);
let dt = 1.0 / sample_rate_hz as f64;
let alpha = dt / (rc + dt);
let mut cpy_orig_data = Vec::with_capacity(data.len());
cpy_orig_data.extend_from_slice(data);
data[0] = (alpha * cpy_orig_data[0] as f64) as i16;
for i in 1..data.len() {
data[i] = (data[i - 1] as f64
+ alpha *
(cpy_orig_data[i] as f64 - data[i-1] as f64)) as i16;
}
}
pub fn apply_lpf_i32_dp(data: &mut [i32], sample_rate_hz: u16, cutoff_frequency_hz: u16) {
let rc = 1.0 / (cutoff_frequency_hz as f64 * 2.0 * core::f64::consts::PI);
let dt = 1.0 / sample_rate_hz as f64;
let alpha = dt / (rc + dt);
let mut cpy_orig_data = Vec::with_capacity(data.len());
cpy_orig_data.extend_from_slice(data);
data[0] = (alpha * cpy_orig_data[0] as f64) as i32;
for i in 1..data.len() {
data[i] = (data[i - 1] as f64
+ alpha *
(cpy_orig_data[i] as f64 - data[i-1] as f64)) as i32;
}
}