Skip to content

Multichannel notes

José Miguel Algarín edited this page Jan 28, 2025 · 4 revisions

Multichannel Capabilities in MaRCoS Devices with MIMO Firmware

The development of MIMO firmware for MaRCoS devices has enabled the configuration of multiple SDRLabs in parallel, extending multichannel capabilities to more than two channels. MaRGE has been updated to support these multichannel features, but only for sequences implemented using the PyPulseq framework and Rx. This document provides notes on configuring and using these capabilities.


Steps to Enable Multichannel Capabilities (as of January 27, 2025)

To configure MaRGE for multichannel operation, follow these steps:

  1. Select the Required Branches:

    • MaRGE Repository: Select the multichannel branch.
    • marcos_client Repository: Select the mimo branch.
    • marcos_server Repository: Select the mimo branch.
    • marcos_extras Repository: Select the mimo_all_sata branch.
    • Follow instructions in MaRCoS wiki for mimo
  2. Configure Hardware Settings:
    In the configs/hw_config.py file, configure the IP and ports of the SDRLabs. The relevant parameters are:

    • rp_ip_list: A list of the IP addresses of the Red Pitaya devices.
    • rp_port: A list of ports corresponding to the devices, with the same size as rp_ip_list.

    Example hardware configuration:

    # Red Pitaya connection configuration
    rp_ip_list = ["192.168.1.101",
                  "192.168.1.102",
                  "192.168.1.103"]
    rp_port = [11111,  # list of ports with same size as the rp_ip_list
               11111,
               11111]
    rp_version = "rp-122"
    rp_max_input_voltage = 225  # mV
    grad_board = "gpa-fhdo"  # gpa-fhdo or ocra1
    fpga_clk_freq_MHz = 122.88  # RP-122

Coding a Multichannel Sequence

When coding sequences for multichannel operation, follow the updated method provided in sequence_template.py. The process remains nearly identical to the standard approach, with one exception: Step 4, which calculates the true acquisition bandwidth.

  • Step 4 can be copied directly from the template, so no significant modifications are required for the sequenceRun method.
  • The final step in sequenceRun, runBatches, will produce a list of arrays—each array corresponds to data from a different Rx channel.
  • Output data will be stored in:
    • mapVals['data_over']: Oversampled data.
    • mapVals['data_decimated']: Decimated data.

Using the GUI for Multichannel Sequences

The GUI now includes a new input parameter called "Channels" located in the "Others" tab. This parameter lets you specify the Rx channels to use, and its value determines the length of the output lists: mapVals['data_over'] and mapVals['data_decimated']

By default, the first time you run a new sequence, all available channels will be used. You can modify the "Channels" parameter as needed for subsequent runs.

If the Channels parameter is set to [1, 4, 5, 6], the data_over and data_decimated outputs will each be a list containing four NumPy arrays. Each array will represent the acquired data measured from channels 1, 4, 5, and 6, respectively.