Changed some unwraps to expect. Debugged multiplication with weighting broadcast
This commit is contained in:
parent
826266b8ee
commit
65df1c82f6
@ -136,7 +136,9 @@ impl AvPowerSpectra {
|
|||||||
// });
|
// });
|
||||||
|
|
||||||
// Option 2: broadcasting with an unwrap.
|
// Option 2: broadcasting with an unwrap.
|
||||||
azip!((c in &mut Cpsnew, f in fw_pwr.broadcast(dim).unwrap()) {
|
let dview_fw = fw_pwr.slice(s![..,NewAxis, NewAxis]);
|
||||||
|
azip!((c in &mut Cpsnew, f in dview_fw.broadcast(dim).expect("BUG: Cannot broadcast")) {
|
||||||
|
// Scale with frequency weighting
|
||||||
*c = Cflt::new(c.re * f, c.im * f);
|
*c = Cflt::new(c.re * f, c.im * f);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -300,7 +302,8 @@ impl AvPowerSpectra {
|
|||||||
let res = res.clone();
|
let res = res.clone();
|
||||||
return res.to_pyarray_bound(py);
|
return res.to_pyarray_bound(py);
|
||||||
}
|
}
|
||||||
panic!("No data!");
|
let res: Bound<'py, PyArray3<Cflt>> = PyArray3::zeros_bound(py, [0, 0, 0], true);
|
||||||
|
res
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@ -333,7 +336,7 @@ mod test {
|
|||||||
.fs(1.)
|
.fs(1.)
|
||||||
.overlap(overlap.clone())
|
.overlap(overlap.clone())
|
||||||
.build()
|
.build()
|
||||||
.unwrap();
|
.expect("BUG: Settings cannot be build.");
|
||||||
|
|
||||||
assert_eq!(settings.get_overlap_keep(), *expected);
|
assert_eq!(settings.get_overlap_keep(), *expected);
|
||||||
}
|
}
|
||||||
@ -352,12 +355,12 @@ mod test {
|
|||||||
.overlap(Overlap::NoOverlap {})
|
.overlap(Overlap::NoOverlap {})
|
||||||
.mode(ApsMode::ExponentialWeighting { tau })
|
.mode(ApsMode::ExponentialWeighting { tau })
|
||||||
.build()
|
.build()
|
||||||
.unwrap();
|
.expect("Settings cannot be empty");
|
||||||
let overlap_keep = settings.get_overlap_keep();
|
let overlap_keep = settings.get_overlap_keep();
|
||||||
let mut aps = AvPowerSpectra::new(settings);
|
let mut aps = AvPowerSpectra::new(settings);
|
||||||
assert_eq!(aps.overlap_keep, 0);
|
assert_eq!(aps.overlap_keep, 0);
|
||||||
|
|
||||||
let distr = Normal::new(1.0, 1.0).unwrap();
|
let distr = Normal::new(1.0, 1.0).expect("Distribution cannot be built");
|
||||||
let timedata_some = Dmat::random((nfft, 1), distr);
|
let timedata_some = Dmat::random((nfft, 1), distr);
|
||||||
let timedata_zeros = Dmat::zeros((nfft, 1));
|
let timedata_zeros = Dmat::zeros((nfft, 1));
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
//! Compute forward single sided amplitude spectra
|
//! Compute forward single sided amplitude spectra
|
||||||
use crate::config::*;
|
use crate::config::*;
|
||||||
use realfft::{RealFftPlanner, RealToComplex};
|
use realfft::{RealFftPlanner, RealToComplex};
|
||||||
use std::sync::Arc;
|
use std::{fmt::Debug, sync::Arc};
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct FFT {
|
pub struct FFT {
|
||||||
|
@ -28,6 +28,9 @@ impl FreqWeighting {
|
|||||||
fn __str__(&self) -> String {
|
fn __str__(&self) -> String {
|
||||||
format!("{self}-weighting")
|
format!("{self}-weighting")
|
||||||
}
|
}
|
||||||
|
fn letter(&self) -> String {
|
||||||
|
format!("{self}")
|
||||||
|
}
|
||||||
#[staticmethod]
|
#[staticmethod]
|
||||||
#[pyo3(name = "default")]
|
#[pyo3(name = "default")]
|
||||||
fn default_py() -> Self {
|
fn default_py() -> Self {
|
||||||
|
@ -141,13 +141,15 @@ impl PowerSpectra {
|
|||||||
/// Compute FFTs of input channel data. Stores the scaled FFT data in
|
/// Compute FFTs of input channel data. Stores the scaled FFT data in
|
||||||
/// self.freqdata.
|
/// self.freqdata.
|
||||||
fn compute_ffts(&mut self, timedata: ArrayView2<Flt>) -> ArrayView2<Cflt> {
|
fn compute_ffts(&mut self, timedata: ArrayView2<Flt>) -> ArrayView2<Cflt> {
|
||||||
|
assert!(timedata.nrows() > 0);
|
||||||
let (n, nch) = timedata.dim();
|
let (n, nch) = timedata.dim();
|
||||||
let nfft = self.nfft();
|
let nfft = self.nfft();
|
||||||
assert!(n == nfft);
|
assert!(n == nfft);
|
||||||
|
|
||||||
// Make sure enough fft engines are available
|
// Make sure enough fft engines are available
|
||||||
while nch > self.ffts.len() {
|
while nch > self.ffts.len() {
|
||||||
self.ffts.push(self.ffts.last().unwrap().clone());
|
self.ffts
|
||||||
|
.push(self.ffts.last().expect("FFT's should not be empty").clone());
|
||||||
self.freqdata
|
self.freqdata
|
||||||
.push_column(Ccol::from_vec(vec![Cflt::new(0., 0.); nfft / 2 + 1]).view())
|
.push_column(Ccol::from_vec(vec![Cflt::new(0., 0.); nfft / 2 + 1]).view())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
Loading…
Reference in New Issue
Block a user