guide_using_different_rx_and_tx_freqs - vnegnev/marcos_extras GitHub Wiki
Last updated: 29/09/2022
This guide explains how the TX and RX frequencies in MaRCoS work, and how to adjust them together or independently.
It assumes you have set up the MaRCoS hardware and used it for basic experiments, and are familiar with the API described in Tutorial 1 and Tutorial 2.
The MaRCoS firmware has three local oscillators (LOs), LO0, LO1 and LO2, with independent frequency and phase control of each. They are used in both the up-conversion of the I/Q TX data before it is sent to the DAC, and the down-conversion of the RX data before it is filtered and saved.
TX channel 0 always uses LO0, and TX channel 1 always uses LO1. Each RX channel can be independently configured to use any of the three LOs.
When creating an Experiment
object in Python, two arguments control the LO behaviour:
-
lo_freq
: this sets the LO frequencies in megahertz. It can be either a single floating-point value, or a list/tuple of three values. If it is a single value, this is assigned to all three LOs. A list/tuple of three values configures each LO respectively. If only two values are supplied, they control the frequencies of LO0 and LO1, and LO2 gets set to the same frequency as LO0. -
rx_lo
: this selects which LO is used by each RX channel. It can be either a single floating-point value, or a list/tuple of two values. If it is a single value, then the second RX channel uses the same LO as the first. Values of 0, 1 and 2 select LO0, LO1 and LO2 respectively.
If I want my TX channels to be at 5 and 6 MHz, and the RX channels to run at 3.5 and 5 MHz, I would
- Set LO0 to 5 MHz and LO1 to 6 MHz (since these directly control TX channels 0 and 1)
- Set LO2 to 3.5 MHz
- Set RX channels 0 and 1 to use LO2 and LO0 respectively.
The code would be something like
exp = Experiment(
lo_freq=(5.0, 6.0, 3.5),
...
rx_lo=(2, 0),
...
)