smash some functions together
Some checks failed
Publish Python 🐍 distribution 📦 to PyPI and TestPyPI / Build distribution 📦 (push) Failing after -1m4s
Publish Python 🐍 distribution 📦 to PyPI and TestPyPI / Publish Python 🐍 distribution 📦 to PyPI (push) Has been skipped

This commit is contained in:
2025-07-07 22:28:21 -06:00
parent 81143a72c4
commit 339dbe255e
2 changed files with 24 additions and 27 deletions

View File

@ -305,7 +305,7 @@ class Charon:
return np.mean(data[1] / data[0])
def sweep_b_over_a(self, **kwargs):
def capture(self, callback: Callable[int, int] | None = None):
s = xr.DataArray(
np.zeros(
[len(self.frequency), len(self.ports), len(self.ports)],
@ -318,38 +318,35 @@ class Charon:
n=list(self.ports),
),
)
total_count = len(s.m) * len(s.n) * len(s.frequency)
count = 0
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):
s = xr.DataArray(
np.empty(len(frequency), dtype=np.complex128),
dims=["frequency"],
coords=dict(
frequency=frequency,
),
)
for ff, freq in enumerate(s.frequency.data):
if callback is not None:
# report progress during sweep
callback(ff, len(s.frequency))
self.set_output(frequency=freq, power=-5)
self.sdr.rx_destroy_buffer()
self.sdr.rx_lo = int(freq)
self.sdr.rx_enabled_channels = [0, 1]
self.sdr.gain_control_mode_chan0 = "manual"
self.sdr.gain_control_mode_chan1 = "manual"
self.sdr.rx_hardwaregain_chan0 = 40
self.sdr.rx_hardwaregain_chan1 = 40
rx = self.sdr.rx()
s.loc[dict(frequency=freq)] = np.mean(rx[1] / rx[0])
for ff, freq in enumerate(s.frequency.data):
if callback is not None:
# report progress during sweep
callback(count, total_count)
self.set_output(frequency=freq, power=-5)
self.sdr.rx_destroy_buffer()
self.sdr.rx_lo = int(freq)
self.sdr.rx_enabled_channels = [0, 1]
self.sdr.gain_control_mode_chan0 = "manual"
self.sdr.gain_control_mode_chan1 = "manual"
self.sdr.rx_hardwaregain_chan0 = 40
self.sdr.rx_hardwaregain_chan1 = 40
rx = self.sdr.rx()
s.loc[dict(frequency=freq, m=m, n=n)] = np.mean(rx[1] / rx[0])
count += 1
if callback is not None:
# mark capture as complete
callback(len(s.frequency), len(s.frequency))
callback(total_count, total_count)
return s

View File

@ -11,7 +11,7 @@ frequency = np.linspace(80e6, 280e6, 31)
vna = Charon(frequency=frequency, ports=2)
# %%
s = vna.sweep_b_over_a()
s = vna.capture()
# %%
for m in s.m.data: