1use crate::Signal;
2
3#[derive(Debug, Clone)]
5pub struct Builder<'a, T: Signal> {
6 pub(crate) n_segment: usize,
8 pub(crate) segment_size: usize,
10 pub(crate) overlap: f64,
12 pub(crate) dft_max_size: usize,
14 pub(crate) signal: &'a [T],
16 pub(crate) fs: Option<T>,
18}
19impl<'a, T: Signal> Builder<'a, T> {
20 pub fn new(signal: &'a [T]) -> Self {
22 let k: usize = 4;
23 let a: f64 = 0.5;
24 let l = (signal.len() as f64 / (k as f64 * (1. - a) + a)).trunc() as usize;
25 Self {
26 n_segment: k,
27 segment_size: l,
28 overlap: a,
29 dft_max_size: 4096,
30 signal,
31 fs: None,
32 }
33 }
34 pub fn sampling_frequency(self, fs: T) -> Self {
36 Self {
37 fs: Some(fs),
38 ..self
39 }
40 }
41 pub fn overlap(self, overlap: f64) -> Self {
43 let k = self.n_segment;
44 let a = overlap;
45 let l = (self.signal.len() as f64 / (k as f64 * (1. - a) + a)).trunc() as usize;
46 Self {
47 segment_size: l,
48 overlap: a,
49 ..self
50 }
51 }
52 pub fn n_segment(self, n_segment: usize) -> Self {
54 let k = n_segment;
55 let a = self.overlap;
56 let l = (self.signal.len() as f64 / (k as f64 * (1. - a) + a)).trunc() as usize;
57 Self {
58 n_segment: k,
59 segment_size: l,
60 ..self
61 }
62 }
63 pub fn dft_log2_max_size(self, dft_log2_max_size: usize) -> Self {
65 Self {
66 dft_max_size: 2 << (dft_log2_max_size - 1),
67 ..self
68 }
69 }
70}