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
from enum import IntEnum, unique
from pathlib import Path
from typing import Any, Callable, Dict, Literal, Tuple
from typing import Any, Callable, Dict, List, Literal, Tuple
import adi
import iio
@ -305,7 +305,16 @@ class Charon:
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(
np.zeros(
[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
for m in s.m.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):
if callback is not None:
# report progress during sweep
callback(count, total_count)
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])
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
count += 1
if callback is not None:
# mark capture as complete

View File

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