Squaring AM demodulator works
This commit is contained in:
parent
9625dd9689
commit
2ff62ea900
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
12
src/main.rs
12
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,
|
||||
|
|
Loading…
Reference in New Issue