guide_using_different_rx_and_tx_freqs - vnegnev/marcos_extras GitHub Wiki

Guide: using independent RX and TX frequencies

Last updated: 29/09/2022

Overview

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.

Local oscillators in MaRCoS

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.

Configuring the local oscillators in your sequence

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.

Basic example

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),
    ...
    )
⚠️ **GitHub.com Fallback** ⚠️