Spaces:
Runtime error
Runtime error
File size: 5,522 Bytes
e78c327 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
import streamlit as st
from radar_simulation import RadarSimulation # Ensure this is your radar simulation module
from spectrometer_simulation import SpectrometerSimulation # Ensure this is your spectrometer simulation module
import plotly.graph_objects as go
import numpy as np
from seismic_simulation import SeismicSimulation # Ensure this is your seismic simulation module
def main():
st.title("Raders and Sensors Simulation")
tab1, tab2, tab3 = st.tabs(["Radar Simulation", "Spectrometer Simulation", "Laser Simulation"])
with tab1:
radar_simulation()
with tab2:
spectrometer_simulation()
with tab3:
seismic_simulation()
def radar_simulation():
st.subheader("Radar Data Simulation")
radar_range = st.number_input("Radar Range (meters)", 50, 200, 100, key='radar_range')
radar_frequency = st.number_input("Radar Frequency (GHz)", 1.0, 20.0, 10.0, key='radar_freq')
time_steps = st.number_input("Number of Time Steps", min_value=10, max_value=100, value=50, key='time_steps')
loop_frequency = st.number_input("Drone Loop Frequency", 0.01, 0.5, 0.1, key='loop_freq')
radar = RadarSimulation(radar_position=[0, 0], radar_range=radar_range, radar_frequency=radar_frequency)
radar.add_target("missile", [50, 80], [-2, -6], rcs=1.0)
radar.add_target("drone", [20, -50], [-5, 0], rcs=0.5)
radar.add_target("plane", [70, 0], [-5, 0], rcs=2.0)
if st.button("Run Radar Simulation"):
radar.run_simulation(time_steps, dt=1, loop_frequency=loop_frequency)
data = radar.get_simulation_data()
plot_radar_results(data)
def plot_radar_results(data):
# Radar target movement plot
fig = go.Figure()
for name, values in data['positions'].items():
x, y = zip(*values) if values else ([], [])
fig.add_trace(go.Scatter(x=x, y=y, mode='lines+markers', name=name))
fig.update_layout(title='Radar Target Movement', xaxis_title='Distance X (m)', yaxis_title='Distance Y (m)', legend_title='Targets')
st.plotly_chart(fig, use_container_width=True)
# Additional plots for Doppler Shifts, SNR, and RSSI
metrics = ['doppler_shifts', 'snr_values', 'rssi_values']
titles = ["Doppler Shifts", "Signal-to-Noise Ratio (SNR)", "RSSI (dBm)"]
units = ['Hz', '', 'dBm']
for metric, title, unit in zip(metrics, titles, units):
fig = go.Figure()
for name, values in data[metric].items():
fig.add_trace(go.Scatter(y=values, mode='lines+markers', name=name))
fig.update_layout(title=title, xaxis_title="Time Step", yaxis_title=f"{title} ({unit})", legend_title="Targets")
st.plotly_chart(fig, use_container_width=True)
def spectrometer_simulation():
st.subheader("Spectrometer Data Simulation")
sim = SpectrometerSimulation()
# Pre-defined characteristics for different events
event_types = ['APFSDS launch', 'HE projectile launch', 'RPG launch', 'TNT explosion']
event_name = st.selectbox("Event Type", event_types, key="event_type")
center_time = st.number_input("Center Time (ms)", 0, 100, 20, key="center_time")
rise_time = st.number_input("Rise Time (ms)", 1, 20, 2, key="rise_time")
fall_time = st.number_input("Fall Time (ms)", 1, 30, 10, key="fall_time")
peak_amplitude = st.number_input("Peak Amplitude (a.u.)", 1, 100, 80, key="peak_amplitude")
# Set the characteristics based on user inputs
sim.set_characteristics({
event_name: {
'center_time': center_time,
'rise_time': rise_time,
'fall_time': fall_time,
'peak_amplitude': peak_amplitude
}
})
if st.button("Update and Visualize Spectrometer Characteristics"):
time_ms, emissions = sim.generate_data()
plot_spectrometer_results(time_ms, emissions)
def plot_spectrometer_results(time_ms, emissions):
fig = go.Figure()
for event, emission in emissions.items():
fig.add_trace(go.Scatter(x=time_ms, y=emission, mode='lines', name=event))
fig.update_layout(title='Spectrometer Emissions', xaxis_title='Time [ms]', yaxis_title='Normalized power [a.u.]', legend_title='Events')
st.plotly_chart(fig, use_container_width=True)
def seismic_simulation():
st.subheader("Seismic Response Simulation")
frequencies = np.linspace(50, 1500, 1451)
seismic = SeismicSimulation(frequencies)
soil_impact_on = st.slider("Soil Impact on Mine", 0.0, 1.0, 0.1)
noise_level_on = st.slider("Noise Level on Mine", 0.0, 0.01, 0.001, step=0.0001)
soil_impact_off = st.slider("Soil Impact off Mine", 0.0, 1.0, 0.5)
noise_level_off = st.slider("Noise Level off Mine", 0.0, 0.01, 0.002, step=0.0001)
if st.button("Run Seismic Simulation"):
results = seismic.generate_data(soil_impact_on, noise_level_on, soil_impact_off, noise_level_off)
plot_seismic_results(frequencies, results)
def plot_seismic_results(frequencies, results):
for mine, (on_response, off_response) in results.items():
fig = go.Figure()
fig.add_trace(go.Scatter(x=frequencies, y=on_response, mode='lines', name='Laser on Mine', line=dict(color='red')))
fig.add_trace(go.Scatter(x=frequencies, y=off_response, mode='lines', name='Laser off Mine', line=dict(dash='dash', color='black')))
fig.update_layout(title=f'{mine} Mine Response', xaxis_title='Frequency (Hz)', yaxis_title='Velocity (nm/sec)')
st.plotly_chart(fig, use_container_width=True)
if __name__ == "__main__":
main() |