Main Content

Multiple Channel Input and Output Operations

For multiple input multiple output (MIMO) operations, you can use multichannel radios or single channel radios bundled together.

About MIMO Mode

You can use MIMO operations to help achieve better performance in your communications system. For example, space-time block coding can increase the signal-to-noise ratio (SNR) and spatial multiplexing can increase data rates.

To prepare waveforms for MIMO mode, see MIMO Techniques.

Note

Communications Toolbox™ Support Package for USRP™ Radio transmits signals through the TX/RX port and receives signals through the RX2 port.

Perform MIMO Operations with USRP System Objects

These examples shows how to use a comm.SDRuTransmitter or comm.SDRuReceiver System object™ to transmit or receive data on multiple channels.

Transmit over Multiple Channels with SDRu System Object

Create a comm.SDRuTransmitter System object for a platform that supports MIMO mode. This example uses a USRP B210 radio.

txradio = comm.SDRuTransmitter(...
    Platform="B210", ...
    SerialNum="30AD2D5");

Set the ChannelMapping property to [1 2] to indicate that both channels are in use.

txradio.ChannelMapping = [1 2]
txradio = 
  comm.SDRuTransmitter with properties:

                 Platform: 'B210'
                SerialNum: '30AD2D5'
           ChannelMapping: [1 2]
          CenterFrequency: 2.4500e+09
    LocalOscillatorOffset: 0
                     Gain: 8
                PPSSource: 'Internal'
        EnableTimeTrigger: false
              ClockSource: 'Internal'
          MasterClockRate: 32000000
      InterpolationFactor: 512
        TransportDataType: 'int16'
          EnableBurstMode: false

Set the master clock rate (MCR) to 16 MHz. When using two channels, the maximum supported MCR for the USRP B210 radio is 30.72 MHz. For other radios, you can set the MCR to any supported value.

txradio.MasterClockRate = 16e6;

Create a comm.DSPKModulator System object to modulate the transmitted signals.

mod = comm.DPSKModulator(BitInput=true);

Transmit the data. The System object generates two signals, one for each channel.

for i = 1:5
   data1 = randi([0 1],3e4,1);
   data2 = randi([0 1],3e4,1);
   modSignal1 = mod(data1);
   modSignal2 = mod(data2);
   txradio([modSignal1 modSignal2]);
end

Release the System object.

release(txradio);

Receive from Multiple Channels with SDRu System Object

Create an SDRu Receiver System object for a platform that supports MIMO mode. This example uses a USRP B210 radio.

rxradio = comm.SDRuReceiver(...
    Platform='B210', ...
    SerialNum='30AD2D5');

Set the ChannelMapping property to indicate that both channels are in use.

rxradio.ChannelMapping = [1 2]
rxradio = 
  comm.SDRuReceiver with properties:

                 Platform: 'B210'
                SerialNum: '30AD2D5'
           ChannelMapping: [1 2]
          CenterFrequency: 2.4500e+09
    LocalOscillatorOffset: 0
                     Gain: 8
                PPSSource: 'Internal'
        EnableTimeTrigger: false
              ClockSource: 'Internal'
          MasterClockRate: 32000000
         DecimationFactor: 512
        TransportDataType: 'int16'
           OutputDataType: 'Same as transport data type'
          SamplesPerFrame: 362
          EnableBurstMode: false

For B210 radios only, change the master clock rate to any value up to the supported maximum of 30.72 MHz. This hardware limitation for using two-channel operations applies to the B210 radios only. For other radios, you can set the master clock rate to any of the supported values.

rxradio.MasterClockRate = 16e6;

Receive the data. Because the System object uses multiple channels, the number of columns returned in data is 2.

[data,datalen] = rxradio();

Release the System object.

release(rxradio);

Perform MIMO Operations with USRP Simulink Blocks

Transmit over Multiple Channels with SDRu Transmitter Block

The SDRu Transmitter block can accept matrices at the data port. The number of columns is the same as the length of the Channel mapping parameter. If you choose to use the optional input ports for center frequency and local oscillator offset, the ports can accept scalars or row vectors of the same length as the Channel mapping parameter.

To create a waveform suitable for MIMO transmission, you can use Communications Toolbox blocks to create a design similar to this diagram.

MIMO transmission with BPSK modulation scheme and OSTBC encoding

