discrete passband tuning based on step size
This commit is contained in:
parent
61144fa477
commit
84042249fc
|
@ -358,6 +358,7 @@ class p25_demod_cb(p25_demod_base):
|
||||||
self.clock.set_omega(self.sps)
|
self.clock.set_omega(self.sps)
|
||||||
|
|
||||||
def set_relative_frequency(self, freq):
|
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:
|
if abs(freq) > self.relative_limit:
|
||||||
#print 'set_relative_frequency: error, relative frequency %d exceeds limit %d' % (freq, self.input_rate/2)
|
#print 'set_relative_frequency: error, relative frequency %d exceeds limit %d' % (freq, self.input_rate/2)
|
||||||
return False
|
return False
|
||||||
|
@ -365,14 +366,21 @@ class p25_demod_cb(p25_demod_base):
|
||||||
return True
|
return True
|
||||||
self.lo_freq = freq
|
self.lo_freq = freq
|
||||||
if self.if1:
|
if self.if1:
|
||||||
if freq not in self.t_cache.keys():
|
r = freq % N
|
||||||
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)
|
bpf_freq = freq - r
|
||||||
self.bpf.set_taps(self.t_cache[freq])
|
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 = self.decim * -freq / float(self.input_rate)
|
||||||
bfo_f -= int(bfo_f)
|
bfo_f -= int(bfo_f)
|
||||||
if bfo_f < -0.5:
|
while bfo_f < -0.5:
|
||||||
bfo_f += 1.0
|
bfo_f += 1.0
|
||||||
if bfo_f > 0.5:
|
while bfo_f > 0.5:
|
||||||
bfo_f -= 1.0
|
bfo_f -= 1.0
|
||||||
self.bfo.set_frequency(-bfo_f * self.if1)
|
self.bfo.set_frequency(-bfo_f * self.if1)
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue