From c1c97e48830a6ab12ef844c5fe18f10213959b68 Mon Sep 17 00:00:00 2001 From: KubaPro010 Date: Sun, 15 Feb 2026 13:29:09 +0100 Subject: [PATCH] also delay pilot --- dsp/delay.h | 2 ++ modulation/stereo_encoder.c | 6 ++++++ modulation/stereo_encoder.h | 3 ++- src/fm95.c | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/dsp/delay.h b/dsp/delay.h index 9a95336..940b94c 100644 --- a/dsp/delay.h +++ b/dsp/delay.h @@ -1,4 +1,6 @@ #include +#include +#include typedef struct delay_line_t { float *buffer; diff --git a/modulation/stereo_encoder.c b/modulation/stereo_encoder.c index f7a80a9..f28b1bc 100644 --- a/modulation/stereo_encoder.c +++ b/modulation/stereo_encoder.c @@ -7,7 +7,9 @@ void init_stereo_encoder(StereoEncoder* st, uint8_t multiplier, Oscillator* osc, st->pilot_volume = pilot_volume; st->audio_volume = audio_volume; #ifdef STEREO_SSB + init_delay_line(&st->delay_pilot, osc->sample_rate); init_delay_line(&st->delay, osc->sample_rate); + set_delay_line(&st->delay_pilot, STEREO_SSB*2+1); set_delay_line(&st->delay, STEREO_SSB*2+1); #endif } @@ -30,6 +32,9 @@ float stereo_encode(StereoEncoder* st, uint8_t enabled, float left, float right, #endif float signalx1 = get_oscillator_sin_multiplier_ni(st->osc, st->multiplier); + #ifdef STEREO_SSB + signalx1 = delay_line(&st->delay_pilot, signalx1); + #endif float signalx2 = get_oscillator_sin_multiplier_ni(st->osc, st->multiplier * 2.0f); #ifdef STEREO_SSB @@ -42,4 +47,5 @@ float stereo_encode(StereoEncoder* st, uint8_t enabled, float left, float right, void exit_stereo_encoder(StereoEncoder* st) { exit_delay_line(&st->delay); + exit_delay_line(&st->delay_pilot); } \ No newline at end of file diff --git a/modulation/stereo_encoder.h b/modulation/stereo_encoder.h index 5cb6449..08a7b19 100644 --- a/modulation/stereo_encoder.h +++ b/modulation/stereo_encoder.h @@ -14,7 +14,8 @@ typedef struct Oscillator* osc; float audio_volume; float pilot_volume; - struct delay_line_t delay; + delay_line_t delay; + delay_line_t delay_pilot; } StereoEncoder; void init_stereo_encoder(StereoEncoder *st, uint8_t multiplier, Oscillator *osc, float audio_volume, float pilot_volume); diff --git a/src/fm95.c b/src/fm95.c index eb1a8ae..e975bf9 100644 --- a/src/fm95.c +++ b/src/fm95.c @@ -145,7 +145,7 @@ void cleanup_runtime(FM95_Runtime* runtime, const FM95_Config config) { } #ifdef STEREO_SSB firhilbf_destroy(runtime->stereo_hilbert); - exit_stereo_encoder(runtime->stencode); + exit_stereo_encoder(&runtime->stencode); #endif }