Skip to main content

nominal_api/conjure/objects/scout/compute/api/
stft_options.rs

1/// Options for frequency analyses that are backed by short-time Fourier transforms.
2#[derive(
3    Debug,
4    Clone,
5    conjure_object::serde::Serialize,
6    conjure_object::serde::Deserialize,
7    conjure_object::private::DeriveWith
8)]
9#[serde(crate = "conjure_object::serde")]
10#[derive_with(PartialEq, Eq, PartialOrd, Ord, Hash)]
11#[conjure_object::private::staged_builder::staged_builder]
12#[builder(crate = conjure_object::private::staged_builder, update, inline)]
13pub struct StftOptions {
14    #[builder(default, into)]
15    #[serde(rename = "window", skip_serializing_if = "Option::is_none", default)]
16    window: Option<super::FftWindow>,
17    #[builder(default, into)]
18    #[serde(rename = "windowSymmetry", skip_serializing_if = "Option::is_none", default)]
19    window_symmetry: Option<super::WindowSymmetry>,
20    #[builder(default, into)]
21    #[serde(
22        rename = "samplingFrequency",
23        skip_serializing_if = "Option::is_none",
24        default
25    )]
26    #[derive_with(with = conjure_object::private::DoubleWrapper)]
27    sampling_frequency: Option<f64>,
28    #[builder(default, into)]
29    #[serde(rename = "nperseg", skip_serializing_if = "Option::is_none", default)]
30    nperseg: Option<i32>,
31    #[builder(default, into)]
32    #[serde(rename = "noverlap", skip_serializing_if = "Option::is_none", default)]
33    noverlap: Option<i32>,
34    #[builder(default, into)]
35    #[serde(rename = "nfft", skip_serializing_if = "Option::is_none", default)]
36    nfft: Option<i32>,
37    #[builder(default, into)]
38    #[serde(rename = "detrend", skip_serializing_if = "Option::is_none", default)]
39    detrend: Option<super::DetrendType>,
40}
41impl StftOptions {
42    /// Constructs a new instance of the type.
43    #[inline]
44    pub fn new() -> Self {
45        Self::builder().build()
46    }
47    /// Window function type to use
48    #[inline]
49    pub fn window(&self) -> Option<&super::FftWindow> {
50        self.window.as_ref().map(|o| &*o)
51    }
52    /// Either DFT_EVEN or SYMMETRIC
53    #[inline]
54    pub fn window_symmetry(&self) -> Option<&super::WindowSymmetry> {
55        self.window_symmetry.as_ref().map(|o| &*o)
56    }
57    /// Sampling frequency of the series in Hz. If absent, will calculate using the input series.
58    #[inline]
59    pub fn sampling_frequency(&self) -> Option<f64> {
60        self.sampling_frequency.as_ref().map(|o| *o)
61    }
62    /// Number of points per window segment.
63    #[inline]
64    pub fn nperseg(&self) -> Option<i32> {
65        self.nperseg.as_ref().map(|o| *o)
66    }
67    /// Number of points of overlap between windows. Must be less than nperseg.
68    #[inline]
69    pub fn noverlap(&self) -> Option<i32> {
70        self.noverlap.as_ref().map(|o| *o)
71    }
72    /// Number of points to use in the FFT. Must be greater than or equal to nperseg.
73    #[inline]
74    pub fn nfft(&self) -> Option<i32> {
75        self.nfft.as_ref().map(|o| *o)
76    }
77    /// Detrend the points in each window segment. If absent, will use the default detrend for that function.
78    #[inline]
79    pub fn detrend(&self) -> Option<&super::DetrendType> {
80        self.detrend.as_ref().map(|o| &*o)
81    }
82}