secondary chain as array, too

This commit is contained in:
Jakob Ketterl 2019-11-22 15:00:36 +01:00
parent 9f710cb70e
commit 07de82ae82

50
csdr.py
View File

@ -214,35 +214,35 @@ class dsp(object):
return chain return chain
def secondary_chain(self, which): def secondary_chain(self, which):
secondary_chain_base = "cat {input_pipe} | " chain = ["cat {input_pipe}"]
if which == "fft": if which == "fft":
return ( chain += [
secondary_chain_base "csdr realpart_cf",
+ "csdr realpart_cf | csdr fft_fc {secondary_fft_input_size} {secondary_fft_block_size} | csdr logpower_cf -70 " "csdr fft_fc {secondary_fft_input_size} {secondary_fft_block_size}",
+ (" | csdr compress_fft_adpcm_f_u8 {secondary_fft_size}" if self.fft_compression == "adpcm" else "") "csdr logpower_cf -70",
) ]
if self.fft_compression == "adpcm":
chain += ["csdr compress_fft_adpcm_f_u8 {secondary_fft_size}"]
return chain
elif which == "bpsk31": elif which == "bpsk31":
return ( return chain + [
secondary_chain_base "csdr shift_addition_cc --fifo {secondary_shift_pipe}",
+ "csdr shift_addition_cc --fifo {secondary_shift_pipe} | " "csdr bandpass_fir_fft_cc -{secondary_bpf_cutoff} {secondary_bpf_cutoff} {secondary_bpf_cutoff}",
+ "csdr bandpass_fir_fft_cc -{secondary_bpf_cutoff} {secondary_bpf_cutoff} {secondary_bpf_cutoff} | " "csdr simple_agc_cc 0.001 0.5",
+ "csdr simple_agc_cc 0.001 0.5 | " "csdr timing_recovery_cc GARDNER {secondary_samples_per_bits} 0.5 2 --add_q",
+ "csdr timing_recovery_cc GARDNER {secondary_samples_per_bits} 0.5 2 --add_q | " "CSDR_FIXED_BUFSIZE=1 csdr dbpsk_decoder_c_u8",
+ "CSDR_FIXED_BUFSIZE=1 csdr dbpsk_decoder_c_u8 | " "CSDR_FIXED_BUFSIZE=1 csdr psk31_varicode_decoder_u8_u8",
+ "CSDR_FIXED_BUFSIZE=1 csdr psk31_varicode_decoder_u8_u8" ]
)
elif self.isWsjtMode(which): elif self.isWsjtMode(which):
chain = secondary_chain_base + "csdr realpart_cf | " chain += ["csdr realpart_cf"]
if self.last_decimation != 1.0: if self.last_decimation != 1.0:
chain += "csdr fractional_decimator_ff {last_decimation} | " chain += ["csdr fractional_decimator_ff {last_decimation}"]
chain += "csdr agc_ff | csdr limit_ff | csdr convert_f_s16" return chain + ["csdr agc_ff", "csdr limit_ff", "csdr convert_f_s16"]
return chain
elif which == "packet": elif which == "packet":
chain = secondary_chain_base + "csdr fmdemod_quadri_cf | " chain += ["csdr fmdemod_quadri_cf"]
if self.last_decimation != 1.0: if self.last_decimation != 1.0:
chain += "csdr fractional_decimator_ff {last_decimation} | " chain += ["csdr fractional_decimator_ff {last_decimation}"]
chain += "csdr convert_f_s16 | direwolf -c {direwolf_config} -r {audio_rate} -t 0 -q d -q h - 1>&2" return chain + ["csdr convert_f_s16", "direwolf -c {direwolf_config} -r {audio_rate} -t 0 -q d -q h - 1>&2"]
return chain
def set_secondary_demodulator(self, what): def set_secondary_demodulator(self, what):
if self.get_secondary_demodulator() == what: if self.get_secondary_demodulator() == what:
@ -282,7 +282,7 @@ class dsp(object):
if not self.secondary_demodulator: if not self.secondary_demodulator:
return return
logger.debug("starting secondary demodulator from IF input sampled at %d" % self.if_samp_rate()) logger.debug("starting secondary demodulator from IF input sampled at %d" % self.if_samp_rate())
secondary_command_demod = self.secondary_chain(self.secondary_demodulator) secondary_command_demod = " | ".join(self.secondary_chain(self.secondary_demodulator))
self.try_create_pipes(self.secondary_pipe_names, secondary_command_demod) self.try_create_pipes(self.secondary_pipe_names, secondary_command_demod)
self.try_create_configs(secondary_command_demod) self.try_create_configs(secondary_command_demod)
@ -305,7 +305,7 @@ class dsp(object):
if self.csdr_print_bufsizes: if self.csdr_print_bufsizes:
my_env["CSDR_PRINT_BUFSIZES"] = "1" my_env["CSDR_PRINT_BUFSIZES"] = "1"
if self.output.supports_type("secondary_fft"): if self.output.supports_type("secondary_fft"):
secondary_command_fft = self.secondary_chain("fft") secondary_command_fft = " | ".join(self.secondary_chain("fft"))
secondary_command_fft = secondary_command_fft.format( secondary_command_fft = secondary_command_fft.format(
input_pipe=self.iqtee_pipe, input_pipe=self.iqtee_pipe,
secondary_fft_input_size=self.secondary_fft_size, secondary_fft_input_size=self.secondary_fft_size,