Main Content

comm.SDRTxAD936x

Send data to AD936x-based 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.SDRTxAD936x System object™ sends data to an AD936x-based Zynq® radio hardware. To use this object, in the hardware setup, select one of these supported boards and add-on cards.

  • Analog Devices® RF SOM

  • Xilinx® Zynq ZC706 Evaluation Kit with Analog Devices FMCOMMS2/3/4 RF card

  • ZedBoard™ with Analog Devices FMCOMMS2/3/4 RF card

  • Zynq UltraScale+™ MPSoC ZCU102 Evaluation Kit with Analog Devices FMCOMMS2/3/4 RF card

You can use the comm.SDRTxAD936x 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 comm.SDRTxAD936x transmitter System object to send data to 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 send data to the AD936x-based Zynq radio hardware:

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

  2. Call the object with arguments, as if it were a function.

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

Creation

To create a comm.SDRTxAD936x System object, use the sdrtx function with input argument 'AD936x'. For example:

tx = sdrtx('AD936x')

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

tx = sdrtx('AD936x', ...
           'IPAddress','192.168.3.2', ...
           'CenterFrequency',2.2e9, ...
           'BasebandSampleRate',800e3)

Properties

expand all

The comm.SDRTxAD936x transmitter System object supports up to two channels to send data to the AD936x-based Zynq radio hardware. Use the ChannelMapping property to indicate whether to use a single channel or both channels. For each channel, you can set the Gain property independently, or you can apply the same setting to both channels. If you select direct digital synthesis (DDS) transmission for the DataSourceSelect property, you can also set all DDS-based properties independently. 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 input mapping, specified as one of these values:

  • 1 — Only channel 1 is in use.

  • 2 — Only channel 2 is in use.

  • [1 2] — Both channels are in use.

The RF chip of the radio hardware determines the number of channels you can use for receiving data.

Supported Radio HardwareRF ChipNumber of ChannelsSupported RF Ports

ADI RF SOM

ZC706 and FMCOMMS2 or FMCOMMS3

ZedBoard and FMCOMMS2 or FMCOMMS3

ZCU102 and FMCOMMS2 or FMCOMMS3

AD93612

TX1A, RX1A, TX2A, RX2A

ZC706 and FMCOMMS4

ZedBoard and FMCOMMS4

ZCU102 and FMCOMMS4

AD93641

TXA, RXA

Gain in dB, specified as a numeric scalar or a 1-by-2 numeric vector. The valid range for gain is from –89.75 dB to 0 dB. The resolution is 0.25 dB.

Set the gain based on the ChannelMapping property.

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

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

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

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

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

Source of data, specified as 'Input Port' or 'DDS'.

When you select direct digital synthesis ('DDS') as the source of data, the object enables two additive tones for each channel. To set the tone frequency and tone scale of these tones, use the DDSTone1Freq, DDSTone2Freq, DDSTone1Scale, and DDSTone2Scale properties. The DDS signals are generated on the FPGA.

Dependencies

To enable this property, set ShowAdvancedProperties to true.

Data Types: char | string

First DDS tone frequency in Hz, specified as one of these options:

  • Numeric scalar — Use this option for a single channel or to specify the same frequency for two channels. The object applies scalar expansion for each channel specified by the ChannelMapping property.

  • 1-by-2 numeric vector — Use this option to specify different frequencies for two channels. The ith element of the vector is applied to the ith channel specified by the ChannelMapping property.

The valid range of DDSTone1Freq is from 0 to BasebandSampleRate / 2.

Dependencies

To enable this property, set DataSourceSelect to 'DDS'.

Data Types: double

Second DDS tone frequency in Hz, specified as one of these options:

  • Numeric scalar — Use this option for a single channel or to specify the same frequency for two channels. The object applies scalar expansion for each channel specified by the ChannelMapping property.

  • 1-by-2 numeric vector — Use this option to specify different frequencies for two channels. The ith element of the vector is applied to the ith channel specified by the ChannelMapping property.

The valid range of DDSTone2Freq is 0 Hz to BasebandSampleRate / 2.

Dependencies

To enable this property, set DataSourceSelect to 'DDS'.

Data Types: double

First DDS tone scale in millionths of full scale, specified as one of these options:

  • Numeric scalar — Use this option for a single channel or to specify the same scale for two channels. The object applies scalar expansion for each channel specified by the ChannelMapping property.

  • 1-by-2 numeric vector — Use this option to specify different scales for two channels. The ith element of the vector is applied to the ith channel specified by the ChannelMapping property.

The valid range of DDSTone1Scale is from 0 to 1.

Dependencies

To enable this property, set DataSourceSelect to 'DDS'.

Data Types: double

Second DDS tone scale in millionths of full scale, specified as one of these options:

  • Numeric scalar — Use this option for a single channel or to specify the same scale for two channels. The object applies scalar expansion for each channel specified by the ChannelMapping property.

  • 1-by-2 numeric vector — Use this option to specify different scales for two channels. The ith element of the vector is applied to the ith channel specified by the ChannelMapping property.

The valid range of DDSTone2Scale is from 0 to 1.

Dependencies

To enable this property, set DataSourceSelect to 'DDS'.

Data Types: double

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

tx(data) sends data to the radio hardware associated with the comm.SDRTxAD936x transmitter System object, tx.

example

tx() enables DDS transmission. To use this syntax, set the DataSourceSelect property to 'DDS'.

underflow = tx(data) returns a logical value that indicates data discontinuity. If underflow is true, the input data does not represent contiguous data from the host to the antenna. Use this information to determine whether the host sends valid data to the radio hardware.

Note

Calling the object for the first time initializes the radio. Because this initialization can result in an underflow, ignore the underflow output value of the first call.

Input Arguments

expand all

Input signal sent to the radio hardware, specified 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 sent on one channel. In single-channel mode, the number of elements in a column must be even.

The complex data type of the transmitted signal must be one of these data types:

  • 16-bit signed integers — Since the AD9361/AD9364 RF chip has a 12-bit DAC, only the 12 most significant bits of the I and Q samples are used.

  • Single-precision floating point — Complex values in the range of [–1, 1]. Since the AD9361/AD9364 RF chip has a 12-bit DAC, numbers of magnitude less than 0.0625 are lost.

  • Double-precision floating point — Complex values in the range of [–1, 1]. Since the AD9361/AD9364 RF chip has a 12-bit DAC, numbers of magnitude less than 0.0625 are lost.

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

Output Arguments

expand all

Data discontinuity flag, returned as a logical scalar.

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

  • false indicates no underflow.

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

Data Types: logical

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

designCustomFilterDesign custom filter for Analog Devices AD9361/AD9364 RF chip
infoSynchronize receiver or transmitter radio settings with radio hardware
transmitRepeatDownload waveform signal to radio and repeatedly transmit it over the air
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 transmitter System object for the AD936x-based Zynq radio hardware with the specified properties. Use a single channel.

tx = sdrtx('AD936x', ...
    'IPAddress','192.168.3.2', ...
    'CenterFrequency',2.2e9, ...
    'BasebandSampleRate',800e3, ...
    'ChannelMapping',1);

Create a DPSK modulator System object.

mod = comm.DPSKModulator('BitInput',true);

Use modulated random data as the data source and transmit the data with the radio hardware.

for counter = 1:20
   data = randi([0 1],30,1);
   modSignal = mod(data);
   tx(modSignal);
end
## Establishing connection to hardware. This process can take several seconds.

Version History

Introduced in R2018b