Add code to calibrate.

pull/697/head
Otto Edgren 2024-04-09 16:15:26 +02:00
rodzic 20dfc144d3
commit 3625b7153b
2 zmienionych plików z 48 dodań i 4 usunięć

Wyświetl plik

@ -4,6 +4,6 @@ from src.NanoVNASaverHeadless import NanoVNASaverHeadless
############### TODO: Implement high level script for newbies. #######################
vna = NanoVNASaverHeadless(vna_index=0, verbose=True)
vna.set_sweep(2.9e9, 3.1e9)
vna.calibrate()
vna.stream_data()
#vna.calibrate()
vna.kill()

Wyświetl plik

@ -1,18 +1,41 @@
from .Hardware import Hardware as hw
from .Hardware.VNA import VNA
from .Calibration import Calibration
from .RFTools import Datapoint
import matplotlib.pyplot as plt
import math
class NanoVNASaverHeadless:
def __init__(self, vna_index=0, verbose=False):
self.verbose = verbose
self.iface = hw.get_interfaces()[vna_index]
self.vna = hw.get_VNA(self.iface)
self.calibration = Calibration()
if self.verbose:
print("VNA is connected: ", self.vna.connected())
print("Firmware: ", self.vna.readFirmware())
print("Features: ", self.vna.read_features())
def calibrate(self):
print(str(self.vna.getCalibration()))
self.wait_for_ans("OPEN")
data = self.get_data()
open_dp_list = self.make_datapoint_list(data[4], data[0], data[1])
self.calibration.insert("open", open_dp_list)
self.wait_for_ans("SHORT")
data = self.get_data()
short_dp_list = self.make_datapoint_list(data[4], data[0], data[1])
self.calibration.insert("short", short_dp_list)
self.wait_for_ans("LOAD")
data = self.get_data()
load_dp_list = self.make_datapoint_list(data[4], data[0], data[1])
self.calibration.insert("load", load_dp_list)
self.wait_for_ans("THROUGH")
data = self.get_data()
thru_dp_list = self.make_datapoint_list(data[4], data[2], data[3])
self.calibration.insert("through", thru_dp_list)
def set_sweep(self, start, stop):
self.vna.setSweep(start, stop)
@ -20,14 +43,35 @@ class NanoVNASaverHeadless:
def stream_data(self):
data = self.get_data()
pass
magnList = []
for re, im in zip(data[0], data[1]):
magn = (math.sqrt(re**2+im**2))
magnList.append(magn)
plt.plot(data[4], magnList)
plt.show()
def get_data(self):
dataS11 = self.vna.readValues("data 0")
dataS21 = self.vna.readValues("data 1")
reflRe, reflImag = self.split_data(dataS11)
thruRe, thruImag = self.split_data(dataS21)
return reflRe, reflImag, thruRe, thruImag
freq = self.vna.readFrequencies()
return reflRe, reflImag, thruRe, thruImag, freq
def make_datapoint_list(self, freqList, reList, imList):
list = []
for freq, re, im in zip(freqList, reList, imList):
list.append(Datapoint(freq, re, im))
return list
def wait_for_ans(self, string):
while True:
answer = input("Connect " + string + ": ").lower()
if answer == 'done':
print("Proceeding...")
break
else:
print("Invalid input. Please enter 'done' to continue.")
def split_data(self, data):
real = []