Compare commits
2 Commits
e0c42766bf
...
26682f1741
Author | SHA1 | Date | |
---|---|---|---|
26682f1741 | |||
f1f6c0d45b |
40
README.md
40
README.md
|
@ -9,6 +9,26 @@ On Ubuntu 22.04 just run `sudo apt-get install -y libiio-dev`
|
||||||
|
|
||||||
2. `pip install charon-vna`
|
2. `pip install charon-vna`
|
||||||
|
|
||||||
|
## Hardware Setup
|
||||||
|
|
||||||
|
You need a few things:
|
||||||
|
- [Analog Devices Pluto SDR](https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/adalm-pluto.html).
|
||||||
|
Any variant of the Pluto *should* work too such as the [Pluto+](https://github.com/plutoplus/plutoplus?tab=readme-ov-file) however I have only tested with the basic flavor.
|
||||||
|
- Directional couplers (1 per port up to 4 ports).
|
||||||
|
I have been using [AAMCS-UDC-0.5G-18G-10dB-Sf](http://www.aa-mcs.com/wp-content/uploads/documents/AAMCS-UDC-0.5G-18G-10dB-Sf.pdf)
|
||||||
|
- Charon switch board - coming soon.
|
||||||
|
Without this, you'll be limited to S11 and uncalibrated S21 measurements (with required re-cabling).
|
||||||
|
There's nothing special about this particular board, if you want more than 4 ports you can make your own pretty easily. You just need 3 SPxT switches. Note that these switches will see tons of cycles so avoid mechanical switches.
|
||||||
|
- SMA cables
|
||||||
|
|
||||||
|
### Pluto Configuration
|
||||||
|
|
||||||
|
Most of my testing is with Pluto firmware [v0.39](https://github.com/analogdevicesinc/plutosdr-fw/releases/tag/v0.39) though this may work with other firmware versions. Instructions for upgrading firmware are on the [Analog Devices wiki](https://wiki.analog.com/university/tools/pluto/users/firmware).
|
||||||
|
|
||||||
|
We need two receive channels on the SDR. If you have a Pluto+ that should already be configured and you can skip this step.
|
||||||
|
|
||||||
|
Analog devices has a [guide](https://wiki.analog.com/university/tools/pluto/users/customizing#updating_to_the_ad9364) for enabling the second channel. Ideally this should be set as `ad9361` to enable a wider band of operation in addition to the second channel, however the critical setting is enabling 2r2t.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
There will be some sort of GUI because that sounds useful.
|
There will be some sort of GUI because that sounds useful.
|
||||||
|
@ -26,23 +46,3 @@ Absolute output power is generally not well calibrated for VNAs anyway and has n
|
||||||
If you have an RF power meter you can generate your own power calibration.
|
If you have an RF power meter you can generate your own power calibration.
|
||||||
|
|
||||||
Note that unlike the main calibration, power calibration frequencies do not need to match the measurement frequencies. Values are interpolated.
|
Note that unlike the main calibration, power calibration frequencies do not need to match the measurement frequencies. Values are interpolated.
|
||||||
|
|
||||||
## Hardware
|
|
||||||
|
|
||||||
You need a few things:
|
|
||||||
- [Analog Devices Pluto SDR](https://www.analog.com/en/resources/evaluation-hardware-and-software/evaluation-boards-kits/adalm-pluto.html).
|
|
||||||
Any variant of the Pluto *should* work too such as the [Pluto+](https://github.com/plutoplus/plutoplus?tab=readme-ov-file) however I have only tested with the basic flavor.
|
|
||||||
- Directional couplers (1 per port up to 4 ports).
|
|
||||||
I have been using [AAMCS-UDC-0.5G-18G-10dB-Sf](http://www.aa-mcs.com/wp-content/uploads/documents/AAMCS-UDC-0.5G-18G-10dB-Sf.pdf)
|
|
||||||
- Charon switch board - coming soon.
|
|
||||||
Without this, you'll be limited to S11 and uncalibrated S21 measurements (with required re-cabling).
|
|
||||||
There's nothing special about this particular board, if you want more than 4 ports you can make your own pretty easily. You just need 3 SPxT switches. Note that these switches will see tons of cycles so avoid mechanical switches.
|
|
||||||
- SMA cables
|
|
||||||
|
|
||||||
### Pluto Configuration
|
|
||||||
|
|
||||||
Most of my testing is with Pluto firmware [v0.39](https://github.com/analogdevicesinc/plutosdr-fw/releases/tag/v0.39) though this may work with other firmware versions. Instructions for upgrading firmware are on the [Analog Devices wiki](https://wiki.analog.com/university/tools/pluto/users/firmware).
|
|
||||||
|
|
||||||
We need two receive channels on the SDR. If you have a Pluto+ that should already be configured and you can skip this step.
|
|
||||||
|
|
||||||
Analog devices has a [guide](https://wiki.analog.com/university/tools/pluto/users/customizing#updating_to_the_ad9364) for enabling the second channel. Ideally this should be set as `ad9361` to enable a wider band of operation in addition to the second channel, however the critical setting is enabling 2r2t.
|
|
|
@ -201,13 +201,6 @@ class MainWindow(QMainWindow):
|
||||||
menu_calibration = QMenu("&Calibration")
|
menu_calibration = QMenu("&Calibration")
|
||||||
menubar.addMenu(menu_calibration)
|
menubar.addMenu(menu_calibration)
|
||||||
|
|
||||||
menu_simulation = QMenu("Si&mulation")
|
|
||||||
menubar.addMenu(menu_simulation)
|
|
||||||
action_generate_data = QAction("&Generate data", self)
|
|
||||||
menu_file.addAction(action_generate_data)
|
|
||||||
action_generate_data.triggered.connect(self.generate_sim_data)
|
|
||||||
action_generate_data.setShortcut(QKeySequence("Ctrl+G"))
|
|
||||||
|
|
||||||
# Content
|
# Content
|
||||||
window_layout = QVBoxLayout()
|
window_layout = QVBoxLayout()
|
||||||
|
|
||||||
|
@ -301,18 +294,6 @@ class MainWindow(QMainWindow):
|
||||||
for plot in self.plots:
|
for plot in self.plots:
|
||||||
plot.update_plot(data)
|
plot.update_plot(data)
|
||||||
|
|
||||||
def generate_sim_data(self) -> None:
|
|
||||||
coords = {"frequency": self._frequency, "m": [1], "n": [1]}
|
|
||||||
shape = tuple(len(v) for v in coords.values())
|
|
||||||
data = xr.DataArray(
|
|
||||||
((-1 + 2 * np.random.rand(*shape)) + 1j * (-1 + 2 * np.random.rand(*shape))) / np.sqrt(2),
|
|
||||||
dims=list(coords.keys()),
|
|
||||||
coords=coords,
|
|
||||||
)
|
|
||||||
|
|
||||||
for plot in self.plots:
|
|
||||||
plot.update_plot(data)
|
|
||||||
|
|
||||||
def set_frequency(self, *, frequency: npt.ArrayLike | None = None):
|
def set_frequency(self, *, frequency: npt.ArrayLike | None = None):
|
||||||
print(frequency)
|
print(frequency)
|
||||||
if frequency is None:
|
if frequency is None:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user