leodos_protocols/physical/
proximity1.rs1use crate::physical::modulator::gmsk::Gmsk;
12
13pub const BT: f32 = 0.25;
15
16pub const DEFAULT_SPS: usize = 8;
18
19pub const FORWARD_BAND_LOW: u32 = 435_000_000;
21
22pub const FORWARD_BAND_HIGH: u32 = 450_000_000;
24
25pub const RETURN_BAND_LOW: u32 = 390_000_000;
27
28pub const RETURN_BAND_HIGH: u32 = 405_000_000;
30
31pub const CHANNEL_SPACING: u32 = 20_000;
33
34pub const DATA_RATES: [u32; 6] = [8_000, 16_000, 32_000, 64_000, 128_000, 256_000];
36
37#[derive(Debug, Copy, Clone, Eq, PartialEq)]
39pub enum DataEncoding {
40 Nrz,
42 BiPhaseL,
44}
45
46pub const DEFAULT_NOISE_VAR: f32 = 0.1;
48
49pub const DEFAULT_SCALE: f32 = 1.0;
51
52pub fn modulator() -> Gmsk {
54 Gmsk::new(BT, DEFAULT_SPS, DEFAULT_NOISE_VAR, DEFAULT_SCALE)
55}
56
57pub fn modulator_with_sps(sps: usize) -> Gmsk {
59 Gmsk::new(BT, sps, DEFAULT_NOISE_VAR, DEFAULT_SCALE)
60}
61
62#[cfg(test)]
63mod tests {
64 use super::*;
65 use crate::physical::modulator::gmsk;
66
67 #[test]
68 fn modulator_creates_valid_gmsk() {
69 let m = modulator();
70 let bits: [u8; 4] = [0xA5, 0x3C, 0xFF, 0x00];
71 let n_bits = 32;
72 let out_len = gmsk::output_len(n_bits, DEFAULT_SPS);
73 let mut out_i = [0.0f32; 512];
74 let mut out_q = [0.0f32; 512];
75 gmsk::modulate_gmsk(&bits, n_bits, BT, DEFAULT_SPS, &mut out_i[..out_len], &mut out_q[..out_len]);
76 assert!(out_i[..out_len].iter().any(|&s| s != 0.0));
77 let _ = m;
78 }
79
80 #[test]
81 fn data_rates_are_powers_of_two_kbps() {
82 for rate in DATA_RATES {
83 assert!((rate / 1000).is_power_of_two());
84 }
85 }
86
87 #[test]
88 fn frequency_bands_valid() {
89 assert!(FORWARD_BAND_LOW < FORWARD_BAND_HIGH);
90 assert!(RETURN_BAND_LOW < RETURN_BAND_HIGH);
91 assert!(RETURN_BAND_HIGH < FORWARD_BAND_LOW);
92 }
93}