# surfaceReflectivityCustom

## Description

Normalized reflectivity is the radar cross-section of a unit area of a general surface.
Multiplying by the total area of the surface or the illuminated area of a surface gives the
total radar cross-section. Normalized reflectivity is also referred to as surface
σ^{0} and is a function of frequency and grazing angle.

To compute the normalized reflectivity:

Create the

`surfaceReflectivityCustom`

object and set its properties.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

creates a
normalized reflectivity System object™
`refl`

= surfaceReflectivityCustom`refl`

for a custom surface with default reflectivities. The default
custom surface has reflectivity set to 1 m²/m² for grazing angles from 0° – 90° for
frequencies from 0 – 1e20 Hz.

also creates a normalized reflectivity object for a surface with the specified property
`refl`

= surfaceReflectivityCustom(`Name=Value`

)`Name`

set to the specified `Value`

. You can
specify additional name-value pair arguments in any order as
(`Name1=Value1`

, ..., `NameN=ValueN`

).

**Example: **```
refl = surfaceReflectivityCustom(Reflectivity = nrcsTable,Frequency =
(0:10)*1e9,GrazingAngle = (0:0.001:2))
```

creates a custom normalized
reflectivity object from a table of reflectivity values `nrcsTable`

for
frequencies from 0 – 10 GHz and grazing angles from 0° – 2°.

## Properties

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.

`EnablePolarization`

— Enable polarization

`false`

(default) | `true`

Enable polarization, specified as `false`

or `true`

.

When

`true`

, the System object enables the specification of cross-polarization components to help form a complete polarimetric normalized radar cross-section (NRCS) reflectivity matrix*σ*of the form^{0}$${\sigma}^{0}=\left[\begin{array}{cc}{\sigma}_{HH}^{0}& {\sigma}_{HV}^{0}\\ {\sigma}_{VH}^{0}& {\sigma}_{VV}^{0}\end{array}\right]$$

where

*σ*^{0}_{HV}and*σ*^{0}_{VH}are the cross-polarization components specified by the`ReflectivityHV`

and`ReflectivityVH`

properties, respectively. The remaining components,*σ*^{0}_{HH}and*σ*^{0}_{VV}, are determined by the particular model set by the`Model`

property.When

`false`

, the System object lets you specify the mean polarization using the`Polarization`

property based on the selected`Model`

.

`CrossPolarization`

— Cross-polarization components

`'Full'`

(default) | `'Symmetric'`

Cross-polarization components, specified as `'Full'`

or
`'Symmetric'`

.

When the

`CrossPolarization`

property is set to`'Full'`

, the`ReflectivityHH`

,`ReflectivityVV`

,`ReflectivityHV`

and`ReflectivityVH`

properties are applicable, and unique speckle values are generated for all reflectivity components (*S*,_{HH}*S*,_{HV}*S*, and_{VH}*S*)._{VV}When the

`CrossPolarization`

property is set to`'Symmetric'`

, reciprocity applies for monostatic geometry and the cross-polarization terms are equal,*S*. When this input method is selected, the_{HV}= S_{VH}`ReflectivityHV`

property is available, but the`ReflectivityVH`

property is not available. The`ReflectivityVH`

property is assumed to be equal to the`ReflectivityHV`

property. The speckle values corresponding to the*HV*and*VH*components are equal.

#### Dependencies

To enable this property, set the `EnablePolarization`

property
to `true`

.

**Data Types: **`char`

| `string`

`Reflectivity`

— Normalized radar cross section

`ones(91,2)`

(default) | *Q*-by-*R* real-valued matrix | *Q*-by-*R*-by-*P* real-valued
array

Normalized radar cross section (NRCS) or reflectivity values, specified as an
*Q*-by-*R* real-valued matrix. where
*Q* corresponds to the number of angles set in the
`GrazingAngle`

property and *R* corresponds to the
number of frequencies set in the `Frequency`

property.

For more than one surface, you can specify an
*Q*-by-*R*-by-*P* real-valued array
where *P* corresponds to the surface type index.

Units are dimensionless but often expressed in m²/m².

#### Dependencies

To enable this property, set the `EnablePolarization`

