add scaffolding for pocsag decoding

This commit is contained in:
Jakob Ketterl 2020-01-06 22:08:17 +01:00
parent 4859cb5db8
commit 12e5d2f6f3
6 changed files with 22 additions and 7 deletions

View File

@ -160,7 +160,10 @@
{
"name": "70cm",
"lower_bound": 430000000,
"upper_bound": 440000000
"upper_bound": 440000000,
"frequencies": {
"pocsag": 439987500
}
},
{
"name": "23cm",

View File

@ -129,11 +129,6 @@
"frequency": 439937500,
"modulation": "dmr"
},
{
"name": "Pocsag",
"frequency": 439987500,
"modulation": "nfm"
},
{
"name": "DB0ULR",
"frequency": 145575000,

View File

@ -244,6 +244,11 @@ class dsp(object):
if self.last_decimation != 1.0:
chain += ["csdr fractional_decimator_ff {last_decimation}"]
return chain + ["csdr convert_f_s16", "direwolf -c {direwolf_config} -r {audio_rate} -t 0 -q d -q h - 1>&2"]
elif which == "pocsag":
chain += ["csdr fmdemod_quadri_cf"]
if self.last_decimation != 1.0:
chain += ["csdr fractional_decimator_ff {last_decimation}"]
return chain + ["fsk_demodulator", "pocsag_decoder"]
def set_secondary_demodulator(self, what):
if self.get_secondary_demodulator() == what:
@ -448,6 +453,8 @@ class dsp(object):
return 48000
elif self.isWsjtMode():
return 12000
elif self.isPocsag():
return 12000
return self.get_output_rate()
def isDigitalVoice(self, demodulator=None):
@ -465,6 +472,11 @@ class dsp(object):
demodulator = self.get_secondary_demodulator()
return demodulator == "packet"
def isPocsag(self, demodulator=None):
if demodulator is None:
demodulator = self.get_secondary_demodulator()
return demodulator == "pocsag"
def set_output_rate(self, output_rate):
if self.output_rate == output_rate:
return
@ -528,7 +540,7 @@ class dsp(object):
def set_squelch_level(self, squelch_level):
self.squelch_level = squelch_level
# no squelch required on digital voice modes
actual_squelch = -150 if self.isDigitalVoice() or self.isPacket() else self.squelch_level
actual_squelch = -150 if self.isDigitalVoice() or self.isPacket() or self.isPocsag() else self.squelch_level
if self.running:
self.modification_lock.acquire()
self.squelch_pipe_file.write("%g\n" % (self.convertToLinear(actual_squelch)))

View File

@ -187,6 +187,7 @@
<option value="jt9" data-feature="wsjt-x">JT9</option>
<option value="ft4" data-feature="wsjt-x">FT4</option>
<option value="packet" data-feature="packet">Packet</option>
<option value="pocsag" data-feature="pocsag">Pocsag</option>
</select>
</div>
<div class="openwebrx-panel-line">

View File

@ -2160,6 +2160,7 @@ function demodulator_digital_replace(subtype) {
demodulators[0].set();
break;
case "packet":
case "pocsag":
secondary_demod_start(subtype);
demodulator_analog_replace('nfm', true);
break;

View File

@ -32,6 +32,7 @@ class FeatureDetector(object):
"digital_voice_dsd": ["dsd", "sox", "digiham"],
"wsjt-x": ["wsjtx", "sox"],
"packet": ["direwolf", "sox"],
"pocsag": ["digiham", "sox"],
}
def feature_availability(self):
@ -181,6 +182,8 @@ class FeatureDetector(object):
"mbe_synthesizer",
"gfsk_demodulator",
"digitalvoice_filter",
"fsk_demodulator",
"pocsag_decoder",
],
),
True,