allow downselecting measurements
This commit is contained in:
@ -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
|
||||||
|
@ -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:
|
||||||
|
Reference in New Issue
Block a user