From 6b7327df3db068889376f97b82f8e54659ece238 Mon Sep 17 00:00:00 2001 From: DJ2LS Date: Sat, 9 Mar 2024 11:42:40 +0100 Subject: [PATCH] added some audio debugging and reduced a not needed thread in demodulator --- modem/demodulator.py | 40 ++++++++++++++++------------------------ modem/modem.py | 7 ------- 2 files changed, 16 insertions(+), 31 deletions(-) diff --git a/modem/demodulator.py b/modem/demodulator.py index 554ca0ef..958d1d52 100644 --- a/modem/demodulator.py +++ b/modem/demodulator.py @@ -27,7 +27,7 @@ class Demodulator(): 'decoding_thread': None } - def __init__(self, config, audio_rx_q, modem_rx_q, data_q_rx, states, event_manager, fft_queue): + def __init__(self, config, audio_rx_q, data_q_rx, states, event_manager, fft_queue): self.log = structlog.get_logger("Demodulator") self.tuning_range_fmin = config['MODEM']['tuning_range_fmin'] @@ -40,7 +40,6 @@ class Demodulator(): self.is_codec2_traffic_cooldown = 5 self.audio_received_queue = audio_rx_q - self.modem_received_queue = modem_rx_q self.data_queue_received = data_q_rx self.states = states @@ -136,6 +135,9 @@ class Demodulator(): self.MODE_DICT[mode]['decoding_thread'].start() def sd_input_audio_callback(self, indata: np.ndarray, frames: int, time, status) -> None: + if status: + self.log.warning("[AUDIO STATUS]", status=status) + audio_48k = np.frombuffer(indata, dtype=np.int16) audio_8k = self.resampler.resample48_to_8(audio_48k) @@ -158,27 +160,6 @@ class Demodulator(): elif decode: audiobuffer.push(audio_8k_level_adjusted) - def worker_received(self) -> None: - """Worker for FIFO queue for processing received frames""" - while True: - data = self.modem_received_queue.get() - self.log.debug("[MDM] worker_received: received data!") - # data[0] = bytes_out - # data[1] = freedv session - # data[2] = bytes_per_frame - # data[3] = snr - - item = { - 'payload': data[0], - 'freedv': data[1], - 'bytes_per_frame': data[2], - 'snr': data[3], - 'frequency_offset': self.get_frequency_offset(data[1]), - } - - self.data_queue_received.put(item) - self.modem_received_queue.task_done() - def get_frequency_offset(self, freedv: ctypes.c_void_p) -> float: """ Ask codec2 for the calculated (audio) frequency offset of the received signal. @@ -247,7 +228,16 @@ class Demodulator(): snr = self.calculate_snr(freedv) self.get_scatter(freedv) - self.modem_received_queue.put([bytes_out, freedv, bytes_per_frame, snr]) + item = { + 'payload': bytes_out, + 'freedv': freedv, + 'bytes_per_frame': bytes_per_frame, + 'snr': snr, + 'frequency_offset': self.get_frequency_offset(freedv), + } + self.data_queue_received.put(item) + + state_buffer = [] except Exception as e: error_message = str(e) @@ -257,6 +247,7 @@ class Demodulator(): self.log.debug( "[MDM] [demod_audio] demod loop ended", mode=mode_name, e=e ) + def tci_rx_callback(self) -> None: """ Callback for TCI RX @@ -297,6 +288,7 @@ class Demodulator(): frames_per_burst = min(frames_per_burst, 1) frames_per_burst = max(frames_per_burst, 5) + # FIXME frames_per_burst = 1 codec2.api.freedv_set_frames_per_burst(self.dat0_datac1_freedv, frames_per_burst) diff --git a/modem/modem.py b/modem/modem.py index 55393c40..e64bcb96 100644 --- a/modem/modem.py +++ b/modem/modem.py @@ -74,14 +74,12 @@ class RF: # Make sure our resampler will work assert (self.AUDIO_SAMPLE_RATE / self.MODEM_SAMPLE_RATE) == codec2.api.FDMDV_OS_48 # type: ignore - self.modem_received_queue = queue.Queue() self.audio_received_queue = queue.Queue() self.data_queue_received = queue.Queue() self.fft_queue = fft_queue self.demodulator = demodulator.Demodulator(self.config, self.audio_received_queue, - self.modem_received_queue, self.data_queue_received, self.states, self.event_manager, @@ -405,11 +403,6 @@ class RF: self.freedv_datac4_tx = codec2.open_instance(codec2.FREEDV_MODE.datac4.value) self.freedv_datac13_tx = codec2.open_instance(codec2.FREEDV_MODE.datac13.value) - def init_data_threads(self): - worker_received = threading.Thread( - target=self.demodulator.worker_received, name="WORKER_THREAD", daemon=True - ) - worker_received.start() # Low level modem audio transmit def transmit_audio(self, audio_48k) -> None: