# SeaSurface

## Description

`SeaSurface`

defines a sea surface object belonging to a `radarScenario`

. The
object describes the size, surface reflectivity, motion, and wind speed of the surface. You
can use the `SeaSurface`

object to determine sea heights in a scenario and
surface reflectivity, test for occlusion along the line-of-sight between two points in the
scenario and give surface height at a point.

## Creation

Create `SeaSurface`

objects using the `seaSurface`

object
function of the `radarScenario`

object.

## Properties

`SpectralModel`

— Sea surface omnidirectional motion spectrum

`seaSpectrum`

object

Sea surface omnidirectional motion spectrum, specified as a `seaSpectrum`

object. This object models surface heights over time.

#### Dependencies

To enable this property, set the `radarScenario`

property
`IsEarthCentered`

to `false`

.

`Boundary`

— Bounding rectangle of surface

`[-Inf Inf; -Inf Inf]`

(default) | 2-by-2 matrix of real values

Bounding rectangle of the surface, specified as a 2-by-2 matrix of real values. The bounding rectangle is defined by two two-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 [`MinX`

,`MaxX`

,`MinY`

`MaxY`

], as Cartesian coordinates in the reference frame of the scenario, where`MinX`

<`MaxX`

, and`MinY`

<`MaxY`

.`true`

— Scenario coordinates are geodetic. Specify the bounding rectangle as [`StartLat`

,`EndLat`

,`StartLon`

`EndLon`

] where`StartLat`

and`EndLat`

are the minimum and maximum latitudes of the geodetic frames.`StartLat`

and`EndLat`

must lie in the interval [–90,90] where`StartLat`

<`EndLat`

.Specify

`StartLon`

and`EndLon`

as the minimum and maximum longitudes of the geodetic frame.`StartLon`

and`EndLon`

must lie in the interval [–180,180]. If`EndLon`

<`StartLon`

, the object wraps`EndLon`

to`StartLon`

+`360°`

. Units are in degrees.

**Data Types: **`double`

`RadarReflectivity`

— Radar reflectivity object of surface

`surfaceReflectivitySea`

object (default) | `surfaceReflectivityCustom`

object

Radar reflectivity object of surface, specified as a `surfaceReflectivitySea`

or `surfaceReflectivityCustom`

for the normalized radar cross section (NRCS) of
the surface. The default object is a `surfaceReflectivitySea`

object with default properties.

`ReflectivityMap`

— Map of reflectivity type indices over the surface

1 (default) | scalar | real-valued matrix

This property contains a grid of reflectivity type values corresponding to vertices of the
surface height data. If any terrain or a spectral model is present,
`ReflectivityMap`

must be a matrix of the same size as the domain
of that data. Otherwise it must be scalar. Each element is an index into the third
dimension of the `Reflectivity`

property of the `surfaceReflectivityCustom`

object.

#### Dependencies

To enable this property, set the `RadarReflectivity`

property to a `surfaceReflectivityCustom`

object.

**Data Types: **`double`

`ReflectionCoefficient`

— Surface reflection coefficient model or value

seawater model (default) | `SurfaceReflectionCoefficient`

object | finite scalar

Surface reflection coefficient for use in multipath calculations, specified either as
a `SurfaceReflectionCoefficient`

object that defines the reflectivity
model or as scalar with a value between -1 and 1. The default value is a `SurfaceReflectionCoefficient`

object containing the `earthSurfacePermittivity`

function model of the relative permittivity and
conductivity for sea water that has a smooth surface (no waves). Note, by default, the
`reflectionCoefficient`

object function is called internally on the
`SurfaceReflectionCoefficient`

object to calculate the cumulative reflection
coefficient value during multipath modeling if the `EnableMultipath`

property is set to `true`

in `SurfaceManager`

.

**Complex Number Support: **Yes

`ReferenceHeight`

— Surface reference height

