Main Content

radarTransceiver

Monostatic radar transceiver

Since R2021a

Description

The radarTransceiver System object™ creates a monostatic radar object that generates samples of the received target echo at the radar.

To generate samples of the received target echo:

  1. Create the radarTransceiver 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

Description

radarTrans = radarTransceiver creates a radar object in a monostatic radar scenario. This object generates samples of the received target echo at the radar.

example

radarTrans = radarTransceiver(Name,Value) creates a monostatic radar transceiver object with each specified property set to the specified value. Enclose each property name in single quotes.

Properties

expand all

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.

Radar system's transmitter, specified as a phased.Transmitter object.

Radar transmit antenna, specified as either a phased.Radiator object or phased.WidebandRadiator object.

Radar receive antenna, specified as either a phased.Collector object or phased.WidebandCollector.

Radar receiver, specified as a phased.ReceiverPreamp object.

Radar mechanical scan mode, specified as one of the following:

  • 'Circular' –– The radar scans counter-clockwise in the azimuth plane. The azimuth plane is defined in the xy plane.

  • 'Sector' –– The radar scans back and forth within a sector in the azimuth plane, first in counter-clockwise direction, then in clockwise direction, and so on.

  • 'None'

Initial mechanical scan angle measured in degrees, and specified as scalar.

Dependencies

This property applies only when you set the MechanicalScanMode property to 'Circular' or 'Sector'.

Data Types: double

Mechanical azimuth coverage for sector scanning measured in degrees, and specified as a two-element row vector.

Dependencies

This property applies only when you set the MechanicalScanMode property to 'Sector'.

Data Types: double

Azimuth scanning rate for the mechanical scan measured in degrees per second, and specified as a positive scalar.

Dependencies

This property applies only when you set the MechanicalScanMode property to 'Circular' or 'Sector'.

Data Types: double

Radar electronic scan mode, specified as one of the following:

  • 'Sector' –– The radar scans back and forth within a sector in the azimuth plane, first in counter-clockwise direction, then in clockwise direction, and so on.

  • 'Custom'

  • 'None'

Coverage measured in degrees for electronic sector scanning, specified as a 2-by-2 matrix. The first row specifies the scan coverage in the azimuth direction, and the second row specifies the scan coverage in the elevation direction.

Dependencies

To enable this property, set the ElectronicScanMode property to 'Sector'.

Data Types: double

Scanning rate measured in degrees per second for the electronic scan, specified as a two-element column vector. The first row specifies the scan rate in the azimuth direction, and the second row specifies the scan rate in the elevation direction.

Dependencies

To enable this property, set the ElectronicScanMode property to 'Sector'.

Data Types: double

Offset of the radar's origin from the origin of its mounting platform, specified as a 1-by-3 vector in the form [x, y, z] and measured in meters.

Data Types: double

Angles at which the radar is mounted relative to the platform's orientation, specified as a 1-by-3 vector in Euler angles around [z, y, x] axes. These angles are also referred to as [yaw, pitch, roll] angles.

Assume the platform's orientation is defined by the axes Xp, Yp, and Zp. The roll angle specifies the counterclockwise rotation around Xp, the pitch angle specifies the counterclockwise rotation around Yp, and the yaw angle specifies the counterclockwise rotation around Zp. To obtain the radar's orientation axes Xr, Yr, and Zr from the platform's orientation axes, perform the intrinsic rotation of the platform's orientation axes [Xp, Yp, Zp] in the order of roll, pitch, and yaw.

Data Types: double

Source of number of pulses or sweeps in the signal, specified as one of the following:

  • 'Property' –– The number of pulses or sweeps in the signal is specified by the NumRepetitions property.

  • 'Input port' –– The number of pulses or sweeps in the signal is specified through an input.

Number of pulses or sweeps in the signal, specified as a positive integer.

Dependencies

To enable this property, set the NumRepetitionsSource property to 'Property'.

Data Types: double

Source of range limits, specified as 'Property' or 'Input port'. When you set this property to ''Property', the range limits are determined by the value of the RangeLimits property. When you set this property to 'Input port', the range limits are determined by the input argument rl.

Data Types: char | string

Minimum and maximum ranges of interest of the received signal, specified as a 1-by-2 real-valued vector. The default value of this property, [0 inf], indicates that all ranges are of interest. Range limits are used to compute the signal arrival time interval. Only the signal within the time interval of interest is returned. Units are in meters.

Example: [1000 10000]

Tunable: Yes

Dependencies

To enable this property, set the RangeLimitsSource property to Property.

Data Types: double

Set this property to true to output corresponding ranges for the radar signal.

Data Types: logical

Set this property to true to output corresponding times for the radar signal.

Data Types: logical

Usage

Description

example

y = radarTrans(tgt,t) returns the target echo received at the radar y, at time t seconds due to targets in tgt.

To use this syntax, set the NumRepetitionSource to 'Property'.

y = radarTrans(proppaths,t) returns the target echo received at the radar y at time t (in seconds) due to the propagation paths specified in proppaths.

This syntax applies when you set the NumRepetitionSource to 'Property'.

y = radarTrans(sceneaxes) specifies the scenario axes sceneaxes. This syntax applies when you set the Polarization property in the TransmitAntenna and ReceiveAntenna properties to 'Combined'.

y = radarTrans(___,N) specifies the number of pulses/sweeps N in the signal as a positive integer.

This syntax applies when you set the NumRepetitionSource to 'Input port'.

y = radarTrans(___,PRFIDX) specifies the PRF index of the radar waveform as a positive integer.

This syntax applies when you set the PRFSelectionInputPort property to true in the radar's Waveform property.

y = radarTrans(___,wt) specifies the transmit weights of the radar system as a column vector.

This syntax applies when you set the ElectronicScanMode property to 'Custom' and the WeightsInputPort property to true in the radar's TransmitAntenna property.

y = radarTrans(___,steert) specifies the transmit steering angle (in degrees) as a 2-by-1 vector in the form [azimuth; elevation].

This syntax applies when you set the ElectronicScanMode property to 'Custom'. Use a subarray in the transmit antenna and set its SubarraySteering property to 'Phase' or 'Time'.

y = radarTrans(___,wst) specifies the transmit weights applied to each element as either a matrix or a cell array.

This syntax applies when you set the ElectronicScanMode property to 'Custom'. Use a subarray in the transmit antenna and set its SubarraySteering property to 'Custom'.

y = radarTrans(___,wr) specifies the receive weights of the radar system as a column vector.

This syntax applies when you set the ElectronicScanMode property to 'Custom' and the WeightsInputPort property to true in the radar's ReceiveAntenna property.

y = radarTrans(___,steerr) specifies the receive steering angle (in degrees) as a 2-by-1 vector in the form [azimuth; elevation].

This syntax applies when you set the ElectronicScanMode property to 'Custom', use a subarray in the receive antenna, and set its SubarraySteering property to 'Phase' or 'Time'.

y = radarTrans(___,rl) specifies the range limits of interest, rl.

This syntax applies when you set the RangeLimits to 'Input port'.

example

[y,rgrid] = radarTrans(___) also returns the range grid rgrid of the received signal. To enable this syntax, set the RangeOutputPort property to true.

[y,tgrid] = radarTrans(___) also returns the time grid tgrid of the received signal. To enable this syntax, set the TimeOutputPort property to true.

example

[y,info] = radarTrans(___) also returns additional simulation metadata in the structure info.

Example: [y,info] = radarTrans(TGT,T,N,PRFIDX,WT,STEERT,WR,STEERR);[y,info] = radarTrans(TGT,T,N,PRFIDX,WT,WST,WR,WSR);[Y,RGRID,TGRID,INFO] = radarTrans(TGT,T,SCENEAXES,N,PRFIDX, ... , WT,WST,WR,WSR,RL)

You can combine optional input arguments when you set the properties to enable them. Optional inputs must be listed in the same order as the enabled properties.

Input Arguments

expand all

Radar target that reflects the signal, specified as an array of struct. All target coordinates are defined with respect to the platform body frame. Each structure describes a point target and contains the following fields:

  • Position –– Specify the position of the target as a 1-by-3 vector (in meters) in the form of [x y z]. The position is specified in the radar mounting platform's coordinate system.

    This is a required field and there is no default value.

  • Velocity –– Specify the velocity of the target as a 1-by-3 vector (in meters) in the form of [x y z]. The velocity is specified in the radar mounting platform's coordinate system. The default value is [0 0 0].

  • Orientation –– Specify the target orientation as a scalar quaternion or a 3-by-3 real-valued orthonormal frame rotation matrix, which rotates the axes of the radar mounting platform into alignment with the axes of the target's frame. The default value is quaternion(1,0,0,0).

  • Signatures –– Specify the target radar cross section (RCS) signature as a struct or an rcsSignature object. rcsSignature supports both polarized and nonpolarized targets. If the Polarization property specified in the TransmitAntenna and ReceiveAntenna properties is set to 'Combined', Signatures, must be a polarimetric rcsSignature object with the EnablePolarization property set to true.

    If Signatures is a struct, it must have the following fields:

    • Azimuth –– Specify the azimuth angles (in degrees) at which the RCS pattern is sampled as a length-Q vector. The default is [-180 180].

    • Elevation –– Specify the elevation angles (in degrees) at which the RCS pattern is sampled as a length-P vector. The default is [-90; 90].

    • Frequency –– Specify the frequencies (in Hz) at which the RCS pattern is sampled as a length-K vector. The default is [0 1e20].

    • Pattern –– Specify the target's RCS pattern (in dBm) as either a P-by-Q matrix or a P-by-Q-by-K array. If defined as a P-by-Q-by-K array, each entry in the array specifies the RCS at the corresponding frequency and the corresponding (azimuth, elevation) direction. If defined as a P-by-Q matrix, then the pattern applies to all frequencies. The default is [0 0;0 0].

Example: tgt1 = struct('Position',[0 5e3 0],'Velocity',[0 0 0]);tgt2 = struct('Position',[10e3 0 0],'Velocity',[0 0 0]);tgt = [tgt1 tgt2];

Data Types: struct

Propagation path between transmitter and receiver, specified as an array of struct. Each structure describes a propagation path between the transmitter and the receiver, and contains the following required fields:

  • PathLength –– Specify the length of a propagation path as a positive scalar (in meters).

  • PathLoss –– Specify the propagation loss along the path as a scalar (in dB).

  • ReflectionCoefficient –– Specify the cumulative reflection coefficients for all reflections along the path as a scalar in linear units. The coefficients include effects like reflections from a scatterer or a target.

    If the Polarization property specified in the TransmitAntenna and ReceiveAntenna properties is set to 'Combined', the ReflectionCoefficient is a 3-by-3 matrix representing how the transmit signal components along each coordinate system axis of the scene is mapped to the components of the received signal. The reflection coefficient is in the scenario frame coordinates.

  • AngleOfDeparture –– Specify the path's angle of departure (in degrees) as a two-column vector in the form [azimuth; elevation] angles. The angle is measured in the transmit antenna's mounting frame coordinate system.

  • AngleOfArrival –– Specify the path's angle of arrival (in degrees) as a two-column vector in the form [azimuth; elevation] angles. The angle is measured in the receive antenna's mounting frame coordinate system.

  • DopplerShift –– Specify the cumulative Doppler shift along the path as a scalar (in Hz).

Data Types: struct

Scenario axes in the platform body frames, specified as a real-valued 3-by-3 orthogonal matrix.

Dependencies

To enable this argument, set the Polarization property in the TransmitAntenna and ReceiveAntenna properties to 'Combined'.

Data Types: double

Current time at which the radar receives the target echo, specified as a nonnegative scalar in seconds.

Data Types: double

Number of pulses/sweeps in the signal, specified as a positive integer.

You can specify this input only when the NumRepetitionSource property is set to 'Input port'.

Data Types: double

PRF index of the radar waveform, specified as a positive integer.

You can specify this input only when you set the PRFSelectionInputPort property to true in the radar's Waveform property.

Data Types: double

Transmit weights of the radar system, specified as a column vector.

If a regular antenna array is used to transmit, wt is of length NTE where NTE is the number of antenna elements in the radar's transmit antenna array.

If a subarray is used to transmit, wt is of length NTS where NTS is the number of subarrays in the radar's transmit antenna array.

You can specify this input only when you set the ElectronicScanMode property to 'Custom' and the WeightsInputPort property to true in the radar's TransmitAntenna property.

Data Types: double

Transmit steering angle (in degrees), specified as a 2-by-1 vector in the form of [azimuth; elevation].

You can specify this input only when you set the ElectronicScanMode property to 'Custom'. Use a subarray in the transmit antenna, and set its SubarraySteering property to 'Phase' or 'Time'.

Data Types: double

Transmit weights applied to each element, specified as either a matrix or a cell array.

If the transmit antenna uses a:

  • phased.ReplicatedSubarray, wst must be an NTE-by-NTS matrix where NTE is the number of elements in each individual subarray and NTS is the number of subarrays. Each column in wst specifies the weights for the elements in the corresponding subarray.

  • phased.PartitionedArray and its individual subarrays have the same number of elements, wst must be an NTE-by-NTS matrix where NTE is the number of elements in each individual subarray and NTS is the number of subarrays. Each column in wst specifies the weights for the elements in the corresponding subarray.

  • phased.PartitionedArray and its subarrays can have different number of elements, wst can be one of the following:

    • NTE-by-NTS matrix, where NTE indicates the number of elements in the largest subarray and NTS is the number of subarrays.

      If wst is a matrix, the first KT entries in each column, where KT is the number of elements in the corresponding subarray, specify the weights for the elements in the corresponding subarray.

    • 1-by-NTS cell array, where NTS is the number of subarrays and each cell contains a column vector whose length is the same as the number of elements of the corresponding subarray.

You can specify this input only when you set the ElectronicScanMode property to 'Custom'. Use a subarray in the transmit antenna, and set its SubarraySteering property to 'Custom'.

Data Types: double

Receive weights of the radar system, specified as a column vector. If a regular antenna array is used to receive, wr is of length NRE, where NRE is the number of antenna elements in the radar's receive antenna array. If a subarray is used to receive, wr is of length NRS where NRS is the number of subarrays in the radar's receive antenna array.

You can specify this input only when you set the ElectronicScanMode property to 'Custom' and the WeightsInputPort property to true in the radar's ReceiveAntenna property.

Data Types: double

Receive steering angle in degrees, specified as a 2-by-1 vector in the form of [azimuth; elevation].

You can specify this input only when you set the ElectronicScanMode property to 'Custom', use a subarray in the receive antenna, and set its SubarraySteering property to 'Phase' or 'Time'.

Data Types: double

Receive weights applied to each element, specified as either a matrix or a cell array.

If the receive antenna uses a:

  • phased.ReplicatedSubarray object, wsr must be an NRE-by-NRS matrix where NRE is the number of elements in each individual subarray and NRS is the number of subarrays. Each column in wsr specifies the weights for the elements in the corresponding subarray.

  • phased.PartitionedArray object, and its individual subarrays have same number of elements, wsr must be an NRE-by-NRS matrix where NRE is the number of elements in each individual subarray and NRS is the number of subarrays. Each column in wsr specifies the weights for the elements in the corresponding subarray.

  • phased.PartitionedArray object, and its subarrays can have different number of elements, wsr can be one of the following:

    • NRE-by-NRS matrix, whereNRE indicates the number of elements in the largest subarray and NRS is the number of subarrays.

      If wsr is a matrix, the first KR entries in each column, where KR is the number of elements in the corresponding subarray, specify the weights for the elements in the corresponding subarray.

    • 1-by-NRS cell array, where NRS is the number of subarrays and each cell contains a column vector whose length is the same as the number of elements of the corresponding subarray.

You can specify this input only when you set the ElectronicScanMode to 'Custom', use a subarray in the receive antenna, and set its SubarraySteering property to 'Custom'.

Data Types: double

Range limits of interest, specified as a N-by-2 matrix. Each row represents set of range limits in the form of [StartRange EndRange]. You can also use [0 inf] to specify all range cells.

The dimensions of rl determine the dimensions of the output argument y.

  • If rl is a row vector, then y is an NSRL-by-NRE-by-N array, where NSRL is the number of snapshots within the specified range limits.

  • If rl is a matrix, then y is a 1-by-NRL cell array where NRL is the number of rows in rl. Each cell in y contains an NSRL-by-NREby-N array, representing the radar signal within the corresponding range gates in rl.

Dependencies

To enable syntax, set the RangeLimitsSource property to 'Input port'.

Data Types: double

Output Arguments

expand all

Signal received at the radar receiver, returned as a one of the following:

  • NS-by-NRE-by-N array –– If the radar uses a regular antenna array for receiving, the dimension of y is NS-by-NRE-by-N, where NRE is the number of antenna elements in the radar's receive antenna array, NS is the number of samples in each transmitted pulse/sweep, and N is the number of transmitted pulses/sweeps.

  • NS-by-NRS-by-N array –– If the radar uses a subarray for receiving, the dimension of y is NS-by-NRS-by-N, where NRS is the number of subarrays in the radar's receive antenna array.

N is specified by the value of the NumRepetition property. When multiple pulses/sweeps are simulated, the targets are assumed to move according to a constant-velocity trajectory.

Data Types: double
Complex Number Support: Yes

Range grid of received signal, returned as an NSRL-by-1 real vector or cell array.

  • If y is an array, rgrid is an NSRL-by-1 vector.

  • If y is a cell array, rgrid is also a cell whose cells contain the range grids of the corresponding signal in y.

Dependencies

To enable this argument, set the RangeOutputPort property to true.

Data Types: double

Time grid of received signal, returned as an NSRL-by-1 real vector or cell array.

  • If y is an array, tgrid is an NSRL-by-1 vector.

  • If y is a cell array, tgrid is also a cell whose cells contain the time grids of the corresponding signal in y.

Dependencies

To enable this argument, set the TimeOutputPort property to true.

Data Types: double

