mirror of
https://github.com/jketterl/openwebrx.git
synced 2026-01-05 16:20:23 +01:00
add some first structure for DAB decoding
This commit is contained in:
parent
625afcfbbb
commit
5ddd719364
21
csdr/chain/dablin.py
Normal file
21
csdr/chain/dablin.py
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
from csdr.chain.demodulator import BaseDemodulatorChain, FixedIfSampleRateChain, FixedAudioRateChain, HdAudio
|
||||
from csdreti.modules import EtiDecoder
|
||||
from owrx.dab.dablin import DablinModule
|
||||
from pycsdr.modules import Downmix
|
||||
from pycsdr.types import Format
|
||||
|
||||
|
||||
class Dablin(BaseDemodulatorChain, FixedIfSampleRateChain, FixedAudioRateChain, HdAudio):
|
||||
def __init__(self):
|
||||
workers = [
|
||||
EtiDecoder(),
|
||||
DablinModule(),
|
||||
Downmix(Format.FLOAT),
|
||||
]
|
||||
super().__init__(workers)
|
||||
|
||||
def getFixedIfSampleRate(self) -> int:
|
||||
return 2048000
|
||||
|
||||
def getFixedAudioRate(self) -> int:
|
||||
return 48000
|
||||
11
owrx/dab/dablin.py
Normal file
11
owrx/dab/dablin.py
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
from pycsdr.modules import ExecModule
|
||||
from pycsdr.types import Format
|
||||
|
||||
|
||||
class DablinModule(ExecModule):
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
Format.CHAR,
|
||||
Format.FLOAT,
|
||||
["dablin", "-s", "0x15DC", "-p"]
|
||||
)
|
||||
|
|
@ -40,7 +40,7 @@ class ClientDemodulatorChain(Chain):
|
|||
self.hdOutputRate = hdOutputRate
|
||||
self.secondaryDspEventReceiver = secondaryDspEventReceiver
|
||||
self.selector = Selector(sampleRate, outputRate)
|
||||
self.selectorBuffer = Buffer(Format.COMPLEX_FLOAT)
|
||||
self.selectorBuffer = Buffer(Format.COMPLEX_FLOAT, size=524288)
|
||||
self.audioBuffer = None
|
||||
self.demodulator = demod
|
||||
self.secondaryDemodulator = None
|
||||
|
|
@ -573,6 +573,9 @@ class DspManager(SdrSourceEventClient, ClientDemodulatorSecondaryDspEventClient)
|
|||
elif demod == "freedv":
|
||||
from csdr.chain.freedv import FreeDV
|
||||
return FreeDV()
|
||||
elif demod == "dab":
|
||||
from csdr.chain.dablin import Dablin
|
||||
return Dablin()
|
||||
elif demod == "empty":
|
||||
from csdr.chain.analog import Empty
|
||||
return Empty()
|
||||
|
|
|
|||
|
|
@ -90,6 +90,7 @@ class FeatureDetector(object):
|
|||
"dumphfdl": ["dumphfdl"],
|
||||
"dumpvdl2": ["dumpvdl2"],
|
||||
"redsea": ["redsea"],
|
||||
"dab": ["csdreti", "dablin"]
|
||||
}
|
||||
|
||||
def feature_availability(self):
|
||||
|
|
@ -648,3 +649,26 @@ class FeatureDetector(object):
|
|||
`redsea`.
|
||||
"""
|
||||
return self.command_is_runnable("redsea --version")
|
||||
|
||||
def has_csdreti(self):
|
||||
"""
|
||||
TODO: feature description
|
||||
"""
|
||||
required_version = LooseVersion("0.1")
|
||||
|
||||
try:
|
||||
from csdreti.modules import csdreti_version
|
||||
from csdreti.modules import version as pycsdreti_version
|
||||
|
||||
return (
|
||||
LooseVersion(csdreti_version) >= required_version
|
||||
and LooseVersion(pycsdreti_version) >= required_version
|
||||
)
|
||||
except ImportError:
|
||||
return False
|
||||
|
||||
def has_dablin(self):
|
||||
"""
|
||||
TODO: feature description
|
||||
"""
|
||||
return self.command_is_runnable("dablin -h")
|
||||
|
|
|
|||
|
|
@ -132,6 +132,7 @@ class Modes(object):
|
|||
"freedv", "FreeDV", bandpass=Bandpass(300, 3000), requirements=["digital_voice_freedv"], squelch=False
|
||||
),
|
||||
AnalogMode("drm", "DRM", bandpass=Bandpass(-5000, 5000), requirements=["drm"], squelch=False),
|
||||
AnalogMode("dab", "DAB", bandpass=Bandpass(-1e6, 1e6), requirements=["dab"], squelch=False),
|
||||
DigitalMode("bpsk31", "BPSK31", underlying=["usb"]),
|
||||
DigitalMode("bpsk63", "BPSK63", underlying=["usb"]),
|
||||
DigitalMode("rtty170", "RTTY 45/170", underlying=["usb", "lsb"]),
|
||||
|
|
|
|||
Loading…
Reference in a new issue