diff options
Diffstat (limited to '')
-rw-r--r-- | README.md | 31 | ||||
-rwxr-xr-x | _UI/_web_interface/kraken_web_interface.py | 20 |
2 files changed, 40 insertions, 11 deletions
@@ -1,8 +1,26 @@ # Kraken SDR Passive Radar -NOTE still under development. +Please consult our Passive Radar Wiki page at https://github.com/krakenrf/krakensdr_docs/wiki/08.-Passive-Radar for more information. -## Installation +## Quickstart Raspberry Pi 4 Image + +The passive radar software is preinstalled on the DOA PI4 Image at https://github.com/krakenrf/krakensdr_doa/releases/ + +By default this image runs the DOA direction finding code on boot. + +To change to the passive radar code, connect a monitor and keyboard (or SSH in), and edit start.sh in the home folder. You will need to comment out the DOA code run lines, and uncomment the passive radar lines. + +Make sure to change the heimdall preconfig file to pr_2ch_2pow20, pr_2ch_2pow21 or pr_2ch_2pow22 + +## Quickstart VirtualBox Image + +See our Wiki for more information about our VirtualBox Image and where to download it https://github.com/krakenrf/krakensdr_docs/wiki/10.-VirtualBox-and-Docker-Images#virtualbox + +Once you are in the OS to start the passive radar code, open a terminal and browse to the `krakensdr_pr` folder. Then run `./kraken_pr_start.sh`. Next see the Running heading below. + +## Manual Installation + +This is only required if you are not using the premade images, and are setting up the software from a clean system. 1. Install the prerequisites @@ -42,12 +60,11 @@ conda install dash==1.20.0 conda install werkzeug==2.0.2 ``` -4. Install the krakensdr_pr software +4. Clone the krakensdr_pr software ```bash cd ~/krakensdr git clone https://github.com/krakenrf/krakensdr_pr -cd krakensdr_pr ``` Copy the the *krakensdr_doa/util/kraken_doa_start.sh* and the *krakensdr_doa/util/kraken_doa_stop.sh* scripts into the krakensdr root folder of the project. @@ -65,9 +82,13 @@ cp krakensdr_pr/util/kraken_pr_stop.sh . ./kraken_pr_start.sh ``` +Then browse to KRAKEN_IP_ADDR:8080 in a webbrowser on a computer on the same network. + +When the GUI loads, make sure to set an appropriate passive radar preconfig ini for the Heimdall DAQ. For example, choose "pr_2ch_2pow21", then click on "Reconfigure and Restart DAQ". This will configure the DAQ for passive radar, and then start the processing. + Please be patient on the first run, at it can take 1-2 minutes for the JIT numba compiler to compile the numba optimized functions, and during this compilation time it may appear that the software has gotten stuck. On subsqeuent runs this loading time will be much faster as it will read from cache. -Make sure to set an appropriate passive radar config ini for the Heimdall DAQ. (MORE INFO TO BE ADDED SOON, but basically, set decimation and FIR filtering to 1, set the sample rate to the max of 2.56 MHz, set the nubmer of RX channels to 2, DAQ buffer size 262144, CPI size to 524288 or larger (must be a power of 2). Then use channel 1 to connect your reference antenna, and channel 2 for your surveillance antenna.) +Use CH0 to connect your reference antenna, and CH1 for your surveillance antenna.) ### Remote operation diff --git a/_UI/_web_interface/kraken_web_interface.py b/_UI/_web_interface/kraken_web_interface.py index f7c0ac0..aac3200 100755 --- a/_UI/_web_interface/kraken_web_interface.py +++ b/_UI/_web_interface/kraken_web_interface.py @@ -263,6 +263,7 @@ def read_config_file_dict(config_fname=daq_config_filename): ini_data['config_name'] = parser.get('meta', 'config_name')
ini_data['num_ch'] = parser.getint('hw', 'num_ch')
+ ini_data['en_bias_tee'] = parser.get('hw', 'en_bias_tee')
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')
@@ -299,6 +300,7 @@ def write_config_file_dict(param_dict): parser['meta']['config_name']=str(param_dict['config_name'])
parser['hw']['num_ch']=str(param_dict['num_ch'])
+ parser['hw']['en_bias_tee']=str(param_dict['en_bias_tee'])
parser['daq']['daq_buffer_size']=str(param_dict['daq_buffer_size'])
parser['daq']['sample_rate']=str(param_dict['sample_rate'])
parser['daq']['en_noise_source_ctr']=str(param_dict['en_noise_source_ctr'])
@@ -656,6 +658,12 @@ def generate_config_page_layout(webInterface_inst): html.Div("# RX Channels:", className="field-label"),
dcc.Input(id='cfg_rx_channels', value=daq_cfg_dict['num_ch'], type='number', debounce=True, className="field-body-textbox")
], className="field"),
+
+ html.Div([
+ html.Div("Bias Tee Control:", className="field-label"),
+ dcc.Input(id='cfg_en_bias_tee', value=daq_cfg_dict['en_bias_tee'], type='text', debounce=True, className="field-body-textbox")
+ ], className="field"),
+
html.H3("DAQ", id="cfg_group_daq"),
html.Div([
html.Div("DAQ Buffer Size:", className="field-label", id="label_daq_buffer_size"),
@@ -1409,9 +1417,8 @@ def update_dsp_params(update_freq, en_pr, en_persist, persist_decay, max_bistati Input('cfg_data_block_len' ,'value'),
Input('cfg_decimated_bw' ,'value'),
Input('cfg_recal_interval' ,'value'),
- Input('daq_cfg_files' , 'value'),
-
-]
+ Input('cfg_en_bias_tee' ,'value'),
+ Input('daq_cfg_files' , 'value')]
)
def update_daq_ini_params(
cfg_rx_channels,cfg_daq_buffer_size,cfg_sample_rate,en_noise_source_ctr, \
@@ -1420,7 +1427,7 @@ def update_daq_ini_params( cfg_std_ch_ind,en_iq_cal,cfg_gain_lock,en_req_track_lock_intervention, \
cfg_cal_track_mode,cfg_amplitude_cal_mode,cfg_cal_frame_interval, \
cfg_cal_frame_burst_size, cfg_amplitude_tolerance,cfg_phase_tolerance, \
- cfg_max_sync_fails, cfg_data_block_len, cfg_decimated_bw, cfg_recal_interval, config_fname):
+ cfg_max_sync_fails, cfg_data_block_len, cfg_decimated_bw, cfg_recal_interval, cfg_en_bias_tee, config_fname):
# TODO: Use disctionarry instead of parameter list
ctx = dash.callback_context
@@ -1441,8 +1448,8 @@ def update_daq_ini_params( 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 []
- en_persist_values =[1] if webInterface_inst.en_persist else []
- en_pr_values =[1] if webInterface_inst.module_signal_processor.en_PR else []
+ #en_persist_values =[1] if webInterface_inst.en_persist else []
+ #en_pr_values =[1] if webInterface_inst.module_signal_processor.en_PR else []
en_advanced_daq_cfg =[1] if webInterface_inst.en_advanced_daq_cfg else []
@@ -1529,6 +1536,7 @@ def update_daq_ini_params( param_dict = webInterface_inst.daq_ini_cfg_dict
param_dict['config_name'] = "Custom"
param_dict['num_ch'] = cfg_rx_channels
+ param_dict['en_bias_tee'] = cfg_en_bias_tee
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
|