port more from osmocom-analog

This commit is contained in:
2025-04-10 20:25:11 -04:00
parent 8a6e51c877
commit 3c2f3365e8
4 changed files with 130 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
struct IIRFilter {
iter: i32,
a0: f64,
a1: f64,
a2: f64,
b1: f64,
b2: f64,
z1: f64,
z2: f64,
}
impl IIRFilter {
pub fn lowpass_init(&mut self, frequency: f64, samplerate: i32, iterations: i32) {
}
pub fn highpass_init(&mut self, frequency: f64, samplerate: i32, iterations: i32) {
}
pub fn bandpass_init(&mut self, frequency: f64, samplerate: i32, iterations: i32) {
}
pub fn notch_init(&mut self, frequency: f64, samplerate: i32, iterations: i32, Q: f64) {
}
pub fn process(&mut self, samples: Sample, length: i32) {
}
pub fn process_baseband(&mut self, filter: IIRFilter, baseband: f64, length: i32) {
}
}

View File

@@ -0,0 +1,45 @@
enum PagingSignal {
NONE = 0,
TONE,
NOTONE,
POSITIVE,
NEGATIVE,
}
struct Sender {
// System Info
channel: char,
send_freq: f64,
recv_freq: f64,
// FM/AM levels
am: i32,
max_deviation: f64,
max_modulation: f64,
speech_deviation: f64,
modulation_index: f64,
max_display: f64,
// Audio
audio: void,
device: char,
audio_open: void,
audio_start: i32,
audio_close: void,
audio_write: i32,
audio_get_tosend: i32,
samplerate: i32,
samplerate_state: SampleRate,
rx_gain: f64,
tx_gain: f64,
pre_emphasis: i32,
de_emphasis: i32,
epmphasis_state: EmphasisState,
// Loopback
loopback: i32,
// Record & Playback
}

View File

@@ -3,6 +3,10 @@ use std::io::{stdout, BufWriter};
mod sdr;
mod amps;
mod libmobile_sender;
mod iir_filter;
mod samplerate;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let stdout = stdout();
let message = String::from("Welcome to the Cellular Revolution!");

View File

@@ -0,0 +1,45 @@
struct SampleRate {
factor: f64,
filter_cutoff: f64,
down: DownSampler,
up: UpSampler,
}
struct DownSampler {
lp: IIRFilter,
last_sample: Sample,
in_index: f64,
}
struct UpSampler {
lp: IIRFilter,
current_sample: Sample,
last_sample: Sample,
in_index: f64,
}
impl SampleRate {
pub fn init(&mut self, low_samplerate: f64, high_samplerate: f64, filter_cutoff: f64) -> Result<(), i32> {
// Implementation goes here
Ok(())
// or Err(error_code) if there's an error
}
pub fn downsample(&mut self, state: SampleRate, samples: Sample, input_num: i32) -> Result<(), i32> {
Ok(())
}
pub fn upsample_input_num(&mut self, state: SampleRate, output_num: i32) -> Result<(), i32> {
Ok(())
}
pub fn upsample_output_num(&mut self, state: SampleRate, input_num: i32) -> Result<(), i32> {
Ok(())
}
pub fn upsample(&mut self, state: SampleRate, input: Sample, input_num: i32, output: Sample, output_num: i32) {
}
}