I want to die
This commit is contained in:
58
src/main.rs
58
src/main.rs
@ -19,7 +19,7 @@ use nco::Nco;
|
||||
use plotters::prelude::*;
|
||||
use fft::DFTAlgorithm;
|
||||
|
||||
use crate::{bfsk::BFSKDem, fft::{dft::NaiveDFT, mixed_radix::MixedRadixFFT, rader::RaderFFT, radix2::Radix2FFT, windows, FFT}};
|
||||
use crate::{bfsk::BFSKDem, fft::{create_fft, dft::NaiveDFT, mixed_radix::MixedRadixFFT, rader::RaderFFT, radix2::Radix2FFT, windows, FFTDirection, FFT}};
|
||||
|
||||
// Utilities
|
||||
fn map<T>(input: T, in_min: T, in_max: T, out_min: T, out_max: T) -> T
|
||||
@ -29,15 +29,46 @@ where
|
||||
((input - in_min.clone()) / (in_max - in_min)) * (out_max - out_min.clone()) + out_min
|
||||
}
|
||||
|
||||
|
||||
fn main() {
|
||||
modulate();
|
||||
//modulate();
|
||||
test();
|
||||
}
|
||||
|
||||
fn test()
|
||||
{
|
||||
let mut o1 = Nco::new(PI / 2.0);
|
||||
let mut o2 = Nco::new(PI / 4.0);
|
||||
let sample_count = 4800;
|
||||
//let mut fft = FFT::new(sample_count, windows::rectangular);
|
||||
let mut dft = NaiveDFT::create(sample_count, FFTDirection::Forward);
|
||||
let mut fft = FFT::new(sample_count, windows::rectangular);
|
||||
//let mut fft = RaderFFT::create(sample_count, FFTDirection::Forward);
|
||||
let mut fft_input = vec![Complex32::zero(); sample_count];
|
||||
|
||||
for x in fft_input.iter_mut()
|
||||
{
|
||||
*x = o1.cexp() + o2.cexp();
|
||||
o1.step();
|
||||
o2.step();
|
||||
}
|
||||
|
||||
fft.execute(&fft_input);
|
||||
dft.execute(&fft_input);
|
||||
|
||||
let mut out_file = File::create("out.csv").unwrap();
|
||||
for (x, y) in fft.get_output().iter().zip(dft.get_output())
|
||||
{
|
||||
out_file.write_all(
|
||||
format!("{},{},\n", x.mag(), y.mag()).as_bytes()
|
||||
).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
fn modulate() {
|
||||
let sample_rate = 44100;
|
||||
let mut frequency = 2000.0; //HZ
|
||||
let mut bandwidth = 500.0; //HZ
|
||||
let frequency = 2000.0; //HZ
|
||||
let bandwidth = 1000.0; //HZ
|
||||
println!("deviation: {}", PI * (bandwidth / sample_rate as f32));
|
||||
|
||||
let path = "s.txt";
|
||||
let file = File::open(path).unwrap();
|
||||
@ -61,7 +92,7 @@ fn modulate() {
|
||||
println!("{} samples/bit", sample_rate / baud_rate);
|
||||
let mut bfsk = BFSKMod::new(
|
||||
sample_rate / baud_rate,
|
||||
2. * PI * (bandwidth / sample_rate as f32),
|
||||
PI * 0.05, //PI * (bandwidth / sample_rate as f32),
|
||||
&mut bit_stream,
|
||||
);
|
||||
|
||||
@ -90,6 +121,17 @@ fn modulate() {
|
||||
lo.step();
|
||||
}
|
||||
writer.finalize().unwrap();
|
||||
let mut tfft = FFT::new(44100, windows::rectangular);
|
||||
tfft.execute(&output_samples);
|
||||
|
||||
// Write csv
|
||||
let mut out_csv = File::create("out.csv").unwrap();
|
||||
for x in output_samples.iter().take(4400)
|
||||
{
|
||||
out_csv.write_all(
|
||||
format!("{},\n", x.mag()).as_bytes()
|
||||
).unwrap();
|
||||
}
|
||||
|
||||
let mut of = File::create("out.txt").unwrap();
|
||||
|
||||
@ -97,7 +139,7 @@ fn modulate() {
|
||||
let mut lodem = Nco::new(-2. * PI * (frequency / sample_rate as f32));
|
||||
let mut demod = BFSKDem::new(
|
||||
sample_rate / baud_rate,
|
||||
PI * (bandwidth / sample_rate as f32),
|
||||
PI * 0.05, //PI * (bandwidth / sample_rate as f32),
|
||||
);
|
||||
for chunk in output_samples.chunks((sample_rate / baud_rate) as usize) {
|
||||
let base_chunk: Vec<Complex32> = chunk
|
||||
@ -109,7 +151,7 @@ fn modulate() {
|
||||
.collect();
|
||||
let bit = demod.demod(base_chunk.as_slice());
|
||||
bits.push(bit);
|
||||
println!("{:?}", bit)
|
||||
//println!("{:?}", bit)
|
||||
}
|
||||
|
||||
for b in bits.chunks(8) {
|
||||
|
||||
Reference in New Issue
Block a user