Simulation metadata, returned as a structure containing the following fields:

  • IsScanDone –– Whether one period of mechanical scan is done.

  • MechanicalAngle –– Current antenna pointing angle due to mechanical scan.

  • ElectronicAngle –– Current antenna pointing angle due to electronic scan.

  • Origin –– Radar location in the platform coordinate system.

  • Orientation –– Radar orientation axes in the platform coordinate system.

Data Types: struct

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

configureAntennasConfigure radarTransceiver transmit and receive antennas
stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Examples

collapse all

Model the target echo received by a monostatic radar using the radarTransceiver object.

Create the radar targets as an array of two structures with a specified position and velocity.

tgt1 = struct( ...
    'Position', [0 5e3 0], ...
    'Velocity', [0 0 0]);
tgt2 = struct( ...
    'Position', [10e3 0 0], ...
    'Velocity', [0 0 0]);

Create a surveillance radar 15 meters above the ground. Specify rpm to determine the scan rate (in deg/s). For the specified scanrate and beamwidth, determine the update rate.

rpm = 12.5;
scanrate = rpm*360/60;       % deg/s
beamw = 1;                   % beamwidth
updaterate = scanrate/beamw; % update at each beam
radarht = 15.0;              % radar height

Create a phased.CustomAntennaElement object that acts as a transmit antenna element and a receive antenna element in the radarTransceiver object.

az = -180:0.5:180;
el = -90:0.5:90;
pat = zeros(numel(el),numel(az));
pat(-0.5 <= el & el <= 0.5,-0.5 <= az & az <= 0.5) = 1;
ant = phased.CustomAntennaElement('AzimuthAngles',az,...
    'ElevationAngles',el,'MagnitudePattern',mag2db(abs(pat)),...
    'PhasePattern',zeros(size(pat)));

Create a radarTransceiver object. Specify a rectangular waveform for the radar using the phased.RectangularWaveform object. Specify the transmit antenna and the receive antenna. The mechanical scan mode is set to 'Circular' with a defined scan rate.

wav = phased.RectangularWaveform('PulseWidth',1e-5);
sensor = radarTransceiver( ...
    'Waveform',wav, ...
    'TransmitAntenna',phased.Radiator('Sensor',ant), ...
    'ReceiveAntenna',phased.Collector('Sensor',ant), ...
    'MechanicalScanMode','Circular', ...
    'MechanicalScanRate',scanrate, ...
    'MountingLocation',[0,0,radarht]);

Generate detections from a full scan of the radar.

simTime = 0;
sigi = 0;
while true
    [sig, info] = sensor([tgt1 tgt2], simTime);
    sigi = sigi + abs(sig);

    % Is full scan complete?
    if info.IsScanDone
        break % yes
    end
    simTime = simTime + 1/updaterate;
end
r = (0:size(sigi,1)-1)/sensor.Waveform.SampleRate* ...
    sensor.TransmitAntenna.PropagationSpeed/2;
plot(r,sigi)
hold on
plot([5e3 5e3],ylim,'r--',[10e3 10e3],ylim,'r--')
xlabel('Range (m)')
ylabel('Magnitude')

Find the received signals at a monostatic radar between 4 and 6 km from target.

First, create a target at a range of 5 km moving at 10 m/sec.

rng1 = 5e3;
tgt = struct( ...
    'Position',[0 rng1 0], ...
    'Velocity',[0 10 0]);

Create a rectangular pulse transmitted waveform.

wav = phased.RectangularWaveform('PulseWidth',1e-5);

Configure the radarTransceiver. The transmit and receive arrays are co-located 5-element ULAs. Configure the radarTransceiver to output the range and time.

ant = phased.IsotropicAntennaElement;
array = phased.ULA(5,Element=ant);
sensor = radarTransceiver(...
    Waveform=wav, ...
    TransmitAntenna=phased.Radiator('Sensor',array), ...
    ReceiveAntenna=phased.Collector('Sensor',array), ...
    MechanicalScanMode='None', ...
    RangeLimits=[2e3 6e3], ...
    RangeOutputPort=true, ...
    TimeOutputPort=true);

Generate the received signal.

simTime = 0;
[sig,rgrid,tgrid,info] = sensor(tgt,simTime);

Plot the signal versus range and time.

plot(rgrid,abs(sig))
hold on
plot([rng1 rng1],ylim,'r--')
title('Round Trip Distance')
xlabel('Range (m)')
ylabel('Magnitude')
hold off

plot(tgrid*10^6,abs(sig))
hold on;
title('Round Trip Time')
xlabel('Time (\mu sec)')
ylabel('Magnitude')
c = physconst('LightSpeed');
tarrive = 2*rng1/c*1e6;
plot([tarrive tarrive],ylim,'r--')

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2021a