Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
import matplotlib.pyplot as plt | |
from sklearn.linear_model import LinearRegression | |
st.title("Phase Error Analysis") | |
# File Uploaders | |
de_sim_file = st.file_uploader("Upload simulation CSV", type="csv") | |
de_exp_file = st.file_uploader("Upload experiment CSV", type="csv") | |
if de_sim_file and de_exp_file: | |
# Read CSV files | |
sim_data = pd.read_csv(de_sim_file, header=None) | |
exp_data = pd.read_csv(de_exp_file, header=None) | |
center_x, center_y = sim_data.shape[1] // 2, sim_data.shape[0] // 2 | |
sim_data = sim_data.iloc[center_y - 1500:center_y + 1500, center_x - 1500:center_x + 1500] | |
# User input for line number | |
line_num = st.slider("Select line number", 0, min(sim_data.shape[0], exp_data.shape[0])-1, 1499) | |
x_values = np.arange(3000) | |
sim_selected_row = sim_data.iloc[line_num, :3000] | |
exp_selected_row = exp_data.iloc[line_num, :3000] | |
# Linear Regression for simulation and experiment | |
sim_linear_reg = LinearRegression() | |
exp_linear_reg = LinearRegression() | |
sim_linear_reg.fit(x_values.reshape(-1, 1), sim_selected_row) | |
exp_linear_reg.fit(x_values.reshape(-1, 1), exp_selected_row) | |
sim_pred_values = sim_linear_reg.predict(np.arange(3000).reshape(-1, 1)) | |
exp_pred_values = exp_linear_reg.predict(np.arange(3000).reshape(-1, 1)) | |
# Cacluate as percentage | |
chkbox = st.checkbox("Calculate as percentage") | |
sim_diff = sim_selected_row - sim_pred_values | |
exp_diff = exp_selected_row - exp_pred_values | |
if chkbox: | |
sim_diff = sim_diff / (2 * np.pi) * 100 | |
exp_diff = exp_diff / (2 * np.pi) * 100 | |
# Plotting | |
plt.figure(figsize=(20, 6)) | |
plt.plot(np.arange(500, 2500), exp_diff[500:2500], color='red', linestyle='-', label='experiment') | |
plt.plot(np.arange(500, 2500), sim_diff[500:2500], color='blue', linestyle='--', label='simulation') | |
plt.xlabel('x') | |
if chkbox: | |
plt.ylabel('phase error(%)') | |
else: | |
plt.ylabel('phase error(rad)') | |
plt.legend() | |
plt.grid(True) | |
st.pyplot(plt) |