summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x_UI/_web_interface/kraken_web_interface.py21
-rwxr-xr-x_receiver/krakenSDR_receiver.py22
-rwxr-xr-x_signal_processing/krakenSDR_signal_processor.py45
3 files changed, 11 insertions, 77 deletions
diff --git a/_UI/_web_interface/kraken_web_interface.py b/_UI/_web_interface/kraken_web_interface.py
index b77df98..562ca82 100755
--- a/_UI/_web_interface/kraken_web_interface.py
+++ b/_UI/_web_interface/kraken_web_interface.py
@@ -114,7 +114,6 @@ class webInterface():
self.module_receiver = ReceiverRTLSDR(data_que=self.rx_data_que, data_interface=self.data_interface, logging_level=self.logging_level)
self.module_receiver.daq_center_freq = dsp_settings.get("center_freq", 100.0) * 10**6
self.module_receiver.daq_rx_gain = [float(dsp_settings.get("gain_1", 1.4)), float(dsp_settings.get("gain_2", 1.4))]
- self.module_receiver.daq_squelch_th_dB = dsp_settings.get("squelch_threshold_dB", 0.0)
self.module_receiver.rec_ip_addr = dsp_settings.get("default_ip", "0.0.0.0")
self.module_signal_processor = SignalProcessor(data_que=self.sp_data_que, module_receiver=self.module_receiver, logging_level=self.logging_level)
@@ -239,17 +238,6 @@ class webInterface():
self.module_receiver.eth_close()
def close(self):
pass
- def config_squelch_value(self, squelch_threshold_dB):
- """
- Configures the squelch thresold both on the DAQ side and
- on the local DoA DSP side.
- """
- #NOT USING THIS ANYMORE
- self.daq_cfg_iface_status = 1
- #self.module_signal_processor.squelch_threshold = 10**(squelch_threshold_dB/20)
- #self.module_receiver.set_squelch_threshold(squelch_threshold_dB)
- #webInterface_inst.logger.info("Updating receiver parameters")
- #webInterface_inst.logger.info("Squelch threshold : {:f} dB".format(squelch_threshold_dB))
def config_daq_rf(self, f0, gain):
"""
Configures the RF parameters in the DAQ module
@@ -275,8 +263,6 @@ def read_config_file_dict(config_fname=daq_config_filename):
ini_data['daq_buffer_size'] = parser.getint('daq','daq_buffer_size')
ini_data['sample_rate'] = parser.getint('daq','sample_rate')
ini_data['en_noise_source_ctr'] = parser.getint('daq','en_noise_source_ctr')
- ini_data['en_squelch'] = parser.getint('squelch','en_squelch')
- ini_data['amplitude_threshold'] = parser.getfloat('squelch','amplitude_threshold')
ini_data['cpi_size'] = parser.getint('pre_processing', 'cpi_size')
ini_data['decimation_ratio'] = parser.getint('pre_processing', 'decimation_ratio')
ini_data['fir_relative_bandwidth'] = parser.getfloat('pre_processing', 'fir_relative_bandwidth')
@@ -315,8 +301,6 @@ def write_config_file_dict(param_dict):
parser['daq']['en_noise_source_ctr']=str(param_dict['en_noise_source_ctr'])
# Set these for reconfigure
parser['daq']['center_freq']=str(int(webInterface_inst.module_receiver.daq_center_freq))
- parser['squelch']['en_squelch']=str(param_dict['en_squelch'])
- parser['squelch']['amplitude_threshold']=str(param_dict['amplitude_threshold'])
parser['pre_processing']['cpi_size']=str(param_dict['cpi_size'])
parser['pre_processing']['decimation_ratio']=str(param_dict['decimation_ratio'])
parser['pre_processing']['fir_relative_bandwidth']=str(param_dict['fir_relative_bandwidth'])
@@ -505,7 +489,6 @@ app.layout = html.Div([
html.Div(id="placeholder_update_daq_ini_params", style={"display":"none"}),
html.Div(id="placeholder_update_freq" , style={"display":"none"}),
html.Div(id="placeholder_update_dsp" , style={"display":"none"}),
- html.Div(id="placeholder_update_squelch" , style={"display":"none"}),
html.Div(id="placeholder_config_page_upd" , style={"display":"none"}),
html.Div(id="placeholder_spectrum_page_upd" , style={"display":"none"}),
html.Div(id="placeholder_doa_page_upd" , style={"display":"none"}),
@@ -519,7 +502,6 @@ def generate_config_page_layout(webInterface_inst):
if daq_cfg_dict is not None:
en_noise_src_values =[1] if daq_cfg_dict['en_noise_source_ctr'] else []
- en_squelch_values =[1] if daq_cfg_dict['en_squelch'] else []
en_filter_rst_values =[1] if daq_cfg_dict['en_filter_reset'] else []
en_iq_cal_values =[1] if daq_cfg_dict['en_iq_cal'] else []
en_req_track_lock_values =[1] if daq_cfg_dict['require_track_lock_intervention'] else []
@@ -1381,7 +1363,6 @@ def update_daq_ini_params(
if daq_cfg_dict is not None:
en_noise_src_values =[1] if daq_cfg_dict['en_noise_source_ctr'] else []
- en_squelch_values =[1] if daq_cfg_dict['en_squelch'] else []
en_filter_rst_values =[1] if daq_cfg_dict['en_filter_reset'] else []
en_iq_cal_values =[1] if daq_cfg_dict['en_iq_cal'] else []
en_req_track_lock_values =[1] if daq_cfg_dict['require_track_lock_intervention'] else []
@@ -1437,7 +1418,6 @@ def update_daq_ini_params(
cfg_daq_buffer_size = 262144 # This is a reasonable DAQ buffer size to use
cfg_corr_size = 32768 # Reasonable value that never has problems calibrating
en_noise_source_ctr = [1]
- en_squelch_mode = [] # NOTE: For checkboxes, zero is defined by an empty array
cfg_fir_bw = 1
cfg_fir_window = 'hann'
en_filter_reset = []
@@ -1478,7 +1458,6 @@ def update_daq_ini_params(
param_dict['daq_buffer_size'] = cfg_daq_buffer_size
param_dict['sample_rate'] = int(cfg_sample_rate*10**6)
param_dict['en_noise_source_ctr'] = 1 if len(en_noise_source_ctr) else 0
- param_dict['en_squelch'] = 0
param_dict['cpi_size'] = cfg_cpi_size
param_dict['decimation_ratio'] = cfg_decimation_ratio
param_dict['fir_relative_bandwidth'] = cfg_fir_bw
diff --git a/_receiver/krakenSDR_receiver.py b/_receiver/krakenSDR_receiver.py
index 2f9c761..59938b7 100755
--- a/_receiver/krakenSDR_receiver.py
+++ b/_receiver/krakenSDR_receiver.py
@@ -57,7 +57,6 @@ class ReceiverRTLSDR():
# Values are configured externally upon configuration request
self.daq_center_freq = 100 # MHz
self.daq_rx_gain = [0] * 100 # [dB]
- self.daq_squelch_th_dB = 0
# UI interface
self.data_que = data_que
@@ -121,7 +120,6 @@ class ReceiverRTLSDR():
self.logger.info("CTR INIT Center freq: {0}".format(self.daq_center_freq))
self.set_center_freq(self.daq_center_freq)
self.set_if_gain(self.daq_rx_gain)
- self.set_squelch_threshold(self.daq_squelch_th_dB)
except:
errorMsg = sys.exc_info()[0]
self.logger.error("Error message: "+str(errorMsg))
@@ -257,26 +255,6 @@ class ReceiverRTLSDR():
else:
return 0
- def set_squelch_threshold(self, threshold_dB):
- """
- Configures the threshold level of the squelch module in the DAQ FW through the control interface
- """
- if self.receiver_connection_status: # Check connection
- self.daq_squelch_th_dB = threshold_dB
- if threshold_dB == -80: threshold = 0
- else: threshold = 10**(threshold_dB/20)
-
- # Assembling message
- cmd="STHU"
- th_bytes=pack("f",threshold)
- msg_bytes=(cmd.encode()+th_bytes+bytearray(120))
- try:
- _thread.start_new_thread(self.ctr_iface_communication, (msg_bytes,))
- except:
- errorMsg = sys.exc_info()[0]
- self.logger.error("Unable to start communication thread")
- self.logger.error("Error message: {:s}".format(errorMsg))
-
def ctr_iface_init(self):
"""
Initialize connection with the DAQ FW through the control interface
diff --git a/_signal_processing/krakenSDR_signal_processor.py b/_signal_processing/krakenSDR_signal_processor.py
index d009790..f3c7633 100755
--- a/_signal_processing/krakenSDR_signal_processor.py
+++ b/_signal_processing/krakenSDR_signal_processor.py
@@ -26,6 +26,7 @@ import logging
import threading
import queue
import math
+import multiprocessing
# Import optimization modules
import numba as nb
@@ -91,12 +92,6 @@ class SignalProcessor(threading.Thread):
# Squelch feature
self.data_ready = False
- self.en_squelch = False
- self.squelch_threshold = 0.1
- self.squelch_trigger_channel = 0
- self.raw_signal_amplitude = np.empty(0)
- self.filt_signal = np.empty(0)
- self.squelch_mask = np.empty(0)
# DOA processing options
self.en_DOA_Bartlett = False
@@ -146,7 +141,7 @@ class SignalProcessor(threading.Thread):
Main processing thread
"""
- pyfftw.config.NUM_THREADS = 4
+ pyfftw.config.NUM_THREADS = multiprocessing.cpu_count()
pyfftw.config.PLANNER_EFFORT = "FFTW_MEASURE" #"FFTW_PATIENT"
scipy.fft.set_backend(pyfftw.interfaces.scipy_fft)
pyfftw.interfaces.cache.enable()
@@ -159,11 +154,12 @@ class SignalProcessor(threading.Thread):
self.is_running = True
que_data_packet = []
- start_time = time.time()
#-----> ACQUIRE NEW DATA FRAME <-----
self.module_receiver.get_iq_online()
+ start_time = time.time()
+
# Check frame type for processing
en_proc = (self.module_receiver.iq_header.frame_type == self.module_receiver.iq_header.FRAME_TYPE_DATA)# or \
#(self.module_receiver.iq_header.frame_type == self.module_receiver.iq_header.FRAME_TYPE_CAL)# For debug purposes
@@ -204,25 +200,6 @@ class SignalProcessor(threading.Thread):
que_data_packet.append(['max_amplitude',max_amplitude])
- #-----> SQUELCH PROCESSING <-----
-
- if self.en_squelch:
- self.data_ready = False
-
- self.processed_signal, decimation_factor, self.fft_signal_width, self.max_index = \
- center_max_signal(self.processed_signal, self.spectrum[0,:], max_spectrum, self.module_receiver.daq_squelch_th_dB, self.module_receiver.iq_header.sampling_freq)
-
- #decimated_signal = []
- #if(decimation_factor > 1):
- # decimated_signal = signal.decimate(self.processed_signal, decimation_factor, n = decimation_factor * 2, ftype='fir')
- # self.processed_signal = decimated_signal #.copy()
-
-
- #Only update if we're above the threshold
- if max_amplitude > self.module_receiver.daq_squelch_th_dB:
- self.data_ready = True
-
-
#-----> SPECTRUM PROCESSING <-----
if self.en_spectrum and self.data_ready:
@@ -303,13 +280,13 @@ class SignalProcessor(threading.Thread):
que_data_packet.append(['latency', int(stop_time*10**3)-self.module_receiver.iq_header.time_stamp])
# If the que is full, and data is ready (from squelching), clear the buffer immediately so that useful data has the priority
- if self.data_que.full() and self.data_ready:
- try:
- #self.logger.info("BUFFER WAS NOT EMPTY, EMPTYING NOW")
- self.data_que.get(False) #empty que if not taken yet so fresh data is put in
- except queue.Empty:
- #self.logger.info("DIDNT EMPTY")
- pass
+ #if self.data_que.full() and self.data_ready:
+ # try:
+ # #self.logger.info("BUFFER WAS NOT EMPTY, EMPTYING NOW")
+ # self.data_que.get(False) #empty que if not taken yet so fresh data is put in
+ # except queue.Empty:
+ # #self.logger.info("DIDNT EMPTY")
+ # pass
# Put data into buffer, but if there is no data because its a cal/trig wait frame etc, then only write if the buffer is empty
# Otherwise just discard the data so that we don't overwrite good DATA frames.