To configure the SDRu Transmitter block, in the block mask:

  1. Set Channel mapping to [1 2] to use both channels.

  2. Set the values for the Center frequency, LO offset, and Gain parameters as two-element row vectors. To apply the same value to both channels, specify a scalar value. For multiple channels, local oscillator (LO) offset must be 0. This requirement is due to a UHD limitation. You can specify LO offset as a scalar (0) or as a vector ([0 0]).

  3. For B210 radios only, change the master clock rate to any value up to the supported maximum of 30.72 MHz. This hardware limitation for using two-channel operations applies only to USRP B210 radios.

  4. Click OK.

Receive from Multiple Channels with SDRu Receiver Block

The SDRu Receiver block can output matrices at the data port. The number of columns is the same as the length of the Channel mapping parameter. If you choose to use the optional input ports for the center frequency, local oscillator offset, and gain, the ports can accept scalars or row vectors of the same length as the Channel mapping parameter.

In Simulink®, design a model that can process multiple received channels , similar to the model in this figure.

MIMO reception using SDRu receiver block

spectrum analyzer

In this example, Channel mapping in the SDRu Receiver block is defined as [1 2] to indicate that multiple channels are being used.

To configure the SDRu Receiver block, in the block mask:

  1. Set Channel mapping to [1 2] to use both channels.

  2. Set the values for Center frequency, LO offset, and Gain parameters as two-element row vectors. Alternatively, to apply the same value to both channels, specify a scalar value. For multiple channels, LO offset must be 0. This requirement is due to a UHD limitation. You can specify LO offset as scalar (0) or as a vector ([0 0]).

  3. For B210 radios only, change the master clock rate to any value up to the supported maximum of 30.72 MHz. This hardware limitation for using two-channel operations applies only to USRP B210 radios.

  4. Click OK.

Perform MIMO Operations Bundling Multiple Radios

Bundle Multiple Radios

To perform MIMO operations involving more channels than a single radio can support, you must bundle multiple radios. Ettus Research™ recommends using a common external clock signal source and pulse-per-second (PPS) signal source to bundle multiple radios to act as one radio with multiple channels.

Note

USRP B-series radios do not support bundling of multiple radios.

This figure shows a four channel MIMO configuration realized by bundling two USRP N200/N210 radios together on the host PC.

Bundle multiple N2xx radios by using 10 MHz reference signal and PPS signal generator

The common external 10 MHz clock signal is required for frequency synchronization of channels across bundled radios. The common external PPS signal is required for timing synchronization of channels across bundled radios.

Receive from Multiple Radios with comm.SDRuReceiver System Object

This example shows how to bundle multiple radios for MIMO operations with a USRP Receiver System object.

Create a comm.SDRuReceiver System object for a platform that supports MIMO mode. This example uses a USRP N210 radio.

rxRadios = comm.SDRuReceiver('Platform','N200/N210/USRP2', ...
  'IPAddress','192.168.20.2,192.168.20.3')
rxRadios = 

  comm.SDRuReceiver with properties:

                 Platform: 'N200/N210/USRP2'
                IPAddress: '192.168.20.2,192.168.20.3'
           ChannelMapping: 1
          CenterFrequency: 2.4500e+09
    LocalOscillatorOffset: 0
                     Gain: 8
                PPSSource: 'Internal'
        EnableTimeTrigger: false
              ClockSource: 'Internal'
      EnableMIMOCableSync: false
          MasterClockRate: 100000000
         DecimationFactor: 512
        TransportDataType: 'int16'
           OutputDataType: 'Same as transport data type'
          SamplesPerFrame: 362
          EnableBurstMode: false

Set the channel mapping to [1 2] to indicate that two channels are in use.

rxRadios.ChannelMapping = [1 2];

Set the center frequency and gain for each channel. Display the configuration information.

rxRadios.CenterFrequency = [1 1.1]*1e9;
rxRadios.Gain = [5 6];
info(rxRadios)
ans = 
  struct with fields:
                    Mboard: {'N210' 'N210'}
                  RXSubdev: {'WBXv2 RX+GDB' 'WBXv2 RX+GDB'}
                  TXSubdev: {'WBXv2 TX+GDB' 'WBXv2 TX+GDB'}
    MinimumCenterFrequency: [48750000 48750000]
    MaximumCenterFrequency: [2.2200e+09 2.2200e+09]
               MinimumGain: [0 0]
               MaximumGain: [0 0]
                  GainStep: [0.0500 0.0500]
           CenterFrequency: [2.2200e+09 2.4420e+09]
     LocalOscillatorOffset: -2.0000e+07
                      Gain: [5 6]
           MasterClockRate: 200000000
          DecimationFactor: 512
        BasebandSampleRate: 390625

