start building digiham chains

This commit is contained in:
Jakob Ketterl 2021-07-30 00:06:21 +02:00
parent 11a3606070
commit 1c91c6dcc1
3 changed files with 40 additions and 2 deletions

View File

@ -41,6 +41,7 @@ from csdr.chain.demodulator import DemodulatorChain
from csdr.chain.fm import NFm, WFm from csdr.chain.fm import NFm, WFm
from csdr.chain.am import Am from csdr.chain.am import Am
from csdr.chain.ssb import Ssb from csdr.chain.ssb import Ssb
from csdr.chain.digiham import Dstar
from csdr.chain.clientaudio import ClientAudioChain from csdr.chain.clientaudio import ClientAudioChain
import logging import logging
@ -138,6 +139,9 @@ class Dsp(DirewolfConfigSubscriber):
elif which == "wfm": elif which == "wfm":
self.pycsdr_chain = DemodulatorChain(self.samp_rate, 200000, 0.0, WFm(self.get_audio_rate(), self.wfm_deemphasis_tau)) self.pycsdr_chain = DemodulatorChain(self.samp_rate, 200000, 0.0, WFm(self.get_audio_rate(), self.wfm_deemphasis_tau))
return self.pycsdr_chain return self.pycsdr_chain
elif which == "dstar":
self.pycsdr_chain = DemodulatorChain(self.samp_rate, 48000, 0.0, Dstar(self.codecserver))
return self.pycsdr_chain
chain = ["nc -v 127.0.0.1 {nc_port}"] chain = ["nc -v 127.0.0.1 {nc_port}"]
chain += ["csdr shift_addfast_cc --fifo {shift_pipe}"] chain += ["csdr shift_addfast_cc --fifo {shift_pipe}"]
@ -741,7 +745,8 @@ class Dsp(DirewolfConfigSubscriber):
chain.setInput(self.buffer) chain.setInput(self.buffer)
output_rate = self.get_hd_output_rate() if self.isHdAudio() else self.get_output_rate() output_rate = self.get_hd_output_rate() if self.isHdAudio() else self.get_output_rate()
self.pycsdr_client_chain = ClientAudioChain(self.get_audio_rate(), output_rate, self.audio_compression) audio_rate = 8000 if self.isDigitalVoice() else self.get_audio_rate()
self.pycsdr_client_chain = ClientAudioChain(chain.getOutputFormat(), audio_rate, output_rate, self.audio_compression)
buffer = Buffer(chain.getOutputFormat()) buffer = Buffer(chain.getOutputFormat())
chain.setWriter(buffer) chain.setWriter(buffer)
self.pycsdr_client_chain.setInput(buffer) self.pycsdr_client_chain.setInput(buffer)

View File

@ -4,8 +4,10 @@ from pycsdr.types import Format
class ClientAudioChain(Chain): class ClientAudioChain(Chain):
def __init__(self, inputRate: int, clientRate: int, compression: str): def __init__(self, format: Format, inputRate: int, clientRate: int, compression: str):
workers = [] workers = []
if format != Format.FLOAT:
workers += [Convert(format, Format.FLOAT)]
if inputRate != clientRate: if inputRate != clientRate:
workers += [AudioResampler(inputRate, clientRate)] workers += [AudioResampler(inputRate, clientRate)]
workers += [Convert(Format.FLOAT, Format.SHORT)] workers += [Convert(Format.FLOAT, Format.SHORT)]

31
csdr/chain/digiham.py Normal file
View File

@ -0,0 +1,31 @@
from csdr.chain import Chain
from pycsdr.modules import FmDemod
from digiham.modules import DstarDecoder, DcBlock, FskDemodulator, DigitalVoiceFilter, MbeSynthesizer, NarrowRrcFilter, NxdnDecoder
class Dstar(Chain):
def __init__(self, codecserver: str = ""):
workers = [
FmDemod(),
DcBlock(),
FskDemodulator(samplesPerSymbol=10),
DstarDecoder(),
MbeSynthesizer(codecserver),
DigitalVoiceFilter()
]
super().__init__(*workers)
class Nxdn(Chain):
def __init__(self, codecserver: str = ""):
workers = [
FmDemod(),
DcBlock(),
NarrowRrcFilter(),
# todo: switch out with gfsk
FskDemodulator(samplesPerSymbol=20),
NxdnDecoder(),
MbeSynthesizer(codecserver),
DigitalVoiceFilter()
]
super().__init__(*workers)