From fa73cf11e1d8ce10a75f139220bd7e0c49943ab8 Mon Sep 17 00:00:00 2001 From: Marat Fayzullin Date: Sun, 5 May 2024 12:01:21 -0400 Subject: [PATCH] Added debugging code to print chains and their individual objects. --- csdr/chain/__init__.py | 15 +++++++++++++++ csdr/chain/selector.py | 29 +++++++++++++++++++++++++++++ owrx/version.py | 2 +- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/csdr/chain/__init__.py b/csdr/chain/__init__.py index bebe121d..c932b941 100644 --- a/csdr/chain/__init__.py +++ b/csdr/chain/__init__.py @@ -3,6 +3,10 @@ from pycsdr.modules import Buffer from pycsdr.types import Format from typing import Union, Callable, Optional +import logging + +logger = logging.getLogger(__name__) + class Chain(Module): def __init__(self, workers): @@ -145,3 +149,14 @@ class Chain(Module): return self.workers[-1].getOutputFormat() else: raise BufferError("getOutputFormat on empty chain") + + def printWorkers(self, prefix: str = ""): + logger.debug("{0}{1}".format(prefix, self)) + for w in self.workers: + if isinstance(w, Chain): + w.printWorkers(prefix + " ") + else: + logger.debug("{0} {1}".format(prefix, w)) + + def __str__(self): + return "{0}({1} workers)".format(type(self).__name__, len(self.workers)) diff --git a/csdr/chain/selector.py b/csdr/chain/selector.py index dd13236b..e3186c87 100644 --- a/csdr/chain/selector.py +++ b/csdr/chain/selector.py @@ -77,6 +77,14 @@ class Decimator(Chain): self.inputRate = inputRate self._reconfigure() + def __str__(self): + decimation, fraction = self._getDecimation(self.outputRate) + transition = 0.15 * (self.outputRate / float(self.inputRate)) + cutoff = 0.5 * decimation / (self.inputRate / self.outputRate) + return "{0}(decimation {1} * {2}, transition {3}, cutoff {4})".format( + type(self).__name__, decimation, fraction, transition, cutoff + ) + class Selector(Chain): def __init__(self, inputRate: int, outputRate: int, withSquelch: bool = True): @@ -177,10 +185,21 @@ class Selector(Chain): self.decimation.setInputRate(inputRate) self._updateShift() + def __str__(self): + return "{0}({1} => offset {2} => bandpass {3}..{4} => {5})".format( + type(self).__name__, + self.inputRate, + self.frequencyOffset, + self.bandpassCutoffs[0], + self.bandpassCutoffs[1], + self.outputRate + ) + class SecondarySelector(Chain): def __init__(self, sampleRate: int, bandwidth: float): self.sampleRate = sampleRate + self.bandwidth = bandwidth self.frequencyOffset = 0 self.shift = Shift(0.0) cutoffRate = bandwidth / sampleRate @@ -196,6 +215,16 @@ class SecondarySelector(Chain): return self.shift.setRate(-offset / self.sampleRate) + def __str__(self): + return "{0}({1} => offset {2} => bandpass {3}..{4} => {5})".format( + type(self).__name__, + self.sampleRate, + self.frequencyOffset, + -self.bandwidth, + self.bandwidth, + self.sampleRate + ) + class SelectorError(Exception): pass diff --git a/owrx/version.py b/owrx/version.py index c919fde0..65b7d229 100644 --- a/owrx/version.py +++ b/owrx/version.py @@ -1,5 +1,5 @@ from distutils.version import LooseVersion -_versionstring = "1.2.57" +_versionstring = "1.2.58" looseversion = LooseVersion(_versionstring) openwebrx_version = "v{0}".format(looseversion)