Main Content

wt.radio.X410

Interface with USRP X410 radio

Since R2025a

Description

The wt.radio.X410 radio object provides an interface with a USRP™ X410 radio that corresponds to a radio setup configuration you saved using the Radio Setup wizard.

Refer to the radio object properties to get information about the radio setup configuration that the object corresponds to, such as the model number of the radio, the radio IP address, and the synchronization options.

Use object functions to:

  • Check the lock status of the reference clock, local oscillators, or GPS disciplined oscillator (GPSDO) on the radio.

  • Get time and GPS information from the radio.

  • Synchronize multiple devices by setting the radio time.

  • Schedule property updates on Wireless Testbench™ application objects and usrp System objects.

You can use the wt.radio.X410 radio object to create a Wireless Testbench application object to configure your radio for baseband transmit and capture or spectrum monitoring applications. You can also use this radio object to create a usrp System object™ for controlling your radio in targeting workflows.

Creation

To create a radio object, use the radioConfigurations function with the name of a radio configuration created using the Radio Setup wizard:

radio = radioConfigurations("MyRadio")

Properties

expand all

Identification and Network Properties

This property is read-only.

Radio setup configuration name, returned as a string. You specify this name when you save your radio setup configuration in the Radio Setup wizard.

Example: "MyRadio" indicates that you saved a radio setup configuration under the name MyRadio in the Radio Setup wizard.

Data Types: string

This property is read-only.

Model number of the radio, returned as "USRP X410".

For more information about radio support, see Supported Radio Devices.

Data Types: string

This property is read-only.

IP address of the radio, returned as a string scalar containing dotted-quad values.

Example: "192.168.10.2"

Data Types: string

Synchronization Properties

This property is read-only.

Time source of the radio, returned as one of these options:

  • "internal" — Use the internal pulse per second (PPS) signal source of the radio.

  • "external" — Use the PPS signal from an external signal generator.

  • "gpsdo" — Use the PPS signal from the onboard GPS disciplined oscillator (GPSDO).

For more information about synchronizing clock or time references, see Clock and Time References.

Data Types: string

This property is read-only.

Time source of the radio, returned as one of these options:

  • "internal" — Use the internal clock signal of the radio.

  • "external" — Use a clock signal from an external signal generator.

  • "gpsdo" — Use the clock signal from a GPSDO.

To check the lock status of the radio clocks to the configured 10 MHz reference clock, use the referenceLockedStatus function.

If the clock source of the radio is set to use the GPSDO, use the gpsLockedStatus function to check the lock status of the GPSDO to the GPS constellation.

For more information about synchronizing clock or time references, see Clock and Time References.

Data Types: string

This property is read-only.

Local oscillator (LO) source of the radio, returned as one of these options:

  • "internal" — Use the internal LO signal of the radio.

  • "external" — Use an LO signal from an external signal generator.

This setting applies to all LOs on the radio.

To check the lock status of the LOs, use the loLockedStatus function. The LOs are locked when they have stabilized at the desired frequency and phase.

For more information, see Phase Synchronize Operations on NI USRP Radios.

Data Types: string

Object Functions

expand all

referenceLockedStatusLock status of radio to 10 MHz reference clock
loLockedStatusLock status of local oscillators
gpsLockedStatusLock status of GPSDO to GPS constellation
getRadioTimeCurrent radio time
getTimeLastPPSRadio time of last pulse per second signal
setTimeNextPPSSet radio time on next pulse per second signal
getGPSTimeGPS time from GPSDO
getGPSNMEANMEA GGA sentence from GPSDO

Examples

collapse all

Call the radioConfigurations function to list all saved radio setup configurations.

configs = radioConfigurations;

Create a radio object by specifying the name of a saved radio setup configuration.

radioName = configs(1).Name
radioName = 
"MyRadio"
radio = radioConfigurations(radioName);

Synchronize the radio time on two NI USRP radios that share a clock and time source.

