56 lines
1.9 KiB
Python
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
|