crate::ix!();
pub fn white_noise() -> f64 {
rand11() as f64
}
#[derive(Debug)]
pub struct Signal {
pub data: A1d::<f64>,
}
impl Signal {
pub fn white_noise(n: usize) -> Self {
let mut x = A1d::zeros(n);
for sample in x.iter_mut() {
*sample = white_noise();
}
Signal { data: x }
}
pub fn average_power_time_domain(&self) -> f64 {
let n = self.data.dim();
let sum: f64 = self.data.map(|x| x.abs().pow(2)).iter().sum();
sum / (n as f64)
}
pub fn average_power_freq_domain(&self) -> f64 {
let plan = Plan::new(Operation::Forward, self.data.dim());
let mut data = self.data.clone();
dft::transform(data.as_slice_mut().unwrap(), &plan);
let n = data.dim();
let sum: f64 = data.map(|x| x.abs().pow(2)).iter().sum();
sum / (n.pow(2) as f64)
}
}