Create Radio Objects

Create a radio object for each radio, specifying a radio setup configuration previously saved using the Radio Setup wizard.

radio1 = radioConfigurations("MyRadio")
radio1 = 
  N320 with properties:

           Name: "MyRadio"
       Hardware: "USRP N320"

      IPAddress: "192.168.20.2"

    ClockSource: "external"
     TimeSource: "external"

       LOSource: "internal"

radio2 = radioConfigurations("MyRadio2")
radio2 = 
  N321 with properties:

             Name: "MyRadio2"
         Hardware: "USRP N321"

        IPAddress: "192.168.21.2"

      ClockSource: "external"
       TimeSource: "external"

         LOSource: "internal"
       LOExported: 0
    LODistributed: 0

Create and Configure Application Object or usrp System Object

After you create your radio objects and before you synchronize the radio time, you should fully configure your radio. Connecting to the radio to load an application or update an RF property resets the radio time.

To configure one or both of your radios using a baseband or detector application object, use the corresponding radio object as the radio input argument when you create the object. Additionally, specify the Preload name-value argument as true and specify all RF properties using the PropertyName=Value syntax. The commented code shows an example.

% bbtrx = basebandTransceiver(radio, ...
%     Preload=true, ...
%     TransmitDataType="double", ...
%     TransmitAntennas="RFA:TX/RX", ...
%     TransmitCenterFrequency=2.4e9, ...
%     TransmitRadioGain=10, ...
%     CaptureAntennas="RFA:RX2", ...
%     CaptureCenterFrequency=2.4e9, ...
%     CaptureRadioGain=10);

To connect to and control one or both of your radios with a custom FPGA image that you created by using the Target NI USRP Radios Workflow, use the corresponding radio object as the radio input argument when you create a usrp System object. Then, run all the code required to configure your radio, your DUT, and the interfaces between them, up to the point where you call the setup function on your usrp System object. The commented code shows an example.

% device = usrp(radio, ...
%     SampleRate=250e6, ...
%     TransmitAntennas="DB0:RF0:TX/RX0", ...
%     TransmitDDRAllocation=1000);
% programFPGA(device,"myBitstream.bit","myDeviceTree.dts");
% describeFPGA(device,"ModelName_wthandoffinfo.mat"); 
% dut = fpga(device);
% addRFNoCRegisterInterface(dut, ...
%     "InterfaceID","DUTName", ...
%     "RFNoCBlock","0/DUTName#0");
% DUTPort_Read_Register = hdlcoder.DUTPort("Read_Register", ...
%     "Direction","OUT", ...
%     "DataType","int16", ...
%     "IsComplex",false, ...
%     "Dimension",[1 1], ...
%     "IOInterface","DUTName", ...
%     "IOInterfaceMapping",1);
% mapPort(dut,DUTPort_Read_Register);
% setup(device);

You can now proceed to synchronize the radio time.

Synchronize Radio Time

To synchronize both radios to use a common radio time, set the radio time on both radios to the same value on the next PPS signal. First, use the getTimeLastPPS function to get the time that the last PPS occurred.

tLastPPS = getTimeLastPPS(radio1);

When a PPS signal is detected, you have one second to set a new radio time. Check for a new signal every 0.1 seconds, then use the setTimeNextPPS function to set the radio time on both radios to zero.

while tLastPPS == getTimeLastPPS(radio1)
    pause(0.1)
end
setTimeNextPPS(radio1,0);
setTimeNextPPS(radio2,0);

To verify that the radio time is synchronized, verify that the last PPS signal occurred at the same time on both radios.

pause(1.1)
tLastPPS1 = getTimeLastPPS(radio1);
tLastPPS2 = getTimeLastPPS(radio2);
isequal(tLastPPS1,tLastPPS2)
ans = logical
   0

If the radio time synchronization is unsuccessful, try running this code section again.

Version History

Introduced in R2025a