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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
use consts::*;
pub struct Frequency(pub f64);
pub fn khz(f: f64) -> Frequency {
return Frequency(f * 1e3);
}
pub fn mhz(f: f64) -> Frequency {
return Frequency(f * 1e6);
}
pub fn ghz(f: f64) -> Frequency {
return Frequency(f * 1e9);
}
impl Frequency {
pub fn to_wavelength(&self) -> Wavelength {
Wavelength(C / self.0)
}
}
pub struct Wavelength(pub f64);
impl Wavelength {
pub fn to_frequency(&self) -> Frequency {
Frequency(C / self.0)
}
}
pub struct Distance(pub f64);
pub fn m(d: f64) -> Distance {
return Distance(d);
}
pub fn km(d: f64) -> Distance {
return Distance(d * 1e3);
}
pub struct Attenuation(pub f64);
pub fn db(f: f64) -> Attenuation {
return Attenuation(f);
}
impl Attenuation {
pub fn to_absolute(&self) -> f64 {
(10_f64).powf(self.0 / 20_f64)
}
}
pub fn dbmv_to_mw(dbmv: f64) -> f64 {
(10_f64).powf(dbmv / 10_f64)
}
pub fn mw_to_dbmv(mw: f64) -> f64 {
10_f64 * mw.log10()
}