Files
ovf/utils.py
2025-09-15 11:41:55 -04:00

56 lines
1.9 KiB
Python

import requests
import time
from schemas.paramer import SimulationRequestUnit, SimulationResponseUnit, UuidResponseUnit
import skrf as rf
from typing import Literal
import matplotlib.pyplot as plt
def send_get_request(url):
try:
response = requests.get(url)
response.raise_for_status() # Raise an error for bad responses
return response.json()
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
return None
def get_network(file_path: str) -> rf.Network:
network = rf.Network(file_path)
return network
def get_rms_error(vf: rf.VectorFitting,parameter_type:Literal['s','y','z']):
rms_error = []
for i in range(vf.network.nports):
rms_error_row = []
for j in range(vf.network.nports):
rms_error = vf.get_rms_error(i, j, parameter_type)
rms_error_row.append(rms_error)
rms_error.append(rms_error_row)
return rms_error
def show_rms_error(vf: rf.VectorFitting,parameter_type:Literal['s','y','z'],show_plot:bool=True,save_path:str|None=None):
freqs = vf.network.f
nports = vf.network.nports
fig, ax = plt.subplots(nports, nports)
fig.set_size_inches(6*nports, 4*nports)
for i in range(nports):
for j in range(nports):
vf.plot("mag",0,1,freqs,ax=ax[i][j],parameter=parameter_type)
fig.tight_layout()
if show_plot:
plt.show()
if save_path:
plt.savefig(save_path)
def remove_simulation_with_high_rms_error(simulations:list[rf.VectorFitting],limit:float=0.015,parameter_type:Literal['s','y','z']='s'):
nports = simulations[0].network.nports
index_of_filtered_simulations = []
for res in simulations:
for i in range(nports):
for j in range(nports):
rms_error = res.get_rms_error(i, j, parameter_type)
if rms_error > limit:
index_of_filtered_simulations.append(i*nports+j)
break