From 510efe85a6e7720648c89a36b0f1a55bdcac1e59 Mon Sep 17 00:00:00 2001 From: Martin Killenberg <martin.killenberg@desy.de> Date: Thu, 19 Jan 2023 16:41:08 +0100 Subject: [PATCH] refactor phase and magnitude simulation Currently only sensitive to temperature changes. This is to prepare for humidity simulation. --- Python_script/VNA_dummy.py | 50 ++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/Python_script/VNA_dummy.py b/Python_script/VNA_dummy.py index f81e210..506397b 100644 --- a/Python_script/VNA_dummy.py +++ b/Python_script/VNA_dummy.py @@ -24,12 +24,12 @@ class VnaDummy: self.result_format = 'SDAT' self.simulated_power = '10.dBm' self.simulated_frequency = '10.MHz' - self.simulated_magnitude = 0.7 - self.simulated_phase = 70 + self.simulated_magnitude_difference_temp = 0.0 + self.simulated_phase_difference_temp = 0.0 self.simulated_state = shared_simulated_state.get_simulated_state() self.last_simulated_time = self.simulated_state.simulated_time - self.tau_mag = 25 - self.tau_phase = 35 + self.tau_mag_temp = 25 + self.tau_phase_temp = 35 self.reference_magnitude = 0.7 # at reference temp and reference hum self.reference_phase = 70 # at reference temp and reference hum self.reference_temp = 25 @@ -44,23 +44,26 @@ class VnaDummy: def simulate_magnitude(self): - target_magnitude = self.reference_magnitude - self.magnitude_slope * \ - (self.simulated_state.simulated_temperature - self.reference_temp) - delta_magnitude = target_magnitude - self.simulated_magnitude - new_time = self.simulated_state.simulated_time - delta_time = new_time - self.last_simulated_time + target_magnitude_difference_temp = -1. * self.magnitude_slope * \ + (self.simulated_state.simulated_temperature - self.reference_temp) + delta_magnitude = target_magnitude_difference_temp - self.simulated_magnitude_difference_temp - self.simulated_magnitude = self.simulated_magnitude+delta_magnitude*(1-(math.exp(-1.*delta_time/self.tau_mag))) + delta_time = self.simulated_state.simulated_time - self.last_simulated_time + + self.simulated_magnitude_difference_temp = self.simulated_magnitude_difference_temp + \ + delta_magnitude * \ + (1 - (math.exp(-1. * delta_time / self.tau_mag_temp))) def simulate_phase(self): - target_phase = self.reference_phase + self.phase_slope * \ - (self.simulated_state.simulated_temperature - self.reference_temp) - delta_phase = target_phase - self.simulated_phase - new_time = self.simulated_state.simulated_time - delta_time = new_time - self.last_simulated_time + target_phase_difference_temp = self.phase_slope * \ + (self.simulated_state.simulated_temperature - self.reference_temp) + delta_phase = target_phase_difference_temp - self.simulated_phase_difference_temp + + delta_time = self.simulated_state.simulated_time - self.last_simulated_time - self.simulated_phase = self.simulated_phase + delta_phase*(1 - (math.exp(-1. * delta_time/self.tau_phase))) + self.simulated_phase_difference_temp = self.simulated_phase_difference_temp + \ + delta_phase * (1 - (math.exp(-1. * delta_time / self.tau_phase_temp))) def get_tupple_of_current_traces(self): """ @@ -92,15 +95,18 @@ class VnaDummy: def set_sweep_mode(self, mode): return '1' - + def get_measurement_string(self, trace, result_format): if trace not in self.simulated_traces: - raise Exception('trace '+trace+' is not known to VNA dummy!') + raise Exception('trace ' + trace + ' is not known to VNA dummy!') self.result_format = result_format - phase_radian = self.simulated_phase / 180. * math.pi - real_val = self.simulated_magnitude * math.cos(phase_radian) - imaginary_val = self.simulated_magnitude * math.sin(phase_radian) + simulated_magnitude = self.reference_magnitude + self.simulated_magnitude_difference_temp + simulated_phase = self.reference_phase + self.simulated_phase_difference_temp + + phase_radian = simulated_phase / 180. * math.pi + real_val = simulated_magnitude * math.cos(phase_radian) + imaginary_val = simulated_magnitude * math.sin(phase_radian) measurment_string = ' ' for i in range(50): @@ -124,5 +130,3 @@ class VnaDummy: def do_single_sweep(self): pass - - -- GitLab