working 2-port capture

This commit is contained in:
2025-07-07 20:13:59 -06:00
parent 6f947a28fa
commit f021780971
2 changed files with 15 additions and 18 deletions

View File

@ -302,19 +302,23 @@ class Charon:
return np.mean(data[1] / data[0]) return np.mean(data[1] / data[0])
def sweep_b_over_a(self): def sweep_b_over_a(self, **kwargs):
s = xr.DataArray( s = xr.DataArray(
np.zeros( np.zeros(
len(self.frequency), [len(self.frequency), len(self.ports), len(self.ports)],
dtype=np.complex128, dtype=np.complex128,
), ),
dims=["frequency"], dims=["frequency", "m", "n"],
coords=dict( coords=dict(
frequency=self.frequency, frequency=self.frequency,
m=list(self.ports),
n=list(self.ports),
), ),
) )
for frequency in self.frequency: for m in s.m.data:
s.loc[dict(frequency=frequency)] = self.get_b_over_a(frequency=frequency) 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 return s
def vna_capture(self, frequency: npt.ArrayLike, callback: Callable[int, int] | None = None): def vna_capture(self, frequency: npt.ArrayLike, callback: Callable[int, int] | None = None):

View File

@ -8,24 +8,17 @@ from charon_vna.vna import Charon
frequency = np.linspace(80e6, 280e6, 31) frequency = np.linspace(80e6, 280e6, 31)
# %% # %%
vna = Charon(frequency=frequency) vna = Charon(frequency=frequency, ports=[1, 2])
# %% # %%
vna.set_switches(b=0, a=0) s = vna.sweep_b_over_a()
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)
# %% # %%
plt.plot(s11.frequency, 20 * np.log10(np.abs(s11)), label="$S_{11}$") for m in s.m.data:
plt.plot(s21.frequency, 20 * np.log10(np.abs(s21)), label="$S_{21}$") for n in s.n.data:
plt.plot(s22.frequency, 20 * np.log10(np.abs(s22)), label="$S_{22}$") plt.plot(s.frequency, 20 * np.log10(np.abs(s.sel(m=m, n=n))), label="$S_{" + str(m) + str(n) + "}$")
plt.plot(s12.frequency, 20 * np.log10(np.abs(s12)), label="$S_{12}$")
plt.grid(True) plt.grid(True)
plt.legend() plt.legend()
# %% # %%