Main Content

Multiple Channel Input and Output Operations

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

About MIMO Mode

You can use MIMO operations to help achieve better performance in your communications system. Space-time block coding can increase the signal-to-noise ratio (SNR). Spatial multiplexing can increase data rates.

To prepare waveforms for MIMO mode, see Multiple-Input Multiple-Output (MIMO) and LTE Toolbox™ features.

The MIMO functionality in this support package transmits signals through the TX/RX port and receives signals through the RX2 port.

Perform MIMO Operations with SDRu System Objects

Transmit over Multiple Channels with SDRu System Object

Create a System object for a platform that supports MIMO mode. This example uses an N321 radio.

txradio = comm.SDRuReceiver('Platform','N320/N321')
txradio = 
  comm.SDRuReceiver with properties:
 
                 Platform: 'N320/N321'
                IPAddress: '192.168.10.2'
           ChannelMapping: 1
          CenterFrequency: 2.450000000000000e+09
    LocalOscillatorOffset: 0
                     Gain: 8
                PPSSource: 'Internal'
        EnableTimeTrigger: false
              ClockSource: 'Internal'
          MasterClockRate: 200000000
         DecimationFactor: 512
        TransportDataType: 'int16'
           OutputDataType: 'Same as transport data type'
          SamplesPerFrame: 362
          EnableBurstMode: false

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

txradio.ChannelMapping = [1 2];

Set the master clock rate to any of the supported values.

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 a System object for a platform that supports MIMO mode. This example uses an N321 radio.

rxradio = comm.SDRuReceiver('Platform','N320/N321')
rxradio = 
  comm.SDRuReceiver with properties:
 
                 Platform: 'N320/N321'
                IPAddress: '192.168.10.2'
           ChannelMapping: 1
          CenterFrequency: 2.450000000000000e+09
    LocalOscillatorOffset: 0
                     Gain: 8
                PPSSource: 'Internal'
        EnableTimeTrigger: false
              ClockSource: 'Internal'
          MasterClockRate: 200000000
         DecimationFactor: 512
        TransportDataType: 'int16'
           OutputDataType: 'Same as transport data type'
          SamplesPerFrame: 362
          EnableBurstMode: false

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

txradio.ChannelMapping = [1 2];

Set the master clock rate to any of the supported values.

txradio.MasterClockRate = 16e6;

Receive the data.

[data,datalen] = rxradio();

Release the System object.

release(rxradio);

Perform MIMO Operations with SDRu Blocks

Transmit over Multiple Channels with SDRu 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 X300 and X310 radios, you can set the master clock rate to any of the supported values.

  4. Click OK.

Receive from Multiple Channels with SDRu 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 X300 and X310 radios, you can set the master clock rate to any of the supported values.

  4. Click OK.

Perform MIMO Operations Bundling Multiple Radios

Bundle Multiple Radios

To perform MIMO operations involving more than two channels, you must bundle multiple X-series radios or multiple N-series 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. This figure shows a four channel MIMO configuration realized by bundling two X300 radios together on the host PC.

Bundle multiple 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 SDRu System Object

This example shows how to bundle multiple radios for MIMO operations with an SDRu Receiver System object™.

Create an SDRu Receiver System object for a platform that supports MIMO mode. This example uses X310 radios.

rxRadios = comm.SDRuReceiver('Platform','X310','IPAddress','192.168.20.2,192.168.20.3')
rxRadios = 
 
  comm.SDRuReceiver with properties:
 
                       Platform: 'X310'
                      IPAddress: '192.168.20.2,192.168.20.3'
                 ChannelMapping: 1
                CenterFrequency: 2.4500e+09
          LocalOscillatorOffset: 0
                           Gain: 8
                      PPSSource: 'Internal'
                    ClockSource: 'Internal'
                MasterClockRate: 200000000
               DecimationFactor: 512
              TransportDataType: 'int16'
                 OutputDataType: 'Same as transport data type'
                SamplesPerFrame: 362
                EnableBurstMode: false

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

rxRadios.ChannelMapping = [1 2 3 4];

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

rxRadios.CenterFrequency = [1 1.1 1.2 1.3]*1e9;
rxRadios.Gain = [5 6 7 8];
info(rxRadios)
ans = 
  struct with fields:
                    Mboard: {'X310' 'X310'}
                  RXSubdev: {'SBXv3 RX' 'SBXv3 RX' 'SBXv3 RX' 'SBXv3 RX'}
                  TXSubdev: {'SBXv3 TX' 'SBXv3 TX' 'SBXv3 TX' 'SBXv3 TX'}
    MinimumCenterFrequency: [380000000 380000000 380000000 380000000]
    MaximumCenterFrequency: [4.4200e+09 4.4200e+09 4.4200e+09 4.4200e+09]
               MinimumGain: [0 0 0 0]
               MaximumGain: [37.5000 37.5000 37.5000 37.5000]
                  GainStep: [0.5000 0.5000 0.5000 0.5000]
           CenterFrequency: [1.0000e+09 1.1000e+09 1.2000e+09 1.3000e+09]
     LocalOscillatorOffset: 0
                      Gain: [5 6 7 8]
           MasterClockRate: 200000000
          DecimationFactor: 512
        BasebandSampleRate: 390625

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

[data,datalen] = rxRadios();

Release the System object.

release(rxRadios);

Receive from Multiple Radios with SDRu Block

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

Note

This example uses both X310 and N210 radios. For using N210 radios, you require Communications Toolbox Support Package for USRP™ Radio

  1. Open the mask of an SDRu Receiver block.

    SDRu receiver block

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

    • Set Platform to X310.

    • 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 X310 radios.

    • Set Channel mapping to [1 2][1 2 3 4]. Channel mapping values 1 and 2 of the bundled radio refer to channels 1 and 2 of the radio with IP address 192.168.20.2. Channel mapping values 3 and 4 of the bundled radio refer to channels 1 and 2 of the radio with IP address 192.168.20.3.

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

    • Set Gain (dB) to [5 6 7 8]. 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.

Related Topics