use_acoustics/
frequency.rs1use std::f64::consts::PI;
2
3#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
5pub struct FrequencyHz(f64);
6
7impl FrequencyHz {
8 #[must_use]
10 pub fn new(value: f64) -> Option<Self> {
11 if is_valid_frequency(value) {
12 Some(Self(value))
13 } else {
14 None
15 }
16 }
17
18 #[must_use]
20 pub fn value(self) -> f64 {
21 self.0
22 }
23
24 #[must_use]
26 pub fn period_seconds(self) -> f64 {
27 1.0 / self.0
28 }
29
30 #[must_use]
32 pub fn angular_frequency_rad_per_s(self) -> f64 {
33 2.0 * PI * self.0
34 }
35}
36
37#[must_use]
39pub fn period_seconds(frequency_hz: f64) -> Option<f64> {
40 FrequencyHz::new(frequency_hz).map(FrequencyHz::period_seconds)
41}
42
43#[must_use]
45pub fn angular_frequency_rad_per_s(frequency_hz: f64) -> Option<f64> {
46 FrequencyHz::new(frequency_hz).map(FrequencyHz::angular_frequency_rad_per_s)
47}
48
49fn is_valid_frequency(value: f64) -> bool {
50 value.is_finite() && value > 0.0
51}