summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrakenrf <carl@system76-pc.localdomain>2022-10-20 13:15:45 +0200
committerkrakenrf <carl@system76-pc.localdomain>2022-10-20 13:15:45 +0200
commit4142f9a90a845125c83eeefb47ed55174f96de3a (patch)
treec6e65d94a35b3b80ea75acbce8d6c9fff8cbdc77
parentremove squelch var/functions (diff)
downloadkrakensdr_pr-4142f9a90a845125c83eeefb47ed55174f96de3a.tar
krakensdr_pr-4142f9a90a845125c83eeefb47ed55174f96de3a.tar.gz
krakensdr_pr-4142f9a90a845125c83eeefb47ed55174f96de3a.tar.bz2
krakensdr_pr-4142f9a90a845125c83eeefb47ed55174f96de3a.tar.lz
krakensdr_pr-4142f9a90a845125c83eeefb47ed55174f96de3a.tar.xz
krakensdr_pr-4142f9a90a845125c83eeefb47ed55174f96de3a.tar.zst
krakensdr_pr-4142f9a90a845125c83eeefb47ed55174f96de3a.zip
-rwxr-xr-x_UI/_web_interface/kraken_web_interface.py104
-rwxr-xr-x_signal_processing/krakenSDR_signal_processor.py1
-rwxr-xr-xsettings.json8
3 files changed, 93 insertions, 20 deletions
diff --git a/_UI/_web_interface/kraken_web_interface.py b/_UI/_web_interface/kraken_web_interface.py
index 562ca82..f7c0ac0 100755
--- a/_UI/_web_interface/kraken_web_interface.py
+++ b/_UI/_web_interface/kraken_web_interface.py
@@ -174,6 +174,9 @@ class webInterface():
# Basic DAQ Config
self.decimated_bandwidth = 12.5
+
+ self.pr_graph_reset_flag = True
+
if self.daq_ini_cfg_dict is not None:
self.logger.info("Config file found and read succesfully")
@@ -440,10 +443,12 @@ waterfall_fig.update_layout(margin=go.layout.Margin(t=5))
pr_init = [[-80] * 128] * 128
y_range = list(range(-128, 128))
+x_range = list(range(0, 128))
pr_fig = go.Figure(layout=fig_layout)
pr_fig.add_trace(go.Heatmap(
z=pr_init,
+ x=x_range,
y=y_range,
zsmooth='best', #False,
#zsmooth=False, #False,
@@ -1153,6 +1158,7 @@ def display_page(pathname):
return [spectrum_page_layout, "header_inactive", "header_active", "header_inactive"]
elif pathname == "/pr":
webInterface_inst.module_signal_processor.en_spectrum = False
+ webInterface_inst.pr_graph_reset_flag = True
plot_pr()
return [generate_pr_page_layout(webInterface_inst), "header_inactive", "header_inactive", "header_active"]
return Output('dummy_output', 'children', '') #[no_update, no_update, no_update, no_update]
@@ -1186,31 +1192,99 @@ def save_config_btn(input_value):
def plot_pr():
global pr_fig
+ c = 299792458
- if webInterface_inst.RD_matrix is not None:
-
- CAFMatrix = np.abs(webInterface_inst.RD_matrix)
+
+ CAFMatrix = np.abs(webInterface_inst.RD_matrix)
- CAFMatrix = CAFMatrix / 50 #/ np.amax(CAFMatrix) # Noramlize with the maximum value
+ CAFMatrix = CAFMatrix / 50 #/ np.amax(CAFMatrix) # Noramlize with the maximum value
- if webInterface_inst.CAFMatrixPersist is None or webInterface_inst.CAFMatrixPersist.shape != CAFMatrix.shape or not webInterface_inst.en_persist:
- webInterface_inst.CAFMatrixPersist = CAFMatrix
- else:
- webInterface_inst.CAFMatrixPersist = np.maximum(webInterface_inst.CAFMatrixPersist, CAFMatrix)*webInterface_inst.pr_persist_decay #webInterface_inst.CAFMatrixPersist * 0.5 + CAFMatrix * 0.5
+ if webInterface_inst.CAFMatrixPersist is None or webInterface_inst.CAFMatrixPersist.shape != CAFMatrix.shape or not webInterface_inst.en_persist:
+ webInterface_inst.CAFMatrixPersist = CAFMatrix
+ else:
+ webInterface_inst.CAFMatrixPersist = np.maximum(webInterface_inst.CAFMatrixPersist, CAFMatrix)*webInterface_inst.pr_persist_decay #webInterface_inst.CAFMatrixPersist * 0.5 + CAFMatrix * 0.5
- CAFMatrixLog = 20 * np.log10(webInterface_inst.CAFMatrixPersist)
+ CAFMatrixLog = 20 * np.log10(webInterface_inst.CAFMatrixPersist)
- CAFDynRange = webInterface_inst.pr_dynamic_range_min
- CAFMatrixLog[CAFMatrixLog < CAFDynRange] = CAFDynRange
+ CAFDynRange = webInterface_inst.pr_dynamic_range_min
+ CAFMatrixLog[CAFMatrixLog < CAFDynRange] = CAFDynRange
- CAFDynRange = webInterface_inst.pr_dynamic_range_max
- CAFMatrixLog[CAFMatrixLog > CAFDynRange] = CAFDynRange
+ CAFDynRange = webInterface_inst.pr_dynamic_range_max
+ CAFMatrixLog[CAFMatrixLog > CAFDynRange] = CAFDynRange
- y_height = CAFMatrixLog.shape[0]
- y_range = list(np.arange(-y_height/2, y_height/2))
+ y_height = CAFMatrixLog.shape[0]
+
+ bistatic_speed_ms = -webInterface_inst.module_signal_processor.max_doppler * c / webInterface_inst.module_receiver.daq_center_freq
+ bistatic_speed_kmh = bistatic_speed_ms * 3.6
+
+ #y_range = list(np.arange(-y_height/2, y_height/2))
+ #y_range = list(np.linspace(-webInterface_inst.module_signal_processor.max_doppler, webInterface_inst.module_signal_processor.max_doppler, y_height)) # in Hz
+
+ y_range = list(np.linspace(-bistatic_speed_kmh, bistatic_speed_kmh, y_height)) # in Hz
+
+ #if webInterface_inst.RD_matrix is not None:
+ if not webInterface_inst.pr_graph_reset_flag:
app.push_mods({
'pr-graph': {'extendData': [dict(z = [CAFMatrixLog], y = [y_range]), [0], len(CAFMatrixLog)]}
+ #'pr-graph': {'extendData': [dict(z = [CAFMatrixLog], x = [x_range], y = [y_range]), [0], len(CAFMatrixLog)]}
+ })
+ else:
+ webInterface_inst.pr_graph_reset_flag = False
+
+ x_length = CAFMatrixLog.shape[1]
+ bistatic_resolution = c / (webInterface_inst.module_receiver.iq_header.sampling_freq)
+ bistatic_resolution_km = bistatic_resolution / 1000
+ print(str(CAFMatrixLog.shape))
+
+ x_range = list(np.linspace(0, x_length*bistatic_resolution_km, x_length))
+
+ pr_fig = go.Figure(layout=fig_layout)
+ pr_fig.add_trace(go.Heatmap(
+ z=CAFMatrixLog,
+ x=x_range,
+ y=y_range,
+ zsmooth='best', #False,
+ #zsmooth=False, #False,
+ showscale=False,
+ #hoverinfo='skip',
+ colorscale=[[0.0, '#000020'],
+ [0.0714, '#000030'],
+ [0.1428, '#000050'],
+ [0.2142, '#000091'],
+ [0.2856, '#1E90FF'],
+ [0.357, '#FFFFFF'],
+ [0.4284, '#FFFF00'],
+ [0.4998, '#FE6D16'],
+ [0.5712, '#FE6D16'],
+ [0.6426, '#FF0000'],
+ [0.714, '#FF0000'],
+ [0.7854, '#C60000'],
+ [0.8568, '#9F0000'],
+ [0.9282, '#750000'],
+ [1.0, '#4A0000']]))
+
+
+ pr_fig.update_xaxes(title_text="Bistatic Range [km]",
+ color='rgba(255,255,255,1)',
+ title_font_size=20,
+ #tickfont_size=figure_font_size,
+ #mirror=True,
+ ticks='outside',
+ showline=True)
+ pr_fig.update_yaxes(title_text="Bistatic Speed [km/h]",
+ color='rgba(255,255,255,1)',
+ title_font_size=20,
+ #tickfont_size=figure_font_size,
+ #range=[-5, 5],
+ #mirror=True,
+ ticks='outside',
+ showline=True)
+
+ #x_range
+
+ app.push_mods({
+ 'pr-graph': {'figure': pr_fig},
})
def plot_spectrum():
diff --git a/_signal_processing/krakenSDR_signal_processor.py b/_signal_processing/krakenSDR_signal_processor.py
index f3c7633..19db3ff 100755
--- a/_signal_processing/krakenSDR_signal_processor.py
+++ b/_signal_processing/krakenSDR_signal_processor.py
@@ -135,6 +135,7 @@ class SignalProcessor(threading.Thread):
self.spectrum = None #np.ones((self.channel_number+2,N), dtype=np.float32)
self.spectrum_upd_counter = 0
+
def run(self):
"""
diff --git a/settings.json b/settings.json
index dfc01a9..b656ff0 100755
--- a/settings.json
+++ b/settings.json
@@ -1,7 +1,7 @@
{
"center_freq": 569.0,
- "gain_1": 25.4,
- "gain_2": 7.7,
+ "gain_1": 44.5,
+ "gain_2": 44.5,
"data_interface": "shmem",
"default_ip": "0.0.0.0",
"en_pr": true,
@@ -13,9 +13,7 @@
"pr_dynrange_min": -20,
"pr_dynrange_max": 10,
"en_hw_check": 0,
- "en_advanced_daq_cfg": [
- 1
- ],
+ "en_advanced_daq_cfg": [],
"logging_level": 5,
"disable_tooltips": 0
} \ No newline at end of file