allow downselecting measurements

This commit is contained in:
2025-07-07 22:49:49 -06:00
parent 339dbe255e
commit 3c02a4b388
2 changed files with 30 additions and 20 deletions

View File

@ -2,7 +2,7 @@
import copy import copy
from enum import IntEnum, unique from enum import IntEnum, unique
from pathlib import Path from pathlib import Path
from typing import Any, Callable, Dict, Literal, Tuple from typing import Any, Callable, Dict, List, Literal, Tuple
import adi import adi
import iio import iio
@ -305,7 +305,16 @@ class Charon:
return np.mean(data[1] / data[0]) return np.mean(data[1] / data[0])
def capture(self, callback: Callable[int, int] | None = None): def capture(
self,
callback: Callable[int, int] | None = None,
*,
measurements: List[Tuple[int, int]] = None,
):
if measurements is None:
measurements = [(m, n) for n in self.ports for m in self.ports]
measurements = list(measurements)
s = xr.DataArray( s = xr.DataArray(
np.zeros( np.zeros(
[len(self.frequency), len(self.ports), len(self.ports)], [len(self.frequency), len(self.ports), len(self.ports)],
@ -319,30 +328,31 @@ class Charon:
), ),
) )
total_count = len(s.m) * len(s.n) * len(s.frequency) total_count = len(measurements) * len(s.frequency)
count = 0 count = 0
for m in s.m.data: for m in s.m.data:
for n in s.n.data: for n in s.n.data:
self.set_switches(b=m - 1, a=n - 1) if (m, n) in measurements:
self.set_switches(b=m - 1, a=n - 1)
for ff, freq in enumerate(s.frequency.data): for ff, freq in enumerate(s.frequency.data):
if callback is not None: if callback is not None:
# report progress during sweep # report progress during sweep
callback(count, total_count) callback(count, total_count)
self.set_output(frequency=freq, power=-5) self.set_output(frequency=freq, power=-5)
self.sdr.rx_destroy_buffer() self.sdr.rx_destroy_buffer()
self.sdr.rx_lo = int(freq) self.sdr.rx_lo = int(freq)
self.sdr.rx_enabled_channels = [0, 1] self.sdr.rx_enabled_channels = [0, 1]
self.sdr.gain_control_mode_chan0 = "manual" self.sdr.gain_control_mode_chan0 = "manual"
self.sdr.gain_control_mode_chan1 = "manual" self.sdr.gain_control_mode_chan1 = "manual"
self.sdr.rx_hardwaregain_chan0 = 40 self.sdr.rx_hardwaregain_chan0 = 40
self.sdr.rx_hardwaregain_chan1 = 40 self.sdr.rx_hardwaregain_chan1 = 40
rx = self.sdr.rx() rx = self.sdr.rx()
s.loc[dict(frequency=freq, m=m, n=n)] = np.mean(rx[1] / rx[0]) s.loc[dict(frequency=freq, m=m, n=n)] = np.mean(rx[1] / rx[0])
count += 1 count += 1
if callback is not None: if callback is not None:
# mark capture as complete # mark capture as complete

View File

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