Main Content

comm.SDRRxFMCOMMS5

Receive data from FMCOMMS5 Zynq radio hardware

Add-On Required: This feature requires the SoC Blockset Support Package for AMD FPGA and SoC Devices add-on.

Description

The comm.SDRRxFMCOMMS5 System object™ receives data from an FMCOMMS5 Zynq® radio hardware. To use this object, in the hardware setup, select the Xilinx® ZC706 radio hardware with Analog Devices® FMCOMMS5 RF card.

You can use the comm.SDRRxFMCOMMS5 System object to simulate and develop various software-defined radio (SDR) applications. This diagram shows the conceptual overview of transmitting and receiving radio signals in MATLAB® using the SoC Blockset™ Support Package for AMD FPGA and SoC Devices. MATLAB interacts with the comm.SDRRxFMCOMMS5 System object to receive data from the radio hardware.

For transmitting a radio signal over the air, pass the signal generated in MATLAB to a transmitter System object. The transmitter System object forwards the signal to the radio hardware. For receiving a radio signal over the air, use a receiver System object. The receiver System object forwards the signal received from the radio hardware for post processing in MATLAB.

To receive data from the FMCOMMS5 Zynq radio hardware:

  1. Create the comm.SDRRxFMCOMMS5 object and set its properties.

  2. Call the object as if it were a function.

To learn more about how System objects work, see What Are System Objects?.

Creation

To create a comm.SDRRxFMCOMMS5 System object, use the sdrrx function with input argument 'FMCOMMS5'. For example:

rx = sdrrx('FMCOMMS5')

To create the object with properties set to specific values, call the function using one or more name-value arguments. For example:

rx = sdrrx('FMCOMMS5', ...
           'IPAddress','192.168.3.2', ...
           'CenterFrequency',2.2e9, ...
           'BasebandSampleRate',800e3)

Properties

expand all

The comm.SDRRxFMCOMMS5 receiver System object supports up to four channels to receive data from the FMCOMMS5 Zynq radio hardware. Use the ChannelMapping property to indicate whether to use a single channel or multiple channels. For each channel, you can set the Gain property independently, or you can apply the same setting to all channels. All other property values are applied to each channel in use.

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Main Properties

IP address of the radio hardware, specified as a dotted-quad character vector.

This value must match the physical IP address of the radio hardware assigned during hardware setup. For more information, see Set Up Xilinx Devices. If you configure the radio hardware with an IP address other than the default, update IPAddress accordingly.

Data Types: char | string

RF center frequency in Hz, specified as a nonnegative finite scalar. The valid range for center frequency is 70 MHz to 6 GHz.

Tunable: Yes

Data Types: double

Channel output mapping, specified as one of these values:

  • Integer from 1 to 4 — The integer value indicates which single channel is in use.

  • [N M], where N and M are distinct integers from 1 to 4 — Channels N and M are in use.

  • [1 2 3 4] — All four channels are in use.

The RF chip of the radio hardware determines the number of channels you can use for receiving data. For the FMCOMMS5, two AD9361 RF chips are used to provide support for four channels. The channels specified by 1 and 2 are situated on the first AD9361 chip. The channels specified by 3 and 4 are situated on the second AD9361 chip. Using multiple channels across the two chips has certain limitations. For more information, see Multiple Channel Synchronization for FMCOMMS5.

Supported Radio HardwareRF ChipNumber of ChannelsSupported RF Ports

ZC706 and FMCOMMS5

2 x AD93614
  • For AD9361 Chip A: TX1A_A, RX1A_A, TX2A_A, RX2A_A

  • For AD9361 Chip B: TX1A_B, RX1A_B, TX2A_B, RX2A_B

Source of gain, specified as one of these values:

  • 'AGC Slow Attack' — For signals with slowly changing power levels.

  • 'AGC Fast Attack' — For signals with rapidly changing power levels.

  • 'Manual' — Specify the gain by using the Gain property.

Data Types: char | string

Gain in dB, specified as a scalar or a 1-by-2 or 1-by-4 numeric vector. The valid gain range is from –10 dB to 73 dB and depends on the center frequency. An incompatible gain and center frequency combination returns an error from the radio hardware. For the acceptable minimum and maximum gain values per center frequency, check the manufacturer's specification.

Set the gain based on the ChannelMapping property.

  • For a single channel, specify the gain as a scalar.

  • For two or four channels that use the same gain value, specify the gain as a scalar. The object applies the gain by scalar expansion.

  • For two or four channels that use different gain values, specify the gain as a 1-by-2 or 1-by-4 vector, respectively. The ith element of the vector is applied to the ith channel specified by the ChannelMapping property.

