Switching to jketterl's RTTY decoder.

This commit is contained in:
Marat Fayzullin 2023-09-12 20:14:51 -04:00
parent c366bd3bed
commit fac634ca8b
3 changed files with 28 additions and 28 deletions

View File

@ -3,7 +3,7 @@ from csdr.module.msk144 import Msk144Module, ParserAdapter
from owrx.audio.chopper import AudioChopper, AudioChopperParser
from owrx.aprs.kiss import KissDeframer
from owrx.aprs import Ax25Parser, AprsParser
from pycsdr.modules import Convert, FmDemod, Agc, TimingRecovery, DBPskDecoder, VaricodeDecoder, JKRttyDecoder, BaudotDecoder, Lowpass, RttyDecoder, CwDecoder, SstvDecoder, FaxDecoder, Shift
from pycsdr.modules import Convert, FmDemod, Agc, TimingRecovery, DBPskDecoder, VaricodeDecoder, RttyDecoder, BaudotDecoder, Lowpass, MFRttyDecoder, CwDecoder, SstvDecoder, FaxDecoder, Shift
from pycsdr.types import Format
from owrx.aprs.direwolf import DirewolfModule
from owrx.sstv import SstvParser
@ -88,7 +88,7 @@ class PskDemodulator(SecondaryDemodulator, SecondarySelectorChain):
self.replace(1, TimingRecovery(Format.COMPLEX_FLOAT, secondary_samples_per_bits, 0.5, 2))
class JKRttyDemodulator(SecondaryDemodulator, SecondarySelectorChain):
class RttyDemodulator(SecondaryDemodulator, SecondarySelectorChain):
def __init__(self, baudRate, bandWidth, invert=False):
self.baudRate = baudRate
self.bandWidth = bandWidth
@ -103,7 +103,7 @@ class JKRttyDemodulator(SecondaryDemodulator, SecondarySelectorChain):
FmDemod(),
Lowpass(Format.FLOAT, cutoff),
TimingRecovery(Format.FLOAT, secondary_samples_per_bit, loop_gain, 10),
JKRttyDecoder(invert),
RttyDecoder(invert),
BaudotDecoder(),
]
super().__init__(workers)
@ -145,7 +145,7 @@ class CwDemodulator(SecondaryDemodulator, SecondarySelectorChain):
self.replace(2, CwDecoder(sampleRate, self.offset, int(self.baudRate)))
class RttyDemodulator(SecondaryDemodulator, SecondarySelectorChain):
class MFRttyDemodulator(SecondaryDemodulator, SecondarySelectorChain):
def __init__(self, targetWidth: float, baudRate: float, reverse: bool):
self.sampleRate = 12000
self.offset = 550
@ -155,7 +155,7 @@ class RttyDemodulator(SecondaryDemodulator, SecondarySelectorChain):
workers = [
Shift((self.targetWidth/2 + self.offset) / self.sampleRate),
Agc(Format.COMPLEX_FLOAT),
RttyDecoder(self.sampleRate, self.offset, int(self.targetWidth), self.baudRate, self.reverse),
MFRttyDecoder(self.sampleRate, self.offset, int(self.targetWidth), self.baudRate, self.reverse),
]
super().__init__(workers)
@ -167,7 +167,7 @@ class RttyDemodulator(SecondaryDemodulator, SecondarySelectorChain):
return
self.sampleRate = sampleRate
self.replace(0, Shift((self.targetWidth/2 + self.offset) / sampleRate))
self.replace(2, RttyDecoder(sampleRate, self.offset, int(self.targetWidth), self.baudRate, self.reverse))
self.replace(2, MFRttyDecoder(sampleRate, self.offset, int(self.targetWidth), self.baudRate, self.reverse))
class SstvDemodulator(ServiceDemodulator, DialFrequencyReceiver):

View File

@ -651,24 +651,24 @@ class DspManager(SdrSourceEventClient, ClientDemodulatorSecondaryDspEventClient)
elif mod == "bpsk63":
from csdr.chain.digimodes import PskDemodulator
return PskDemodulator(62.5)
elif mod == "jkrtty170":
from csdr.chain.digimodes import JKRttyDemodulator
return JKRttyDemodulator(45.45, 170)
elif mod == "jkrtty450":
from csdr.chain.digimodes import JKRttyDemodulator
return JKRttyDemodulator(50, 450, invert=True)
elif mod == "jkrtty85":
from csdr.chain.digimodes import JKRttyDemodulator
return JKRttyDemodulator(50, 85, invert=True)
elif mod == "rtty170":
from csdr.chain.digimodes import RttyDemodulator
return RttyDemodulator(45.45, 170)
elif mod == "rtty450":
from csdr.chain.digimodes import RttyDemodulator
return RttyDemodulator(50, 450, invert=True)
elif mod == "rtty85":
from csdr.chain.digimodes import RttyDemodulator
return RttyDemodulator(50, 85, invert=True)
elif mod == "cwdecoder":
from csdr.chain.digimodes import CwDemodulator
return CwDemodulator(75.0)
elif mod == "rtty170":
from csdr.chain.digimodes import RttyDemodulator
return RttyDemodulator(170.0, 45.45, reverse = False)
elif mod == "rtty450":
from csdr.chain.digimodes import RttyDemodulator
return RttyDemodulator(450.0, 50.0, reverse = True)
elif mod == "mfrtty170":
from csdr.chain.digimodes import MFRttyDemodulator
return MFRttyDemodulator(170.0, 45.45, reverse = False)
elif mod == "mfrtty450":
from csdr.chain.digimodes import MFRttyDemodulator
return MFRttyDemodulator(450.0, 50.0, reverse = True)
elif mod == "sstv":
from csdr.chain.digimodes import SstvDemodulator
return SstvDemodulator()

View File

@ -134,10 +134,9 @@ class Modes(object):
AnalogMode("drm", "DRM", bandpass=Bandpass(-5000, 5000), requirements=["drm"], squelch=False),
DigitalMode("bpsk31", "BPSK31", underlying=["usb"]),
DigitalMode("bpsk63", "BPSK63", underlying=["usb"]),
# Testing jketterl's RTTY decoder
DigitalMode("jkrtty170", "RTTY-170 / 45", underlying=["usb", "lsb"]),
DigitalMode("jkrtty450", "RTTY-450 / 50N", underlying=["usb", "lsb"]),
DigitalMode("jkrtty85", "RTTY-85 / 50N", underlying=["usb", "lsb"]),
DigitalMode("rtty170", "RTTY-170 (45)", underlying=["usb", "lsb"]),
DigitalMode("rtty450", "RTTY-450 (50N)", underlying=["usb", "lsb"]),
DigitalMode("rtty85", "RTTY-85 (50N)", underlying=["usb", "lsb"]),
WsjtMode("ft8", "FT8"),
WsjtMode("ft4", "FT4"),
WsjtMode("jt65", "JT65"),
@ -185,9 +184,10 @@ class Modes(object):
service=True,
squelch=False,
),
DigitalMode("cwdecoder", "CWDecoder", underlying=["usb"]),
DigitalMode("rtty170", "RTTY-170", underlying=["usb"]),
DigitalMode("rtty450", "RTTY-450", underlying=["usb"]),
DigitalMode("cwdecoder", "CW Decoder", underlying=["usb"]),
# Replaced by Jakob's RTTY decoder
DigitalMode("mfrtty170", "RTTY-170", underlying=["usb"]),
DigitalMode("mfrtty450", "RTTY-450", underlying=["usb"]),
DigitalMode(
"sstv",
"SSTV",