From 2ff62ea900a246747fc3e974c38818a54a437064 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Thu, 24 Nov 2016 19:40:22 +0100 Subject: [PATCH] Squaring AM demodulator works --- src/amdemod.rs | 22 ++++++++++++++++++++++ src/main.rs | 12 +++++++----- 2 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 src/amdemod.rs diff --git a/src/amdemod.rs b/src/amdemod.rs new file mode 100644 index 0000000..359311e --- /dev/null +++ b/src/amdemod.rs @@ -0,0 +1,22 @@ +pub struct SquaringAMDemodulator<'a> { + iterator: Box + 'a>, +} + +impl<'a> SquaringAMDemodulator<'a> { + pub fn from(iterator1: I) -> SquaringAMDemodulator<'a> where I: Iterator + 'a { + SquaringAMDemodulator { + iterator: Box::new(iterator1), + } + } +} + +impl<'a> Iterator for SquaringAMDemodulator<'a> { + type Item = f32; + + fn next(&mut self) -> Option { + match self.iterator.next() { + Some(x) => Some((x * x).sqrt()), + None => None + } + } +} diff --git a/src/main.rs b/src/main.rs index 402532b..34c0217 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,18 +5,20 @@ mod sinegen; mod firfilter; mod resamplers; mod mixer; +mod amdemod; use utils::float_sample_iterator; use sinegen::SineGenerator; use firfilter::FIRFilter; use mixer::Mixer; +use amdemod::SquaringAMDemodulator; fn main() { let carrier_freq = 2400.0; let sample_freq = 48000.0; - let mut reader = match hound::WavReader::open("noaa19_short.wav") { + let mut reader = match hound::WavReader::open("noaa19_20160814_mono.wav") { Err(e) => panic!("Could not open inputfile: {}", e), Ok(r) => r }; @@ -28,6 +30,8 @@ fn main() { let sample_rate = reader.spec().sample_rate; println!("Samplerate: {}", sample_rate); + println!("{} Samples", reader.len()); + let samples = float_sample_iterator(&mut reader); let coeffs = vec![ -7.383784e-03, @@ -95,10 +99,8 @@ fn main() { -7.383784e-03]; - - let sine_gen = SineGenerator::new(carrier_freq, 1.0, sample_freq); - let mixer = Mixer::from(sine_gen, samples); - let filter = FIRFilter::from(mixer, coeffs); + let demod = SquaringAMDemodulator::from(samples); + let filter = FIRFilter::from(demod, coeffs); let spec = hound::WavSpec { channels: 1,