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 firfilter;
|
||||||
mod resamplers;
|
mod resamplers;
|
||||||
mod mixer;
|
mod mixer;
|
||||||
|
mod amdemod;
|
||||||
|
|
||||||
use utils::float_sample_iterator;
|
use utils::float_sample_iterator;
|
||||||
use sinegen::SineGenerator;
|
use sinegen::SineGenerator;
|
||||||
use firfilter::FIRFilter;
|
use firfilter::FIRFilter;
|
||||||
use mixer::Mixer;
|
use mixer::Mixer;
|
||||||
|
use amdemod::SquaringAMDemodulator;
|
||||||
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let carrier_freq = 2400.0;
|
let carrier_freq = 2400.0;
|
||||||
let sample_freq = 48000.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),
|
Err(e) => panic!("Could not open inputfile: {}", e),
|
||||||
Ok(r) => r
|
Ok(r) => r
|
||||||
};
|
};
|
||||||
|
@ -28,6 +30,8 @@ fn main() {
|
||||||
let sample_rate = reader.spec().sample_rate;
|
let sample_rate = reader.spec().sample_rate;
|
||||||
println!("Samplerate: {}", sample_rate);
|
println!("Samplerate: {}", sample_rate);
|
||||||
|
|
||||||
|
println!("{} Samples", reader.len());
|
||||||
|
|
||||||
let samples = float_sample_iterator(&mut reader);
|
let samples = float_sample_iterator(&mut reader);
|
||||||
|
|
||||||
let coeffs = vec![ -7.383784e-03,
|
let coeffs = vec![ -7.383784e-03,
|
||||||
|
@ -95,10 +99,8 @@ fn main() {
|
||||||
-7.383784e-03];
|
-7.383784e-03];
|
||||||
|
|
||||||
|
|
||||||
|
let demod = SquaringAMDemodulator::from(samples);
|
||||||
let sine_gen = SineGenerator::new(carrier_freq, 1.0, sample_freq);
|
let filter = FIRFilter::from(demod, coeffs);
|
||||||
let mixer = Mixer::from(sine_gen, samples);
|
|
||||||
let filter = FIRFilter::from(mixer, coeffs);
|
|
||||||
|
|
||||||
let spec = hound::WavSpec {
|
let spec = hound::WavSpec {
|
||||||
channels: 1,
|
channels: 1,
|
||||||
|
|
Loading…
Reference in New Issue