Adding CW decoder.
This commit is contained in:
parent
c5fc6db19e
commit
ec2819b886
|
|
@ -2,7 +2,7 @@ from csdr.chain.demodulator import ServiceDemodulator, SecondaryDemodulator, Dia
|
||||||
from owrx.audio.chopper import AudioChopper, AudioChopperParser
|
from owrx.audio.chopper import AudioChopper, AudioChopperParser
|
||||||
from owrx.aprs.kiss import KissDeframer
|
from owrx.aprs.kiss import KissDeframer
|
||||||
from owrx.aprs import Ax25Parser, AprsParser
|
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 pycsdr.types import Format
|
||||||
from owrx.aprs.module import DirewolfModule
|
from owrx.aprs.module import DirewolfModule
|
||||||
from digiham.modules import FskDemodulator, PocsagDecoder
|
from digiham.modules import FskDemodulator, PocsagDecoder
|
||||||
|
|
@ -89,3 +89,26 @@ class PskDemodulator(SecondaryDemodulator, SecondarySelectorChain):
|
||||||
self.sampleRate = sampleRate
|
self.sampleRate = sampleRate
|
||||||
secondary_samples_per_bits = int(round(self.sampleRate / self.baudRate)) & ~3
|
secondary_samples_per_bits = int(round(self.sampleRate / self.baudRate)) & ~3
|
||||||
self.replace(1, TimingRecovery(secondary_samples_per_bits, 0.5, 2, useQ=True))
|
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))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -613,6 +613,9 @@ class DspManager(SdrSourceEventClient, ClientDemodulatorSecondaryDspEventClient)
|
||||||
elif mod == "bpsk63":
|
elif mod == "bpsk63":
|
||||||
from csdr.chain.digimodes import PskDemodulator
|
from csdr.chain.digimodes import PskDemodulator
|
||||||
return PskDemodulator(62.5)
|
return PskDemodulator(62.5)
|
||||||
|
elif mod == "cwdecoder":
|
||||||
|
from csdr.chain.digimodes import CwDemodulator
|
||||||
|
return CwDemodulator(10.0)
|
||||||
|
|
||||||
def setSecondaryDemodulator(self, mod):
|
def setSecondaryDemodulator(self, mod):
|
||||||
demodulator = self._getSecondaryDemodulator(mod)
|
demodulator = self._getSecondaryDemodulator(mod)
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,7 @@ class Modes(object):
|
||||||
requirements=["pocsag"],
|
requirements=["pocsag"],
|
||||||
squelch=False,
|
squelch=False,
|
||||||
),
|
),
|
||||||
|
DigitalMode("cwdecoder", "CWDecoder", underlying=["cw"]),
|
||||||
]
|
]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue