Multiple Channel Input and Output Operations

For MIMO operation you can use multi-channel radios or single channel radios bundled together.

About Multiple Input Multiple Output Mode

You can use multiple input multiple output (MIMO) operations to 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) (Communications Toolbox) and the LTE Toolbox™.

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

Perform MIMO Operations with SDR System Objects

Transmission over Multiple Channels with SDRu System Object

  1. Create a System object™ for a platform that supports MIMO mode. This example uses the B210 radio.

        txradio = comm.SDRuTransmitter('Platform','B210','SerialNum','ECR04ZDBT')
    txradio = 
    
      comm.SDRuTransmitter with properties:
    
                     Platform: 'B210'
                    SerialNum: 'ECR04ZDBT'
               ChannelMapping: 1
              CenterFrequency: 2.4500e+09
        LocalOscillatorOffset: 0
                         Gain: 8
                    PPSSource: 'Internal'
                  ClockSource: 'Internal'
              MasterClockRate: 32000000
          InterpolationFactor: 512
            TransportDataType: 'int16'
              EnableBurstMode: false
  2. Set ChannelMapping to [1 2] to use both channels.

    txradio.ChannelMapping = [1 2];
  3. For B210 radios only, change the master clock rate to any value up to the supported maximum of 30.72 MHz.

    txradio.MasterClockRate = 16e6;

    This hardware limitation for using two-channel operations applies to the B210 radios only. For X300 and X310 radios, you can continue to set the master clock rate to any of the supported values.

  4. To modulate the transmitted signals, create a comm.DSPKModulator System object.

    mod = comm.DPSKModulator('BitInput',true);
  5. Transmit the data. The System object generates two signals, one for each channel.

    for i = 1:5
       data1 = randi([0 1], 30, 1);
       data2 = randi([0 1], 30, 1);
       modSignal1 = mod(data1);
       modSignal2 = mod(data2);
       txradio([modSignal1 modSignal2]);
    end
    
  6. Release the System object.

    release(txradio);

Reception on Multiple Channels with SDRu System Object

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

    rxradio = comm.SDRuReceiver('Platform','X310')
    rxradio = 
    
      comm.SDRuReceiver with properties:
    
                     Platform: 'X310'
                    IPAddress: '192.168.10.2'
               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
  2. Set ChannelMapping to use two channels.

    ChannelMapping(rxradio) = [1 2];
  3. Change the master clock rate.

    rxradio.MasterClockRate = 16e6;
  4. Receive the data by calling the object as a function. Because the System object uses multiple channels, the number of columns returned in data is also 2.

    [data, datalen] = rxradio();
  5. Release the System object.

    release(rxradio);

Perform MIMO Operations Bundling Multiple Radios

Bundling Multiple Radios

To perform MIMO operations involving more than two channels requires bundling of 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 more channels. This figure shows a four channel MIMO configuration realized by bundling two X300 radios together on the host PC.

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.

Reception on Multiple Radios with SDRu System Object

  1. 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
    
  2. Set ChannelMapping to use four channels.

    rxRadios.ChannelMapping = [1 2 3 4];
    
  3. Set the center frequency and gain for each channel. Display 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
    
  4. Receive the data by calling the object. Because the System object uses four channels, the matrix returned in data contains four columns.

    [data, datalen] = rxRadios();
  5. Release the System object.

    release(rxRadios);

Perform MIMO Operations with SDR Blocks

Transmission 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.

To configure the SDRu Transmitter block:

  1. To use both channels, set Channel mapping to [1 2].

  2. Set the values for Center frequency, LO offset, and Gain as 1x2 vectors. To apply the same value to both channels, specify a scalar value. For multiple channels, the LO offset must be zero only. This requirement is due to a UHD limitation. You can specify the 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 to the B210 radios only. For X300 and X310 radios, you can continue to set the master clock rate to any of the supported values.

  4. Click OK.

Reception on 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.

In this simple 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:

  1. Open the SDRu Receiver block mask. Set Channel mapping to [1 2] use both channels.

  2. Set the values for Center frequency, LO offset, and Gain as 1x2 vectors. Alternatively, to apply the same value to both channels, specify a scalar value. For multiple channels, the LO offset must be zero only. This requirement is due to a UHD limitation. You can specify the 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 to the B210 radios only. For X300 and X310 radios, you can continue to set the master clock rate to any of the supported values.

  4. Click OK.

Related Topics