property
to `false`

.

**Data Types: **`double`

`ReflectivityHH`

— HH normalized radar cross section

`zeros(91,2)`

(default) | *Q*-by-*R* real-valued matrix | *Q*-by-*R*-by-*P* real-valued
array

Normalized radar cross section (NRCS), for the polarized
*S _{HH}* component, Specified as a

*Q*-by-

*R*real-valued matrix or

*Q*-by-

*R*-by-

*P*real-valued array. The subscript

*HH*represents horizontal transmission and horizontal reception.

*Q*corresponds to the number of angles in either the

`GrazingAngle`

or `DepressionAngle`

property.
*R*corresponds to the number of frequencies in the

`Frequency`

property. Units are m²/m².For more than one surface, you can specify an
*Q*-by-*R*-by-*P* real-valued array
where *P* corresponds to the surface type index.

The full, real reflectivity matrix in this case is given by
`Reflectivity`

= [`ReflectivityHH`

,
`ReflectivityHV`

; `ReflectivityVH`

,
`ReflectivityVV`

];

#### Dependencies

To enable this property, set the `EnablePolarization`

property
to `true`

.

**Data Types: **`double`

`ReflectivityVV`

— VV normalized radar cross section

`zeros(91,2)`

(default) | *Q*-by-*R* real-valued matrix | *Q*-by-*R*-by-*P* real-valued
array

Normalized radar cross section (NRCS), for the polarized
*S _{VV}* component, Specified as a

*Q*-by-

*R*real-valued matrix or

*Q*-by-

*R*-by-

*P*real-valued array. The subscript

*VV*represents vertical transmission and vertical reception.

*Q*corresponds to the number of angles in either the

`GrazingAngle`

or `DepressionAngle`

property.
*R*corresponds to the number of frequencies in the

`Frequency`

property. Units are m²/m².For more than one surface, you can specify an
*Q*-by-*R*-by-*P* real-valued array
where *P* corresponds to the surface type index.

The full, real reflectivity matrix in this case is given by
`Reflectivity`

= [`ReflectivityHH`

,
`ReflectivityHV`

; `ReflectivityVH`

,
`ReflectivityVV`

];

#### Dependencies

To enable this property, set the `EnablePolarization`

property
to `true`

.

**Data Types: **`double`

`ReflectivityHV`

— HV normalized radar cross section

`zeros(91,2)`

(default) | *Q*-by-*R* real-valued matrix | *Q*-by-*R*-by-*P* real-valued
array

Normalized radar cross section (NRCS), for the polarized
*S _{HV}* component, specified as a

*Q*-by-

*R*real-valued matrix or

*Q*-by-

*R*-by-

*P*real-valued array. The subscript

*HV*represents horizontal transmission and vertical reception.

*Q*corresponds to the number of angles in either the

`GrazingAngle`

or `DepressionAngle`

property.
*R*corresponds to the number of frequencies in the

`Frequency`

property. Units are m²/m².*Q*-by-*R*-by-*P* real-valued array
where *P* corresponds to the surface type index.

The full, real reflectivity matrix in this case is given by
`Reflectivity`

= [`ReflectivityHH`

,
`ReflectivityHV`

; `ReflectivityVH`

,
`ReflectivityVV`

];

#### Dependencies

To enable this property, set the `EnablePolarization`

property
to `true`

.

**Data Types: **`double`

`ReflectivityVH`

— VH normalized radar cross section

`zeros(91,2)`

(default) | *Q*-by-*R* real-valued matrix | *Q*-by-*R*-by-*P* real-valued
array

Normalized radar cross section (NRCS), for the polarized
*S _{VH}* component, Specified as a

*Q*-by-

*R*real-valued matrix or

*Q*-by-

*R*-by-

*P*real-valued array. The subscript

*VH*represents vertical transmission and horizontal reception.

*Q*corresponds to the number of angles in either the

`GrazingAngle`

or `DepressionAngle`

property.
*R*corresponds to the number of frequencies in the

`Frequency`

property. Units are m²/m².`Frequency`

— Valid frequencies

`[0 1e20]`

(default) | length-*R* row-vector of real values

Valid frequencies for the normalized reflectivity, specified as a
length-*R* row-vector of real values. *R*
corresponds to the number of rows in the `Reflectivity`

property.
Frequency units are in Hz.

**Data Types: **`double`

`GrazingAngle`

— Grazing angles

`0:90`

(default) | length-*Q* row-vector of real values

Grazing angles, specified as a length-*Q* row-vector of real
values. *Q* corresponds to the number of columns in the
`Reflectivity`

property. Units are in degrees.

**Data Types: **`double`

`Speckle`

— Speckle distribution type

`'None'`

(default) | `'Lognormal'`

| `'Rayleigh'`

| `'Weibull'`

Speckle distribution type, specified as `'None'`

,
`'Lognormal'`

, `'Rayleigh'`

, or
`'Weibull'`

. Speckle is a multiplicative factor used to make
clutter data appear noisier and is especially applicable to imaging applications.

Speckle is correlated with clutter RCS and is applied as *I* =
*σ*n*, where *σ* represents the clutter RCS and
*n* represents random numbers, which are often drawn from an
independent identically-distributed unity mean noise statistical distribution.

`None`

– No speckle is applied.`Lognormal`

– Speckle has a lognormal distribution. Define the distribution using the`SpeckleMean`

and`SpeckleStandardDeviation`

properties. Default values of these properties create speckle with a normalized mean lognormal distribution.`Rayleigh`

– Speckle has a Rayleigh distribution. Define the distribution using the`SpeckleScale`

property. The default value of this property creates speckle with a unit mean Rayleigh distribution.`Weibull`

– Speckle has a Weibull distribution. Define the distribution using the`SpeckleScale`

and`SpeckleShape`

properties. The default values of these properties create speckle with a unit mean Rayleigh distribution.

**Data Types: **`char`

| `string`

`SpeckleMean`

— Mean of value of lognormal-distributed speckle

`-0.5*log(2)`

(default) | scalar

Mean value of lognormal-distributed speckle, specified as a scalar.

#### Dependencies

To enable this property, set the
`Speckle`

property to
`'Lognormal'`

.

**Data Types: **`double`

`SpeckleStandardDeviation`

— Standard deviation of lognormal-distributed speckle

`sqrt(log(2))`

(default) | non-negative scalar

Standard deviation of lognormal-distributed speckle, specified as a non-negative scalar.

#### Dependencies

To enable this property, set the
`Speckle`

property to
`'Lognormal'`

.

**Data Types: **`double`

`SpeckleScale`

— Scale parameter for Weibull and Rayleigh speckle distribution

`sqrt(4/π)`

(default) | non-negative scalar

Scale parameter for speckle for the Rayleigh and Weibull distributions, specified as a positive scalar.

#### Dependencies

To enable this property, set the `Speckle`

property to `'Rayleigh'`

or `'Weibull'`

.

**Data Types: **`double`

`SpeckleShape`

— Shape value for Weibull distribution

`2`

(default) | positive scalar

Shape value for the Weibull speckle distribution, specified as a positive scalar.

#### Dependencies

To enable this property, set the `Speckle`

property to
`'Weibull'`

.

**Data Types: **`double`

## Usage

### Description

also specifies the surface type index `nrcs`

= refl(`graz`

,`freq`

,`idx`

)`idx`

of the surface patch. To
enable this syntax, specify the `Reflectivity`

property as an
*M*-by-*N*-by-*P* array, where
*M* corresponds to the number of angles specified in the
`GrazingAngle`

property, *N* corresponds to the
number of frequencies in the `Frequency`

property, and
*P* corresponds to the surface type index. MATLAB^{®} array.

### Input Arguments

`graz`

— Grazing angle

nonnegative scalar | *M*-length vector of nonnegative values

Grazing angle of the surface relative to the radar, specified as a scalar or a
*M*-length row vector of nonnegative values. The angles range from
0° to 90°. Units are in degrees.

**Example: **`10`

`freq`

— Transmitted frequencies

`10e9`

(default) | positive scalar | *N*-length vector of positive values