Receive the data. Because the System object uses two channels, the matrix returned in data contains two columns.

[data,datalen] = rxRadios();

Release the System object.

release(rxRadios);

Receive from Multiple Radios with SDRu Receiver Block

This example shows how to bundle multiple radios for MIMO operations with an SDRu Receiver block. This example uses two USRP N210 radios.

  1. Open the mask of the SDRu Receiver block.

  2. Set these parameters for reception on multiple radios. Then, click OK.

    • Set Platform to N200/N210/USRP2.

    • Set the IP address to 192.168.20.2,192.168.20.3 or 192.168.20.2 192.168.20.3 to specify the IP addresses of the radios.

    • Set Channel mapping to [1 2]. Channel mapping value 1 of the bundled radio refers to channel 1 of the radio with IP address 192.168.20.2. Channel mapping value 2 of the bundled radio refers to channel 1 of the radio with IP address 192.168.20.3.

    • Set Center frequency (Hz) to [1 1.1]. Alternatively, to apply the same value to all channels, specify a scalar value.

    • Set Gain (dB) to [5 6]. Alternatively, to apply the same receiver gain value to all channels, specify a scalar value.

    SDRu receiver block with multiple channel configurations

    The SDRu Receiver block outputs a matrix at its data port. The number of columns of the output matrix equals the length of the Channel mapping parameter.

MIMO Cable Synchronization

Since R2024b

To synchronize two USRP N200/N210 radios to transmit or receive frequency, phase, and time synchronized data across multiple channels, use a MIMO cable. Connect the MIMO cable to the MIMO expansion ports of the N200/N210 radios.

MIMO cable allows to share the clock reference, timing reference, and Ethernet across two N200/N210 radios. One of the radios is referred to as the primary radio and the other will be the secondary radio. The secondary radio will synchronize its clock and timing references to the MIMO cable.

To enable MIMO cable synchronization in System objects and Simulink blocks, see EnableMIMOCableSync property and Enable MIMO Cable Sync parameter.

For Ethernet connectivity, you can use either the shared Ethernet mode or dual Ethernet mode. In shared Ethernet mode, connect the Ethernet cable to the primary radio and the IP addresses of the primary and secondary radios must be in the same subnet. Whereas, in dual Ethernet mode, you can use two different Ethernet cables to connect the radios to the host computer.

Shared Ethernet and dual Ethernet mode

The MIMO cable shares the clock reference, time reference, and Ethernet in the shared Ethernet mode. In dual Ethernet mode, the MIMO cable shares only the clock reference and time reference.

Configure USRP System Objects for MIMO Cable Synchronization

To configure the comm.SDRuReceiver and comm.SDRuTransmitter System objects:

  1. Set the Platform to 'N200/N210/USRP2'.

  2. In shared Ethernet mode, the IP addresses of the primary and secondary radios must be in the same subnet. Set the IPAddress property to 192.168.20.2 192.168.20.3. If you are using the dual Ethernet mode, set the IPAddress property to 192.168.10.2 192.168.20.3

  3. Set the ChannelMapping property to [1 2].

  4. Set the EnableMIMOCableSync to true.

Configure USRP Simulink Blocks for MIMO Cable Synchronization

To configure the SDRu Receiver and SDRu Transmitter Simulink blocks:

  1. Set the Platform to 'N200/N210/USRP2'.

  2. In shared Ethernet mode, the IP addresses of the primary and secondary radios must be in the same subnet. Set the IP Address to 192.168.20.2 192.168.20.3. If you are using the dual Ethernet mode, set the IP Address to 192.168.10.2 192.168.20.3

  3. Set Channel Mapping property to [1 2].

  4. Enable the Enable MIMO Cable Sync parameter.

To synchronize multiple N200/N210 radios, you can use an Ettus Research OctoClock along with the MIMO cable. You can also build larger MIMO systems up to 16x16 by sharing an external reference. 4x4 MIMO system using N200/N210 radios

See Also

Topics