discrete passband tuning based on step size

This commit is contained in:
Max 2022-04-06 14:02:07 -04:00
parent 61144fa477
commit 84042249fc
1 changed files with 13 additions and 5 deletions

View File

@ -358,6 +358,7 @@ class p25_demod_cb(p25_demod_base):
self.clock.set_omega(self.sps)
def set_relative_frequency(self, freq):
N = 500 # Hz, we tune the bpf in discrete steps of size N
if abs(freq) > self.relative_limit:
#print 'set_relative_frequency: error, relative frequency %d exceeds limit %d' % (freq, self.input_rate/2)
return False
@ -365,14 +366,21 @@ class p25_demod_cb(p25_demod_base):
return True
self.lo_freq = freq
if self.if1:
if freq not in self.t_cache.keys():
self.t_cache[freq] = filter.firdes.complex_band_pass(1.0, self.input_rate, -freq - self.if1/2, -freq + self.if1/2, self.if1/2, filter.firdes.WIN_HAMMING)
self.bpf.set_taps(self.t_cache[freq])
r = freq % N
bpf_freq = freq - r
if r > N//2:
bpf_freq += N # round to nearest N Hz
if bpf_freq not in self.t_cache.keys():
if abs(bpf_freq) > self.relative_limit:
sys.stderr.write( 'set_relative_frequency: error, relative frequency %d(%d) exceeds limit %d\n' % (bpf_freq, freq, self.relative_limit))
return False
self.t_cache[bpf_freq] = filter.firdes.complex_band_pass(1.0, self.input_rate, -bpf_freq - self.if1/2, -bpf_freq + self.if1/2, self.if1/2, filter.firdes.WIN_HAMMING)
self.bpf.set_taps(self.t_cache[bpf_freq])
bfo_f = self.decim * -freq / float(self.input_rate)
bfo_f -= int(bfo_f)
if bfo_f < -0.5:
while bfo_f < -0.5:
bfo_f += 1.0
if bfo_f > 0.5:
while bfo_f > 0.5:
bfo_f -= 1.0
self.bfo.set_frequency(-bfo_f * self.if1)
else: