Squaring AM demodulator works

This commit is contained in:
Sebastian 2016-11-24 19:40:22 +01:00
parent 9625dd9689
commit 2ff62ea900
2 changed files with 29 additions and 5 deletions

22
src/amdemod.rs Normal file
View File

@ -0,0 +1,22 @@
pub struct SquaringAMDemodulator<'a> {
iterator: Box<Iterator<Item=f32> + 'a>,
}
impl<'a> SquaringAMDemodulator<'a> {
pub fn from<I>(iterator1: I) -> SquaringAMDemodulator<'a> where I: Iterator<Item=f32> + 'a {
SquaringAMDemodulator {
iterator: Box::new(iterator1),
}
}
}
impl<'a> Iterator for SquaringAMDemodulator<'a> {
type Item = f32;
fn next(&mut self) -> Option<Self::Item> {
match self.iterator.next() {
Some(x) => Some((x * x).sqrt()),
None => None
}
}
}

View File

@ -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,