From f0217809713453d5d60e7b36ee865f606b6d9bba Mon Sep 17 00:00:00 2001 From: Brendan Haines Date: Mon, 7 Jul 2025 20:13:59 -0600 Subject: [PATCH] working 2-port capture --- charon_vna/vna.py | 14 +++++++++----- charon_vna/vna_dev.py | 19 ++++++------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/charon_vna/vna.py b/charon_vna/vna.py index 253aa83..d9da261 100644 --- a/charon_vna/vna.py +++ b/charon_vna/vna.py @@ -302,19 +302,23 @@ class Charon: return np.mean(data[1] / data[0]) - def sweep_b_over_a(self): + def sweep_b_over_a(self, **kwargs): s = xr.DataArray( np.zeros( - len(self.frequency), + [len(self.frequency), len(self.ports), len(self.ports)], dtype=np.complex128, ), - dims=["frequency"], + dims=["frequency", "m", "n"], coords=dict( frequency=self.frequency, + m=list(self.ports), + n=list(self.ports), ), ) - for frequency in self.frequency: - s.loc[dict(frequency=frequency)] = self.get_b_over_a(frequency=frequency) + for m in s.m.data: + for n in s.n.data: + self.set_switches(b=m - 1, a=n - 1) + s.loc[dict(m=m, n=n)] = self.vna_capture(frequency=self.frequency, **kwargs) return s def vna_capture(self, frequency: npt.ArrayLike, callback: Callable[int, int] | None = None): diff --git a/charon_vna/vna_dev.py b/charon_vna/vna_dev.py index 2a9bc66..1705564 100644 --- a/charon_vna/vna_dev.py +++ b/charon_vna/vna_dev.py @@ -8,24 +8,17 @@ from charon_vna.vna import Charon frequency = np.linspace(80e6, 280e6, 31) # %% -vna = Charon(frequency=frequency) +vna = Charon(frequency=frequency, ports=[1, 2]) # %% -vna.set_switches(b=0, a=0) -s11 = vna.vna_capture(frequency) -vna.set_switches(b=1, a=0) -s21 = vna.vna_capture(frequency) -vna.set_switches(b=1, a=1) -s22 = vna.vna_capture(frequency) -vna.set_switches(b=0, a=1) -s12 = vna.vna_capture(frequency) +s = vna.sweep_b_over_a() # %% -plt.plot(s11.frequency, 20 * np.log10(np.abs(s11)), label="$S_{11}$") -plt.plot(s21.frequency, 20 * np.log10(np.abs(s21)), label="$S_{21}$") -plt.plot(s22.frequency, 20 * np.log10(np.abs(s22)), label="$S_{22}$") -plt.plot(s12.frequency, 20 * np.log10(np.abs(s12)), label="$S_{12}$") +for m in s.m.data: + for n in s.n.data: + plt.plot(s.frequency, 20 * np.log10(np.abs(s.sel(m=m, n=n))), label="$S_{" + str(m) + str(n) + "}$") plt.grid(True) plt.legend() + # %%