Adding CW decoder.

This commit is contained in:
Marat Fayzullin 2023-01-07 18:58:15 -05:00 committed by Marat Fayzullin
parent c5fc6db19e
commit ec2819b886
3 changed files with 28 additions and 1 deletions

View File

@ -2,7 +2,7 @@ from csdr.chain.demodulator import ServiceDemodulator, SecondaryDemodulator, Dia
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
from pycsdr.modules import Convert, FmDemod, Agc, TimingRecovery, DBPskDecoder, VaricodeDecoder, CwDecoder, RealPart
from pycsdr.types import Format
from owrx.aprs.module import DirewolfModule
from digiham.modules import FskDemodulator, PocsagDecoder
@ -89,3 +89,26 @@ class PskDemodulator(SecondaryDemodulator, SecondarySelectorChain):
self.sampleRate = sampleRate
secondary_samples_per_bits = int(round(self.sampleRate / self.baudRate)) & ~3
self.replace(1, TimingRecovery(secondary_samples_per_bits, 0.5, 2, useQ=True))
class CwDemodulator(SecondaryDemodulator, SecondarySelectorChain):
def __init__(self, baudRate: float):
self.baudRate = baudRate
# this is an assumption, we will adjust in setSampleRate
self.sampleRate = 12000
workers = [
RealPart(),
Agc(Format.FLOAT),
CwDecoder(self.sampleRate),
]
super().__init__(workers)
def getBandwidth(self):
return self.baudRate
def setSampleRate(self, sampleRate: int) -> None:
if sampleRate == self.sampleRate:
return
self.sampleRate = sampleRate
self.replace(1, CwDecoder(sampleRate))

View File

@ -613,6 +613,9 @@ class DspManager(SdrSourceEventClient, ClientDemodulatorSecondaryDspEventClient)
elif mod == "bpsk63":
from csdr.chain.digimodes import PskDemodulator
return PskDemodulator(62.5)
elif mod == "cwdecoder":
from csdr.chain.digimodes import CwDemodulator
return CwDemodulator(10.0)
def setSecondaryDemodulator(self, mod):
demodulator = self._getSecondaryDemodulator(mod)

View File

@ -138,6 +138,7 @@ class Modes(object):
requirements=["pocsag"],
squelch=False,
),
DigitalMode("cwdecoder", "CWDecoder", underlying=["cw"]),
]
@staticmethod