#[doc(alias = "EIRP")]
pub struct Transmitter {
pub output_power: f64,
pub gain: f64,
pub bandwidth: f64,
}
impl Transmitter {
#[doc(alias = "EIRP")]
#[must_use]
pub fn eirp_dbm(&self) -> f64 {
self.output_power + self.gain
}
#[doc(alias = "EIRP")]
#[must_use]
pub fn eirp_dbw(&self) -> f64 {
self.eirp_dbm() - 30.0
}
}
#[cfg(test)]
mod tests {
use crate::transmitter::Transmitter;
#[test]
fn eirp_dbm() {
let tx = Transmitter {
output_power: 30.0, gain: 10.0,
bandwidth: 100.0e6,
};
assert!((tx.eirp_dbm() - 40.0).abs() < 1e-10);
}
#[test]
fn eirp_dbw() {
let tx = Transmitter {
output_power: 30.0,
gain: 10.0,
bandwidth: 100.0e6,
};
assert!((tx.eirp_dbw() - 10.0).abs() < 1e-10);
}
#[test]
fn eirp_dbm_dbw_consistency() {
let tx = Transmitter {
output_power: 43.0, gain: 35.0, bandwidth: 36.0e6,
};
assert!((tx.eirp_dbm() - tx.eirp_dbw() - 30.0).abs() < 1e-10);
}
#[test]
fn zero_gain_eirp_equals_power() {
let tx = Transmitter {
output_power: 20.0,
gain: 0.0,
bandwidth: 1.0e6,
};
assert!((tx.eirp_dbm() - 20.0).abs() < 1e-10);
}
#[test]
fn negative_gain_lossy_antenna() {
let tx = Transmitter {
output_power: 10.0,
gain: -3.0,
bandwidth: 1.0e6,
};
assert!((tx.eirp_dbm() - 7.0).abs() < 1e-10);
}
#[test]
fn high_power_ka_band() {
let tx = Transmitter {
output_power: 51.14,
gain: 42.0,
bandwidth: 500.0e6,
};
assert!((tx.eirp_dbm() - 93.14).abs() < 0.01);
assert!((tx.eirp_dbw() - 63.14).abs() < 0.01);
}
}