Dependencies

To enable this property, set GainSource to 'Manual'.

Data Types: double

Baseband sampling rate in Hz, specified as a positive scalar. The valid range of this property is 520.834 kHz to 61.44 MHz.

Note

To synchronize the comm.SDRRxFMCOMMS5 System object with the radio hardware, call the info function on the object. If the specified and actual rates have a small mismatch, verify that the computed rate is close to the value you actually want.

Data Types: double

Complex data type of the output signal, specified as one of these values:

  • 'int16' — Integer values are the raw 16-bit I and Q samples from the board. The 12-bit value from the ADC of the AD9361 RF chip is sign-extended to 16 bits.

  • 'single' — Single-precision floating point values are scaled to the range of [–1, 1]. The object derives this value from the sign-extended 16 bits received from the board.

  • 'double' — Double-precision floating point values are scaled to the range of [–1, 1]. The object derives this value from the sign-extended 16 bits received from the board.

Number of samples per frame, specified as a positive integer. In single-channel mode, the number of samples per frame must be even. When streaming to the host, using large frame sizes can give more efficient performance. To determine real-time execution of the object, use the overflow output argument.

Data Types: double

Option for burst mode, specified as false or true. When set to true, this property produces a set of contiguous samples without overflow. This setting can help simulate models that cannot run in real time. When you enable burst mode, specify the amount of contiguous data using the NumFramesInBurst property. For more information on how to use this property, see Burst Mode.

Data Types: logical

Number of frames in a contiguous burst, specified as a positive integer.

Dependencies

To enable this property, set EnableBurstMode to true.

Data Types: double

Filter

Use custom filter, specified as one of these values:

  • false — The filter chain uses the default filter design.

  • true — The filter chain uses a custom filter design. For example, if the gain or bandwidth characteristics of the default filter does not satisfy the requirements for your application, you can design a custom filter that meets your specific requirements. To design a custom filter, call the designCustomFilter function.

Note

When applying a custom filter to a comm.SDRRxFMCOMMS5 System object, the UseCustomFilter property is automatically set to true. To switch between the default and your custom filter, set the UseCustomFilter property to false or true, respectively.

For more information, see Baseband Sampling Rate and Filter Chains.

Data Types: logical

Advanced Properties

Enable advanced properties, specified as false or true.

When you set this property to true, these advanced properties are enabled:

Data Types: logical

Option for bypassing user logic, specified as false or true. When the property is true, the radio hardware data path bypasses the algorithm generated and programmed during FPGA targeting or hardware-software co-design. For more information, see FPGA Targeting Workflow and Hardware-Software Co-Design Workflow.

Dependencies

To enable this property, set ShowAdvancedProperties to true.

Data Types: logical

Quadrature correction, specified as true or false. When this property is true, the object applies in-phase and quadrature (IQ) imbalance compensation.

Dependencies

To enable this property, set ShowAdvancedProperties to true.

Data Types: logical

RF direct current (DC) correction, specified as true or false. When this property is true, the object applies an RF DC blocking filter.

Dependencies

To enable this property, set ShowAdvancedProperties to true.

Data Types: logical

Baseband DC correction, specified as true or false. When this property is true, the object applies a baseband DC blocking filter.

Dependencies

To enable this property, set ShowAdvancedProperties to true.

Data Types: logical

Timeout for I/O operations in seconds, specified as one of these options:

  • Inf — The object waits indefinitely to complete I/O operations.

  • Nonnegative scalar, N — The object waits N seconds to complete I/O operations. Zero seconds corresponds to a non-blocking setup.

Dependencies

To enable this property, set ShowAdvancedProperties to true.

Data Types: double

Built-in self-test loopback mode, specified as one of these options:

  • 'Disabled' — Disable BIST loopback.

  • 'Digital Tx -> Digital Rx' — Enable digital signals to loop back within the device. The signals bypass the RF stage.

  • 'RF Rx -> RF Tx' — Enable incoming receiver RF signals to loop back to the RF transmitter port. The signals bypass the FPGA.

Dependencies

To enable this property, set ShowAdvancedProperties to true.

Data Types: char | string

BIST signal injection mode, specified as one of these options:

  • 'Disabled' — Disable BIST signal injection.

  • 'Tone Inject Tx' — Enable BIST signal injection to the transmit path.

  • 'Tone Inject Rx' — Enable BIST signal injection to the receive path.