Transmitted frequencies, specified as a positive scalar or
*N*-length vector of positive values. Units are in Hz.

**Example: **`7*10e9`

`idx`

— Surface type index

scalar | length-*p* vector of positive values

Surface type index, specified as a scalar or length-*P* vector of
positive values.

**Data Types: **`double`

### Output Arguments

`nrcs`

— Normalized surface reflectivity

real-valued *Q*-by-*R* matrix | real-valued 2-by-2-by-*Q*-by-*R* array

Normalized surface reflectivity , returned as a real-valued
*Q*-by-*R* matrix or a real-valued
2-by-2-*Q*-by-*R* array. *Q* is
the length of the grazing angle `graz`

or, for land surfaces only,
depression angle. *R* is the length of the frequency vector
`freq`

. `nrcs`

is dimensionless but often
expressed as m²/m². Normalized reflectivity is also called normalized radar cross
section (NRCS).

For the non-polarimetric reflectivity case,

`nrcs`

is returned as a real-valued*Q*-by-*R*matrix.For the polarimetric reflectivity case,

`nrcs`

is returned as a real-valued 2-b-2-by*Q*-by-*R*array. For each value of*Q*and*R*,`NRCS`

forms a polarimetric normalized radar cross-section (NRCS) reflectivity matrix*s*of the form$${\sigma}^{0}=\left[\begin{array}{cc}{\sigma}_{HH}^{0}& {\sigma}_{HV}^{0}\\ {\sigma}_{VH}^{0}& {\sigma}_{VV}^{0}\end{array}\right]$$

where

*S*and_{HV}*S*are the cross-polarization components specified by the_{VH}`ReflectivityHV`

and`ReflectivityVH`

properties. The*σ*and^{0}_{HH}*σ*components are derived from the specified model as set by the^{0}_{VV}`Model`

property

The returned normalized reflectivity for cross-polarization components
*σ ^{0}_{HV}* and

*σ*is calculated using nearest neighbor interpolation at a given grazing angle and frequency. To avoid interpolation errors, the normalized reflectivity values in the

^{0}_{VH}`ReflectivityHV`

and `ReflectivityVH`

properties should cover grazing angles from 0–90 degrees and all expected
frequencies.#### Dependencies

To enable the polarimetric reflectivity, set the
`EnablePolarization`

to `true`

.

`speck`

— Multiplicative speckle values

length-*N* vector of real values

Multiplicative speckle, returned as an *N*-length real-valued
vector where *N* is the length of the frequency vector in
`freq`

.

**Data Types: **`double`

## 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)

## Examples

### Compute Custom Normalized Reflectivity as Standalone Function

Construct a table of normalized reflectivities of a land surface using the `surfacegamma`

function. The table covers frequencies from 1 - 10 GHz and grazing angles from 0 - 7 degrees. Use the `surfaceReflectivityCustom`

System object™ directly.

freqs = (1:10)*1e9; angs = 0:.1:7; gammaFarm = db2pow(surfacegamma('farmland',freqs)); gammaHills = db2pow(surfacegamma('wooded hill',freqs));

Create a constant gamma model by multiplying the reflectivity coefficients by the sine of the grazing angle. Add Rayleigh speckle.

nrcsTbl = zeros(numel(angs),numel(freqs),2); nrcsTbl(:,:,1) = gammaFarm.*sind(angs).'; % Farmland nrcsTbl(:,:,2) = gammaHills.*sind(angs).'; % Wooded hills refl = surfaceReflectivityCustom(Reflectivity = nrcsTbl, Frequency = freqs, ... GrazingAngle = angs, Speckle = 'Rayleigh');

Find the normalized reflectivity of farm land (in dB).

nrcs = pow2db(refl(6.3, 2.5e9, 1)); disp(nrcs)

-27.2110

Find the normalized reflectivity of wooded hills (in dB).

nrcs = pow2db(refl(6.3, 2.5e9, 2)); disp(nrcs)

-22.2110

### Create Custom Surface in Radar Scenario

Create a land reflectivity model using the `surfaceReflectivityCustom`

object and `radarScenario`

.

First create a two hill scenario.