0 (default) | scalar

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`

`WindSpeed`

— Wind speed

10 (default) | nonnegative scalar

Wind speed over sea surface, specified as a nonnegative scalar. Wind speed is defined at a height of 10 meters from the water surface. Wind speed is used as a parameter for the associated spectral model. Units are m/s.

**Data Types: **`double`

`WindDirection`

— Wind direction

0 (default) | scalar

Wind direction over the sea surface, specified as a scalar in the range 0° to 180°.
A standard right-handed Cartesian coordinate system is used. When the
`IsEarthCentered`

property of `radarScenario`

is
`true`

, wind direction is a positive angle defined counterclockwise
from the positive *x*-axis. Otherwise, wind direction is defined as
clockwise from the North direction. This property is used to determine surface
reflectivity and is used as a parameter for the associated spectral model. Units are in
degrees.

**Data Types: **`double`

`Fetch`

— Wave fetch

`Inf`

(default) | positive scalar

Fetch, specified as a positive scalar. Fetch is the distance over a sea surface in which the wind blows in a single direction without obstruction. The fetch is used as a parameter for the associated spectral model. Units are in meters.

**Data Types: **`double`

## Object Functions

`height` | Height of point on surface |

`occlusion` | Test for occlusion of point by a surface |

`plotReflectivityMap` | Plots reflectivity map |

## Examples

### Find Height of Sea Surface

Create a square sea surface area using the `seaSurface`

object. Assume a moderate sea state with a wind speed of about 10 m/s, a fetch of 250 km and a length of 1.0 km. Add an Elfouhaily spectrum to the sea surface. Use the height function to determine the heights of 2 points on the map.

Create a radar scenario.

```
scene = radarScenario(IsEarthCentered = false);
rng('default')
```

Add a sea surface to the scene with an Elfouhaily spectrum.

```
spec = seaSpectrum(Resolution = 20);
srf = seaSurface(scene,Boundary = [-500 500; -500 500], ...
WindSpeed = 10,Fetch = 250000,SpectralModel = spec);
```

Find the height at two points.

P1 = [0;0]; P2 = [30;-70]; H = height(srf,[P1 P2])

`H = `*1×2*
-0.9394 -0.2682

Display the sea surface properties in the surface manager.

mgr = scene.SurfaceManager

mgr = SurfaceManager with properties: EnableMultipath: 0 UseOcclusion: 1 Surfaces: [1x1 radar.scenario.SeaSurface]

mgr.Surfaces

ans = SeaSurface with properties: WindSpeed: 10 WindDirection: 0 Fetch: 250000 SpectralModel: [1x1 seaSpectrum] RadarReflectivity: [1x1 surfaceReflectivitySea] ReflectionCoefficient: [1x1 radar.scenario.SurfaceReflectionCoefficient] ReflectivityMap: 1 ReferenceHeight: 0 Boundary: [2x2 double]

### Test for Occlusion Between Two Points on Sea Surface

Create a square sea surface assuming a moderate sea state with a wind speed of about 12 knots (6.17 m/s), a fetch of 120 nmi (222.24 km), and a length of 1.024 km. Add an Elfouhaily spectrum to the sea surface. Use the `occlusion`

object function to determine if the path from point 1 to point 2 is occluded.

Start by creating a radar scenario;

scene = radarScenario;

Add a sea surface with an Elfouhaily spectrum.

rng('default'); spec = seaSpectrum('Resolution',16);

Create the sea surface.

bnds = [0 1024; 0 1024]; srf = seaSurface(scene,'Boundary',bnds, ... 'WindSpeed',6.17,'Fetch',222.24e3, ... 'SpectralModel',spec);

Set two points for testing occlusion.

p1 = [1016; 368; -0.082]; p2 = [10; 100; 0.13];

Determine if the path from p1 to p2 is occluded

tf1 = occlusion(srf,p1,p2)

`tf1 = `*logical*
1

### Create Surface from Sea Spectrum

Create a 1024-by-1024 m square sea surface. Assume an NRL reflectivity model for a high sea state 6 with a wind speed of about 20 m/s and a fetch of 250 km. Set `UseOcclusion`

in the `SurfaceManager`

to `false`

.

Create a radar scenario.

scene = radarScenario;

Model the reflectivity using the NRL model.

refl = surfaceReflectivitySea(Model = 'NRL',SeaState = 6, ... Polarization = 'V')

refl = surfaceReflectivitySea with properties: EnablePolarization: 0 Model: 'NRL' SeaState: 6 Polarization: 'V' Speckle: 'None'

rng(2033) spec = seaSpectrum(Resolution = 2); bnds = [0 1024; 0 1024]; srf = seaSurface(scene,Boundary = bnds, ... WindSpeed = 20,Fetch = 250e3, ... SpectralModel = spec); mgr = scene.SurfaceManager; mgr.UseOcclusion = false

mgr = SurfaceManager with properties: EnableMultipath: 0 UseOcclusion: 0 Surfaces: [1x1 radar.scenario.SeaSurface]

x = linspace(srf.Boundary(1,1),srf.Boundary(1,2),1000); y = linspace(srf.Boundary(2,1),srf.Boundary(2,2),1000); [X,Y] = meshgrid(x,y); X1 = X(:)'; Y1 = Y(:)'; hts = height(srf,[Y1;X1]); hts = reshape(hts,length(x),length(y)); surf(x,y,hts) axis equal shading interp ylabel('X (m)') xlabel('Y (m)') zlabel('Height (m)')

## Version History

**Introduced in R2022a**

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