When you enable BIST signal injection, you can set the source of BIST signal generation with the BISTSignalGen property.

Dependencies

To enable this property, set ShowAdvancedProperties to true.

Data Types: char | string

Source of BIST signal generation, specified as one of these options:

  • 'PRBS' — Use the pseudo random binary sequence (PRBS) generator of the board.

  • 'Tone' — Use the tone generator of the board. To set the tone frequency and tone level, use the BISTToneFreq and BISTToneLevel properties, respectively.

Dependencies

To enable this property, set BISTToneInject to 'Tone Inject Tx' or 'Tone Inject Rx'.

Data Types: char | string

BIST tone frequency, specified as 'Fs/32', 'Fs/16', 'Fs*3/32', or 'Fs/8'.

Dependencies

To enable this property, set BISTSignalGen to 'Tone'.

Data Types: char | string

BIST tone level, specified as '0', '-6', '-12', or '-18'.

Dependencies

To enable this property, set BISTSignalGen to 'Tone'.

Data Types: char | string

Usage

Description

[data,validData,overflow] = rx() returns data received from the radio hardware associated with the comm.SDRRxFMCOMMS5 receiver System object rx. The output validData indicates whether the object has received data from the radio hardware. The output overflow indicates data discontinuity. If overflow is true, then data does not represent contiguous data. The first valid data frame can contain transient values, resulting in packets containing undefined data.

example

Output Arguments

expand all

Output signal received from the radio hardware, returned as a complex matrix. The number of columns in the matrix depends on the number of channels in use, as specified by the ChannelMapping property. Each column corresponds to a channel of complex data received on one channel.

The output signal supports complex values with these data types:

  • 16-bit signed integers — Complex values are the raw 16-bit I and Q samples from the board. The 12-bit value from the ADC of the AD9361 RF chip is sign-extended to 16 bits.

  • Single-precision floating point — Complex values are scaled to the range of [–1, 1]. The object derives this value from the sign-extended 16 bits received from the board.

  • Double-precision floating point — Complex values are scaled to the range of [–1, 1]. The object derives this value from the sign-extended 16 bits received from the board.

To specify the base type, use the OutputDataType property.

Data Types: int16 | single | double
Complex Number Support: Yes

Valid data indicator, returned as a logical scalar.

  • true indicates that rx has received data from the radio hardware.

  • false indicates that rx has not received data from the radio hardware.

When the DataTimeout property is set to Inf, the output validData is always true. In this case, the object waits indefinitely until data reception. To qualify data validity, set DataTimeout to a value other than Inf.

Data discontinuity flag, returned as a logical scalar.

  • true indicates the presence of overflow resulting in noncontiguous data.

  • false indicates no overflow.

You can use this value as a diagnostic tool to determine real-time execution of the object.

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:

release(obj)

expand all

captureCapture contiguous RF data using Xilinx Zynq-based radio hardware
designCustomFilterDesign custom filter for Analog Devices AD9361/AD9364 RF chip
infoSynchronize receiver or transmitter radio settings with radio hardware
stepRun System object algorithm
isLockedDetermine if System object is in use
releaseRelease resources and allow changes to System object property values and input characteristics

Examples

collapse all

Create a receiver System object for the FMCOMMS5 radio hardware with the specified properties. Use two channels.

rx = sdrrx('FMCOMMS5', ...    
    'IPAddress','192.168.3.2', ...
    'CenterFrequency',2.2e9, ...
    'BasebandSampleRate',800e3, ...    
    'ChannelMapping',[1 2])
rx = 
  comm.SDRRxFMCOMMS5 with properties:

   Main
                DeviceName: 'FMCOMMS5'
                 IPAddress: '192.168.3.2'
           CenterFrequency: 2.2000e+09
                GainSource: 'AGC Slow Attack'
            ChannelMapping: [1 2]
        BasebandSampleRate: 800000
            OutputDataType: 'int16'
           SamplesPerFrame: 20000
           EnableBurstMode: false
    ShowAdvancedProperties: false

  Show all properties

Create a log for recording data.

Log = dsp.SignalSink;

Receive and validate data by using the receiver System object. Save valid data using the log.

for counter = 1:20
    [data,validData,overflow] = rx();
    if validData == 1 
        if overflow ~=1 % contiguous data
             Log(data);
        end
    else
        disp('Not valid data.');
    end
end 
## Establishing connection to hardware. This process can take several seconds.

Version History

Introduced in R2019a