CustomSurface
Description
CustomSurface defines a custom surface object belonging to a radar
scenario, radarScenario. The
object describes the extent and complex scattering response of the surface. You can use the
CustomSurface object to update polarization scattering matrices, determine
surface heights, and test for occlusion. CustomSurface
objects are compatible with I/Q sensors generated by radarTransceiver and
require that the scenario sensor, surface, and targets are polarized. Scattering matrices are
specific to a single frequency and viewing geometry and are therefore relevant to a single
sensor attached to the radarScenario. Effects due to occlusion should be
modeled within the surface scattering matrix.
Creation
Create CustomSurface objects using the customSurface
object function of the radarScenario
object.
Properties
Extent of the rectangular custom surface, specified as a 2-by-2 finite matrix in units
of degrees. The bounding rectangle is defined by two 2-dimensional points in either
Cartesian or geodetic scenario coordinates. When the
IsEarthCentered property of the radarScenario
object is specified as:
false— Scenario coordinates are Cartesian. Specify the bounding rectangle as [minX,maxX,minYmaxY].minXandmaxXare the minimum and maximum values in the x-direction of the reference frame, whereminX<maxX.minYandmaxYare the minimum and maximum values in the y-direction of the reference frame, whereminY<maxY.true— Scenario coordinates are geodetic. Specify the bounding rectangle as [startLat,endLat,startLonendLon].startLatandendLatare the minimum and maximum latitudes of the geodetic frames, wherestartLatandendLatmust lie in the interval [–90,90] andstartLat<endLat.startLonandendLonare the minimum and maximum longitudes of the geodetic frame and must lie in the interval [–180,180]. IfendLon<startLon, the object wrapsendLontostartLon+360°. Units are in degrees.
The resolution of surface patches within Boundary is
given by resX = lengthX /
numX for the x-dimension. Similarly, the resolution
for the y-dimension is resY = lengthY /
numY. lengthX and lengthY are
calculated as the differences of the Boundary coordinates in the
x- and y- dimensions, respectively. The
number of surface patches within the boundary is determined by the size of the
scattering matrix component Shh. For the
x-dimension, numX =
size(Shh,1) and for the y-dimension, numY =
size(Shh,2). Note, the clutterGenerator
Resolution property for the radarScenario should
match the resolution of the custom surface to prevent resampling of the surface. For
example, if you have a surface that is 500-by-1 km in Cartesian space with a
clutterGenerator
Resolution set to 50 m, the Boundary could be
specified as [–200 300; 100 1100]. For this case, the polarization
scattering matrix components (Shh, Svv,
Shv, and Svh) should be of size 20-by-10 m
because numX = (maxX –
minX) / resX, and numY = (maxY –
minY) / resY.
Data Types: double
Specify the polarization scattering matrix as either full or
symmetric. If CrossPolarization is
full, the polarization matrix components
Shh, Svv, Shv, and
Svh must all be specified. If
CrossPolarization is set to symmetric,
reciprocity is assumed (monostatic geometry), and the cross-polarization terms are
considered to be equivalent (Shv = Svh).
Therefore, Shv is automatically set to the same value as
Svh and cannot be modified.
Data Types: char | string
Specify the complex-valued polarization scattering matrix co-polarized
HH component, where HH represents horizontal
transmission and horizontal reception, as an
M-by-N-by-P matrix.
M indicates the number of components in the
x-direction, N indicates the number of
components in the y-direction, and P corresponds
to the number of elements in the Frequency vector. The matrix is
bounded in space by the Boundary property limits.
Data Types: double
Complex Number Support: Yes
Specify the complex-valued polarization scattering matrix co-polarized
VV component, where VV represents vertical
transmission and vertical reception, as an
M-by-N-by-P matrix.
M indicates the number of components in the
x-direction, N indicates the number of
components in the y-direction, and P corresponds
to the number of elements in the Frequency vector. The matrix is
bounded in space by the Boundary property limits.
Data Types: double
Complex Number Support: Yes
Specify the complex-valued polarization scattering matrix cross-polarized
HV component, where HV represents horizontal
transmission and vertical reception, as an
M-by-N-by-P matrix.
M indicates the number of components in the
x-direction, N indicates the number of
components in the y-direction, and P corresponds
to the number of elements in the Frequency vector. The matrix is
bounded in space by the Boundary property limits.
Data Types: double
Complex Number Support: Yes
Specify the complex-valued polarization scattering matrix cross-polarized
VH component, where VH represents vertical
transmission and horizontal reception, as an
M-by-N-by-P matrix.
M indicates the number of components in the
x-direction, N indicates the number of
components in the y-direction, and P corresponds
to the number of frequencies in Frequency. The matrix is bounded in
space by the Boundary property limits.
Dependencies
To enable this property, set the CrossPolarization property
to "full".
Data Types: double
Complex Number Support: Yes
Valid frequencies for the scattering matrix components
specified as a length-P row
vector, where P is the number of
frequencies. Frequency units are in hertz
(Hz).
Data Types: double
Reference height of surface height data, specified as a scalar. Surface heights are relative to the reference height. Units are in meters.
Data Types: double
Object Functions
updateScatteringMatrix | Update scattering matrices |
height | Height of point on surface |
occlusion | Test for occlusion of point by a surface |
Examples
This example shows how to create a custom surface and update the polarization scattering matrices. Co-polarized and cross-polarized surfaces are compared.
Create Custom Surface
Create a co-polarized custom surface.
% Create a radar scenario rng('default'); scenario = radarScenario(IsEarthCentered=false); % Create a co-polarized custom surface bnds = [-600 570; 0 1.17e3]; Shh = zeros(40,40,2); Svv = ones(40,40,2); Shv = zeros(size(Shh)); srf = customSurface(scenario,Boundary=bnds, ... CrossPolarization='symmetric',Shh=Shh,Svv=Svv,Shv=Shv);
Collect I/Q Data
Create a vertically polarized radar I/Q sensor and collect data.
% Create a vertically polarized radar IQ sensor and attach to % a platform freq = 500e6; sweepBW = 5e6; fs = 2*sweepBW; wav = phased.LinearFMWaveform(SampleRate=fs, ... SweepBandwidth=sweepBW); rdr = radarTransceiver(Waveform=wav, ... MountingAngles=[-90 10 0], ... RangeLimits=[0 1.2e3]); element = phased.ShortDipoleAntennaElement; ula = phased.ULA(Element=element); configureAntennas(rdr,Combined=ula); rdr.TransmitAntenna.OperatingFrequency = freq; rdr.ReceiveAntenna.OperatingFrequency = freq; rdr.Receiver.SampleRate = fs; rdrplat = platform(scenario,Position=[0 0 10],Sensors=rdr); % Create clutter generator cluttergen = clutterGenerator(scenario,rdr,Resolution=30, ... RangeLimit=1.2e3); % Advance scenario and collect IQ advance(scenario); iq = receive(scenario); % Pulse compress mf = getMatchedFilter(rdr.Waveform); rngresp = phased.RangeResponse(SampleRate=fs); [iqPC,rngGrid] = rngresp(iq{1}(:,1),mf); figure nexttile plot(rngGrid,mag2db(abs(iqPC))) title(['Pulse 1, Element 1' newline 'Co-Polarized Surface']) xlabel('Range (m)') ylabel('Magnitude (dB)') grid on axis tight ylim([-80 60])

Update Scattering Matrix Values
Update scattering matrix values for HH and VV components to make the surface cross-polarized and collect I/Q data.
% Update scattering matrix values for HH and VV components. % Make the surface cross-polarized. Shh = ones(40,40,2); Svv = zeros(40,40,2); updateScatteringMatrix(srf,Shh=Shh,Svv=Svv) % Collect IQ iq = receive(scenario); [iqPC,rngGrid] = rngresp(iq{1}(:,1),mf); nexttile plot(rngGrid,mag2db(abs(iqPC))) title(['Pulse 2, Element 1' newline ... 'Cross-Polarized Surface']) xlabel('Range (m)') ylabel('Magnitude (dB)') grid on axis tight ylim([-80 60])

Version History
Introduced in R2024a
See Also
customSurface | SurfaceManager | radarScenario | landSurface | seaSurface | clutterGenerator
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)