working 2-port capture
This commit is contained in:
@ -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):
|
||||||
|
@ -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()
|
||||||
|
|
||||||
|
|
||||||
# %%
|
# %%
|
||||||
|
Reference in New Issue
Block a user