diff --git a/charon_vna/config_default.json b/charon_vna/config_default.json index f040500..0631dfa 100644 --- a/charon_vna/config_default.json +++ b/charon_vna/config_default.json @@ -1,16 +1,505 @@ { "frequency": [ - 1000000000.0, - 1100000000.0, - 1200000000.0, - 1300000000.0, - 1400000000.0, - 1500000000.0, - 1600000000.0, - 1700000000.0, - 1800000000.0, - 1900000000.0, - 2000000000.0 + 80000000.0, + 80841683.36673346, + 81683366.73346694, + 82525050.1002004, + 83366733.46693386, + 84208416.83366734, + 85050100.2004008, + 85891783.56713426, + 86733466.93386774, + 87575150.3006012, + 88416833.66733468, + 89258517.03406814, + 90100200.4008016, + 90941883.76753508, + 91783567.13426854, + 92625250.501002, + 93466933.86773548, + 94308617.23446894, + 95150300.6012024, + 95991983.96793588, + 96833667.33466934, + 97675350.70140281, + 98517034.06813627, + 99358717.43486974, + 100200400.8016032, + 101042084.16833667, + 101883767.53507014, + 102725450.90180361, + 103567134.26853707, + 104408817.63527054, + 105250501.00200401, + 106092184.36873747, + 106933867.73547095, + 107775551.10220441, + 108617234.46893787, + 109458917.83567134, + 110300601.20240481, + 111142284.56913827, + 111983967.93587175, + 112825651.30260521, + 113667334.66933867, + 114509018.03607213, + 115350701.40280561, + 116192384.76953909, + 117034068.13627255, + 117875751.50300601, + 118717434.86973947, + 119559118.23647295, + 120400801.60320641, + 121242484.96993989, + 122084168.33667335, + 122925851.70340681, + 123767535.07014027, + 124609218.43687375, + 125450901.80360723, + 126292585.17034069, + 127134268.53707415, + 127975951.90380761, + 128817635.27054109, + 129659318.63727455, + 130501002.00400802, + 131342685.37074149, + 132184368.73747495, + 133026052.10420841, + 133867735.47094189, + 134709418.83767536, + 135551102.20440882, + 136392785.5711423, + 137234468.93787575, + 138076152.30460924, + 138917835.67134267, + 139759519.03807616, + 140601202.40480962, + 141442885.7715431, + 142284569.13827655, + 143126252.50501, + 143967935.8717435, + 144809619.23847696, + 145651302.60521042, + 146492985.97194389, + 147334669.33867735, + 148176352.70541084, + 149018036.07214427, + 149859719.43887776, + 150701402.80561122, + 151543086.17234468, + 152384769.53907818, + 153226452.9058116, + 154068136.2725451, + 154909819.63927856, + 155751503.00601202, + 156593186.3727455, + 157434869.73947895, + 158276553.10621244, + 159118236.4729459, + 159959919.83967936, + 160801603.20641282, + 161643286.57314628, + 162484969.93987978, + 163326653.30661324, + 164168336.6733467, + 165010020.04008016, + 165851703.40681362, + 166693386.7735471, + 167535070.14028054, + 168376753.50701404, + 169218436.8737475, + 170060120.24048096, + 170901803.60721445, + 171743486.97394788, + 172585170.34068137, + 173426853.70741484, + 174268537.0741483, + 175110220.4408818, + 175951903.80761522, + 176793587.1743487, + 177635270.54108217, + 178476953.90781564, + 179318637.2745491, + 180160320.64128256, + 181002004.00801605, + 181843687.37474948, + 182685370.74148297, + 183527054.10821643, + 184368737.4749499, + 185210420.8416834, + 186052104.20841682, + 186893787.5751503, + 187735470.94188377, + 188577154.30861723, + 189418837.67535073, + 190260521.04208416, + 191102204.40881765, + 191943887.7755511, + 192785571.14228457, + 193627254.50901806, + 194468937.8757515, + 195310621.242485, + 196152304.60921845, + 196993987.9759519, + 197835671.34268537, + 198677354.70941883, + 199519038.07615232, + 200360721.44288576, + 201202404.80961925, + 202044088.1763527, + 202885771.54308617, + 203727454.90981966, + 204569138.2765531, + 205410821.6432866, + 206252505.01002005, + 207094188.3767535, + 207935871.743487, + 208777555.11022043, + 209619238.47695392, + 210460921.8436874, + 211302605.21042085, + 212144288.5771543, + 212985971.94388777, + 213827655.31062126, + 214669338.67735472, + 215511022.04408818, + 216352705.41082165, + 217194388.7775551, + 218036072.14428857, + 218877755.51102206, + 219719438.87775552, + 220561122.24448898, + 221402805.61122245, + 222244488.9779559, + 223086172.3446894, + 223927855.71142286, + 224769539.07815632, + 225611222.44488978, + 226452905.81162325, + 227294589.1783567, + 228136272.5450902, + 228977955.91182366, + 229819639.27855712, + 230661322.64529058, + 231503006.01202404, + 232344689.37875754, + 233186372.745491, + 234028056.11222446, + 234869739.47895792, + 235711422.84569138, + 236553106.21242484, + 237394789.57915834, + 238236472.9458918, + 239078156.31262526, + 239919839.67935872, + 240761523.04609218, + 241603206.41282564, + 242444889.77955914, + 243286573.1462926, + 244128256.51302606, + 244969939.87975952, + 245811623.24649298, + 246653306.61322647, + 247494989.97995993, + 248336673.3466934, + 249178356.71342686, + 250020040.08016032, + 250861723.44689378, + 251703406.81362727, + 252545090.18036073, + 253386773.5470942, + 254228456.91382766, + 255070140.28056112, + 255911823.6472946, + 256753507.01402807, + 257595190.38076153, + 258436873.747495, + 259278557.11422846, + 260120240.48096192, + 260961923.8476954, + 261803607.21442887, + 262645290.58116233, + 263486973.9478958, + 264328657.31462926, + 265170340.68136275, + 266012024.0480962, + 266853707.41482967, + 267695390.78156313, + 268537074.1482966, + 269378757.51503, + 270220440.8817636, + 271062124.248497, + 271903807.61523044, + 272745490.98196393, + 273587174.3486974, + 274428857.71543086, + 275270541.08216435, + 276112224.44889784, + 276953907.8156313, + 277795591.1823647, + 278637274.5490982, + 279478957.9158317, + 280320641.2825651, + 281162324.6492986, + 282004008.0160321, + 282845691.38276553, + 283687374.74949896, + 284529058.1162325, + 285370741.48296595, + 286212424.8496994, + 287054108.21643287, + 287895791.58316636, + 288737474.9498998, + 289579158.3166333, + 290420841.6833668, + 291262525.0501002, + 292104208.41683364, + 292945891.78356713, + 293787575.1503006, + 294629258.51703405, + 295470941.88376755, + 296312625.25050104, + 297154308.61723447, + 297995991.98396796, + 298837675.35070145, + 299679358.7174349, + 300521042.0841683, + 301362725.4509018, + 302204408.8176353, + 303046092.1843687, + 303887775.5511022, + 304729458.9178357, + 305571142.28456914, + 306412825.6513026, + 307254509.0180361, + 308096192.38476956, + 308937875.751503, + 309779559.1182365, + 310621242.48497, + 311462925.8517034, + 312304609.2184369, + 313146292.5851704, + 313987975.9519038, + 314829659.31863725, + 315671342.68537074, + 316513026.05210423, + 317354709.41883767, + 318196392.78557116, + 319038076.15230465, + 319879759.5190381, + 320721442.8857715, + 321563126.25250506, + 322404809.6192385, + 323246492.9859719, + 324088176.3527054, + 324929859.7194389, + 325771543.08617234, + 326613226.45290583, + 327454909.8196393, + 328296593.18637276, + 329138276.5531062, + 329979959.9198397, + 330821643.2865732, + 331663326.6533066, + 332505010.0200401, + 333346693.3867736, + 334188376.753507, + 335030060.12024045, + 335871743.486974, + 336713426.85370743, + 337555110.22044086, + 338396793.58717436, + 339238476.95390785, + 340080160.3206413, + 340921843.6873748, + 341763527.05410826, + 342605210.4208417, + 343446893.7875751, + 344288577.1543086, + 345130260.5210421, + 345971943.88777554, + 346813627.25450903, + 347655310.6212425, + 348496993.98797596, + 349338677.35470945, + 350180360.7214429, + 351022044.08817637, + 351863727.45490986, + 352705410.8216433, + 353547094.1883768, + 354388777.5551102, + 355230460.9218437, + 356072144.28857714, + 356913827.65531063, + 357755511.0220441, + 358597194.38877755, + 359438877.75551105, + 360280561.1222445, + 361122244.48897797, + 361963927.85571146, + 362805611.2224449, + 363647294.5891784, + 364488977.9559118, + 365330661.3226453, + 366172344.6893788, + 367014028.05611223, + 367855711.4228457, + 368697394.78957915, + 369539078.15631264, + 370380761.5230461, + 371222444.88977957, + 372064128.25651306, + 372905811.6232465, + 373747494.98998, + 374589178.3567134, + 375430861.7234469, + 376272545.0901804, + 377114228.4569138, + 377955911.8236473, + 378797595.19038075, + 379639278.55711424, + 380480961.92384773, + 381322645.29058117, + 382164328.65731466, + 383006012.0240481, + 383847695.3907816, + 384689378.7575151, + 385531062.1242485, + 386372745.490982, + 387214428.8577154, + 388056112.2244489, + 388897795.59118235, + 389739478.95791584, + 390581162.32464933, + 391422845.69138277, + 392264529.05811626, + 393106212.4248497, + 393947895.7915832, + 394789579.1583167, + 395631262.5250501, + 396472945.8917836, + 397314629.258517, + 398156312.6252505, + 398997995.991984, + 399839679.35871744, + 400681362.72545093, + 401523046.09218436, + 402364729.45891786, + 403206412.8256513, + 404048096.1923848, + 404889779.5591183, + 405731462.9258517, + 406573146.2925852, + 407414829.6593186, + 408256513.0260521, + 409098196.3927856, + 409939879.75951904, + 410781563.12625253, + 411623246.49298596, + 412464929.85971946, + 413306613.22645295, + 414148296.5931864, + 414989979.95991987, + 415831663.3266533, + 416673346.6933868, + 417515030.0601203, + 418356713.4268537, + 419198396.7935872, + 420040080.16032064, + 420881763.52705413, + 421723446.89378756, + 422565130.26052105, + 423406813.62725455, + 424248496.993988, + 425090180.36072147, + 425931863.7274549, + 426773547.0941884, + 427615230.4609219, + 428456913.8276553, + 429298597.1943888, + 430140280.56112224, + 430981963.92785573, + 431823647.2945892, + 432665330.66132265, + 433507014.02805614, + 434348697.3947896, + 435190380.76152307, + 436032064.12825656, + 436873747.49499, + 437715430.8617235, + 438557114.2284569, + 439398797.5951904, + 440240480.96192384, + 441082164.3286573, + 441923847.6953908, + 442765531.06212425, + 443607214.42885774, + 444448897.7955912, + 445290581.16232467, + 446132264.52905816, + 446973947.8957916, + 447815631.2625251, + 448657314.6292585, + 449498997.995992, + 450340681.3627255, + 451182364.7294589, + 452024048.0961924, + 452865731.46292585, + 453707414.82965934, + 454549098.1963928, + 455390781.56312627, + 456232464.92985976, + 457074148.2965932, + 457915831.6633267, + 458757515.0300601, + 459599198.3967936, + 460440881.7635271, + 461282565.1302605, + 462124248.496994, + 462965931.86372745, + 463807615.23046094, + 464649298.59719443, + 465490981.96392787, + 466332665.33066136, + 467174348.6973948, + 468016032.0641283, + 468857715.4308618, + 469699398.7975952, + 470541082.1643287, + 471382765.5310621, + 472224448.8977956, + 473066132.26452905, + 473907815.63126254, + 474749498.99799603, + 475591182.36472946, + 476432865.73146296, + 477274549.0981964, + 478116232.4649299, + 478957915.83166337, + 479799599.1983968, + 480641282.5651303, + 481482965.9318637, + 482324649.2985972, + 483166332.6653307, + 484008016.03206414, + 484849699.39879763, + 485691382.76553106, + 486533066.13226455, + 487374749.498998, + 488216432.8657315, + 489058116.23246497, + 489899799.5991984, + 490741482.9659319, + 491583166.3326653, + 492424849.6993988, + 493266533.0661323, + 494108216.43286574, + 494949899.79959923, + 495791583.16633266, + 496633266.53306615, + 497474949.89979964, + 498316633.2665331, + 499158316.63326657, + 500000000.0 ], "power": -5 -} \ No newline at end of file +} diff --git a/charon_vna/config_default.py b/charon_vna/config_default.py index 85544f2..f38cdfb 100644 --- a/charon_vna/config_default.py +++ b/charon_vna/config_default.py @@ -6,7 +6,7 @@ import numpy as np from charon_vna.gui import DEFAULT_CONFIG config = dict( - frequency=np.linspace(1e9, 2e9, 11).tolist(), + frequency=np.linspace(80e6, 500e6, 500).tolist(), power=-5, ) diff --git a/charon_vna/gui.py b/charon_vna/gui.py index 2910d7d..0c9fa3f 100644 --- a/charon_vna/gui.py +++ b/charon_vna/gui.py @@ -1,5 +1,6 @@ # %% imports import json +import pickle import re import sys from pathlib import Path @@ -7,11 +8,13 @@ from typing import List import matplotlib as mpl import numpy as np +import skrf as rf import xarray as xr from numpy import typing as npt from PySide6.QtGui import QAction, QKeySequence from PySide6.QtWidgets import ( QApplication, + QDialogButtonBox, QFileDialog, QInputDialog, QLineEdit, @@ -24,6 +27,7 @@ from PySide6.QtWidgets import ( from vna import Charon from charon_vna.plots import PlotWidget +from charon_vna.util import net2s, s2net # %% DEFAULT_CONFIG = Path(__file__).parent / "config_default.json" @@ -88,6 +92,9 @@ class MainWindow(QMainWindow): menu_calibration = QMenu("&Calibration") menubar.addMenu(menu_calibration) + action_cal_solt = QAction("&SOLT", self) + action_cal_solt.triggered.connect(self.calibrate_solt) + menu_calibration.addAction(action_cal_solt) # Content window_layout = QVBoxLayout() @@ -163,22 +170,26 @@ class MainWindow(QMainWindow): print(f"Loading config from {path}...") # TODO: load config + def progress_callback(self, done: int, total: int): + self.prog_sweep.setMaximum(total) + self.prog_sweep.setValue(done) + def capture(self) -> None: - def callback(done: int, total: int): - self.prog_sweep.setMaximum(total) - self.prog_sweep.setValue(done) + s = self.vna.vna_capture(self._frequency, self.progress_callback) - s = self.vna.vna_capture(self._frequency, callback) - - data = xr.DataArray( - [[s]], - dims=["m", "n", "frequency"], - coords=dict( - frequency=s.coords["frequency"], - m=[1], - n=[1], - ), - ) + if self.vna.calibration is not None: + s_calibrated = self.vna.calibration.apply_cal(s2net(s)) + data = net2s(s_calibrated) + else: + data = xr.DataArray( + [[s]], + dims=["m", "n", "frequency"], + coords=dict( + frequency=s.coords["frequency"], + m=[1], + n=[1], + ), + ) for plot in self.plots: plot.update_plot(data) @@ -197,6 +208,31 @@ class MainWindow(QMainWindow): # Currently does not support zero span self._frequency = frequency + def calibrate_solt(self): + if len(self.vna.ports) > 1: + raise NotImplementedError + + calfile = Path(__file__).parent / "cal.pkl" + if calfile.exists(): + # don't re-cal while debugging because that's slooooooow + with open(calfile, "rb") as f: + calibration = pickle.load(f) + else: + s = dict() + for net in ["short", "open", "load"]: + input(f"Connect {net} standard and press ENTER...") + s[net] = self.vna.vna_capture(self._frequency, self.progress_callback) + + ideal = rf.media.DefinedGammaZ0(frequency=rf.media.Frequency.from_f(self._frequency, unit="Hz")) + calibration = rf.calibration.OnePort( + [s2net(s["short"]), s2net(s["open"]), s2net(s["load"])], + [ideal.short(), ideal.open(), ideal.load(0)], + ) + # TODO: don't use pickles for calibration. They're fragile + with open(calfile, "wb") as f: + pickle.dump(calibration, f) + self.vna.calibration = calibration + def main() -> None: app = QApplication(sys.argv) diff --git a/charon_vna/vna.py b/charon_vna/vna.py index 8ecf4a9..f1c43b5 100644 --- a/charon_vna/vna.py +++ b/charon_vna/vna.py @@ -13,7 +13,8 @@ from matplotlib import pyplot as plt from matplotlib.ticker import EngFormatter from numpy import typing as npt from scipy import signal -from util import HAM_BANDS, db20, net2s, s2net + +from charon_vna.util import HAM_BANDS, db20, net2s, s2net dir_ = Path(__file__).parent