```
[x,y] = meshgrid(linspace(-100,100,201));
ht1 = 40*exp(-(x.^2 + y.^2)/30^2);
ht2 = 100*exp(-((x-60).^2 + y.^2)/25^2);
ht = ht1 + ht2;
p = surfc(x(1,:),y(:,1),ht);
shading interp
```

Construct a table of normalized reflectivities of a land surface using the `surfacegamma`

function. The table covers frequencies from 1 - 10 GHz and grazing angles from 0 - 7 degrees.

freqs = (1:10)*1e9; angs = 0:.1:7; gammaFarm = db2pow(surfacegamma('farmland',freqs)); gammaHills = db2pow(surfacegamma('wooded hill',freqs));

Create a constant gamma model by multiplying the reflectivity coefficients by the sine of the grazing angle. Add Rayleigh speckle.

nrcsTbl = zeros(numel(angs),numel(freqs),2); nrcsTbl(:,:,1) = gammaFarm.*sind(angs).'; % Farmland nrcsTbl(:,:,2) = gammaHills.*sind(angs).'; % Wooded hills simTime = 3; scene = radarScenario(UpdateRate = 1, ... IsEarthCentered = false,StopTime = simTime); refl = surfaceReflectivityCustom(Reflectivity = nrcsTbl, Frequency = freqs, ... GrazingAngle = angs, Speckle = 'Rayleigh'); srf = landSurface(scene,RadarReflectivity = refl, ... Terrain = ht,Boundary = [-100,100;-100,100]);

Find the normalized reflectivity of farm land (in dB).

nrcs = pow2db(refl(6.3, 2.5e9, 1)); disp(nrcs)

-27.2110

Find the normalized reflectivity of wooded hills (in dB).

nrcs = pow2db(refl(6.3, 2.5e9, 2)); disp(nrcs)

-22.2110

### Display Custom Reflectivity Matrix

Construct a table of normalized polarized reflectivities of a land surface using the `surfacegamma`

function. The table covers frequencies from 1 - 10 GHz and grazing angles from 0 - 90 degrees. Create a constant gamma model by multiplying the reflectivity coefficients by the sine of the grazing angle. Add Rayleigh speckle. Define the reflectivities for the *VV*, *HV*, and *VH* components as proportional to the *HH* component.

```
freqs = (1:10)*1e9;
angs = 0:.1:90;
gamma = db2pow(surfacegamma('farmland',freqs));
xhh = sind(angs)'*gamma;
xvv = 0.5*sind(angs)'*gamma;
xhv = 0.1*sind(angs)'*gamma;
xvh = 0.12*sind(angs)'*gamma;
```

Create the `surfaceReflectivityCustom`

System object™.

refl = surfaceReflectivityCustom(Frequency=freqs, ... GrazingAngle=angs,Speckle='Rayleigh',EnablePolarization=true, ... CrossPolarization='Full',ReflectivityHH=xhh,ReflectivityVV=xvv, ... ReflectivityHV=xhv,ReflectivityVH=xvh);

Plot the normalized reflectivity of farm land for all grazing angles..

nrcs = refl(angs,3e9); plot(angs,pow2db(squeeze(nrcs(1,1,:))), ... angs,pow2db(squeeze(nrcs(1,2,:))), ... angs,pow2db(squeeze(nrcs(2,1,:))), ... angs,pow2db(squeeze(nrcs(2,2,:)))) grid on xlabel('Grazing angle (deg)') ylabel('NRCS (dB m^2/m^2)') title('Polarized Surface Reflectivity')

## More About

### Speckle Model

Speckle is modeled as an uncorrelated, multiplicative factor *I = σ∙n*,
where *σ* represents the clutter RCS and *n* are
independent identically distributed (IDD) mean noise samples with unity mean. Because
speckle is correlated with underlying terrain RCS, it is usually applied to radar intensity.
The speckle noise models include Weibull, Rayleigh, and lognormal.

## Extended Capabilities

### C/C++ Code Generation

Generate C and C++ code using MATLAB® Coder™.

## Version History

**Introduced in R2022a**

## Open Example

You have a modified version of this example. Do you want to open this example with your edits?

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

# Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- 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)