|
|
|
@ -18,7 +18,6 @@ import time
|
|
|
|
import threading
|
|
|
|
import threading
|
|
|
|
import subprocess
|
|
|
|
import subprocess
|
|
|
|
import os
|
|
|
|
import os
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from common.runtime import load_root_env, resolve_hackrf_index
|
|
|
|
from common.runtime import load_root_env, resolve_hackrf_index
|
|
|
|
|
|
|
|
|
|
|
|
@ -83,14 +82,6 @@ class get_center_freq(gr.top_block):
|
|
|
|
self.flag = flag = 1
|
|
|
|
self.flag = flag = 1
|
|
|
|
self.decimation = decimation = 1
|
|
|
|
self.decimation = decimation = 1
|
|
|
|
self.center_freq = center_freq = my_freq.work(prob_freq)
|
|
|
|
self.center_freq = center_freq = my_freq.work(prob_freq)
|
|
|
|
self.read_pipe_settle_sec = float(os.getenv('read_pipe_settle_sec_hf', '0.003'))
|
|
|
|
|
|
|
|
self.read_pipe_windows_per_update = max(1, int(os.getenv('read_pipe_windows_per_update_hf', '3')) )
|
|
|
|
|
|
|
|
self.read_pipe_vec_len = 4096
|
|
|
|
|
|
|
|
self.read_pipe_window_sec = self.read_pipe_vec_len / self.samp_rate
|
|
|
|
|
|
|
|
self.read_pipe_poll_sec = float(os.getenv('read_pipe_poll_sec_hf', str(self.read_pipe_window_sec)))
|
|
|
|
|
|
|
|
self.read_pipe_poll_sec = max(self.read_pipe_window_sec, self.read_pipe_poll_sec)
|
|
|
|
|
|
|
|
self.read_pipe_next_at = time.monotonic()
|
|
|
|
|
|
|
|
self.read_pipe_settle_until = 0.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##################################################
|
|
|
|
##################################################
|
|
|
|
# Blocks
|
|
|
|
# Blocks
|
|
|
|
@ -103,42 +94,21 @@ class get_center_freq(gr.top_block):
|
|
|
|
self.rtlsdr_source_0.set_sample_rate(samp_rate)
|
|
|
|
self.rtlsdr_source_0.set_sample_rate(samp_rate)
|
|
|
|
self.rtlsdr_source_0.set_center_freq(center_freq, 0)
|
|
|
|
self.rtlsdr_source_0.set_center_freq(center_freq, 0)
|
|
|
|
self.rtlsdr_source_0.set_freq_corr(0, 0)
|
|
|
|
self.rtlsdr_source_0.set_freq_corr(0, 0)
|
|
|
|
self.rtlsdr_source_0.set_gain(24, 0)
|
|
|
|
self.rtlsdr_source_0.set_gain(100, 0)
|
|
|
|
self.rtlsdr_source_0.set_if_gain(24, 0)
|
|
|
|
self.rtlsdr_source_0.set_if_gain(100, 0)
|
|
|
|
self.rtlsdr_source_0.set_bb_gain(100, 0)
|
|
|
|
self.rtlsdr_source_0.set_bb_gain(100, 0)
|
|
|
|
self.rtlsdr_source_0.set_antenna('', 0)
|
|
|
|
self.rtlsdr_source_0.set_antenna('', 0)
|
|
|
|
self.rtlsdr_source_0.set_bandwidth(0, 0)
|
|
|
|
self.rtlsdr_source_0.set_bandwidth(0, 0)
|
|
|
|
self.rtlsdr_source_0.set_min_output_buffer(4096)
|
|
|
|
self.rtlsdr_source_0.set_min_output_buffer(4096)
|
|
|
|
def _prob_freq_probe():
|
|
|
|
def _prob_freq_probe():
|
|
|
|
while True:
|
|
|
|
while True:
|
|
|
|
now = time.monotonic()
|
|
|
|
|
|
|
|
if now < self.read_pipe_settle_until:
|
|
|
|
|
|
|
|
time.sleep(min(self.read_pipe_poll_sec, self.read_pipe_settle_until - now))
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
windows = []
|
|
|
|
|
|
|
|
for i in range(self.read_pipe_windows_per_update):
|
|
|
|
|
|
|
|
windows.append(np.array(self.probSigVec.level()).ravel())
|
|
|
|
|
|
|
|
if i + 1 < self.read_pipe_windows_per_update:
|
|
|
|
|
|
|
|
time.sleep(self.read_pipe_window_sec)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if len(windows) == 1:
|
|
|
|
|
|
|
|
val = windows[0]
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
val = np.concatenate(windows, axis=None)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val = self.probSigVec.level()
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
self.set_prob_freq(val)
|
|
|
|
self.set_prob_freq(val)
|
|
|
|
except AttributeError:
|
|
|
|
except AttributeError:
|
|
|
|
pass
|
|
|
|
pass
|
|
|
|
|
|
|
|
time.sleep(1.0 / (poll_rate))
|
|
|
|
self.read_pipe_next_at += self.read_pipe_poll_sec
|
|
|
|
|
|
|
|
sleep_for = self.read_pipe_next_at - time.monotonic()
|
|
|
|
|
|
|
|
if sleep_for > 0:
|
|
|
|
|
|
|
|
time.sleep(sleep_for)
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
self.read_pipe_next_at = time.monotonic()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_prob_freq_thread = threading.Thread(target=_prob_freq_probe)
|
|
|
|
_prob_freq_thread = threading.Thread(target=_prob_freq_probe)
|
|
|
|
_prob_freq_thread.daemon = True
|
|
|
|
_prob_freq_thread.daemon = True
|
|
|
|
_prob_freq_thread.start()
|
|
|
|
_prob_freq_thread.start()
|
|
|
|
@ -158,12 +128,7 @@ class get_center_freq(gr.top_block):
|
|
|
|
|
|
|
|
|
|
|
|
def set_prob_freq(self, prob_freq):
|
|
|
|
def set_prob_freq(self, prob_freq):
|
|
|
|
self.prob_freq = prob_freq
|
|
|
|
self.prob_freq = prob_freq
|
|
|
|
next_center = my_freq.work(self.prob_freq)
|
|
|
|
self.set_center_freq(my_freq.work(self.prob_freq))
|
|
|
|
if next_center is None:
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
if next_center != self.center_freq:
|
|
|
|
|
|
|
|
self.set_center_freq(next_center)
|
|
|
|
|
|
|
|
self.read_pipe_settle_until = time.monotonic() + self.read_pipe_settle_sec
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_top_peaks_amount(self):
|
|
|
|
def get_top_peaks_amount(self):
|
|
|
|
return self.top_peaks_amount
|
|
|
|
return self.top_peaks_amount
|
|
|
|
|