# p681LMSChannel

Filter input signal through ITU-R P.681 LMS frequency-flat fading channel

*Since R2022a*

## Description

The `p681LMSChannel`

System object™ filters a real or complex input signal through a frequency-flat fading land
mobile-satellite (LMS) communication channel, as defined in these recommendations.

For details, refer to More About.

To filter an input signal through a P.681-11 LMS time-varying channel:

Create the

`p681LMSChannel`

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 default
ITU-R P.681-11 LMS frequency-flat fading channel System object.`chan`

= p681LMSChannel

The default System object has the environment set to an urban scenario, with carrier frequency of 2.2 GHz and an elevation angle of 45 degrees. This object models a single geostationary satellite.

sets properties using one or more
name-value arguments. For example, `chan`

= p681LMSChannel(`Name`

=`Value`

)`SampleRate=20e3`

sets the input
signal sample rate to `20e3`

.

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

`NumStates`

— Number of channel states

`2`

(default) | `3`

*Since R2024b*

Number of channel states, specified as one of these values.

`2`

— Sets the channel as a two-state semi-Markov channel, as specified in the ITU-R P.681-11 specification.`3`

— Sets the channel as a three-state semi-Markov channel, as specified in the ITU-R P.681-7 specification.

**Data Types: **`double`

| `int8`

`SampleRate`

— Input signal sample rate

`7.68e6`

(default) | positive scalar

Input signal sample rate in hertz, specified as a positive scalar.

**Data Types: **`double`

`InitialState`

— Initial state of channel

`"Good"`

(default) | `"Moderate"`

| `"Bad"`

Initial state of the channel, specified as one of these values.

`"Good"`

`"Moderate"`

— Applicable only when NumStates is set to`3`

.`"Bad"`

When you set NumStates
property to `3`

, `"Good"`

refers to *State
A* or Clear Line-of-sight (LOS) conditions, `"Moderate"`

refers to *State B* or slightly shadowed conditions, and
`"Bad"`

refers to *State C* or fully blocked
conditions.

**Data Types: **`char`

| `string`

`CarrierFrequency`

— Carrier frequency

`2.2e9`

(default) | nonnegative scalar

Carrier frequency in hertz, specified as a nonnegative scalar.

**Data Types: **`double`

`ElevationAngle`

— Path elevation angle to geostationary satellite

`45`

(default) | scalar

Path elevation angle to a geostationary satellite in degrees, specified as a scalar. The nominal value is in the range [0, 90].

**Data Types: **`double`

`MobileSpeed `

— Speed of mobile terminal

`0.8333`

(default) | nonnegative scalar

Speed of mobile terminal in m/s, specified as a nonnegative scalar. The default
value of `0.8333`

m/s translates to 3 km/h.

This property affects the Doppler spread applied to the multipath component and also the Doppler shift applied to the direct path component.

**Note**

For a static channel, set `MobileSpeed`

and SatelliteDopplerShift properties to `0`

. In this case,
the Doppler spread is not applicable for the multipath component and the Doppler shift
is also not applied in direct path component of the channel.

Also, to generate a new channel realization for a static channel, either reset the
object by calling the `reset`

function or set
the `SatelliteDopplerShift`

property to a nonzero value.

**Data Types: **`double`

`AzimuthOrientation`

— Azimuth orientation

`0`

(default) | scalar

Azimuth orientation in degrees, specified as a scalar. This value specifies the direction of movement of the ground or mobile terminal. The nominal value is in the range [0, 360].

When you set this property to odd multiples of 90, the Doppler shift caused by the mobile movement in the direct path component is nonexistent.

**Data Types: **`double`

`SatelliteDopplerShift`

— Doppler shift due to satellite movement

`0`

(default) | scalar

*Since R2024a*

Doppler shift due to the satellite movement in hertz, specified as a scalar.

Satellite Doppler shift calculations account for the satellite altitude, satellite elevation angle, carrier frequency, and satellite velocity.

The default value of 0 Hz corresponds to the Doppler shift due to a satellite with an elevation angle of 90 degrees.

**Note**

For a static channel, set the MobileSpeed and `SatelliteDopplerShift`

properties to
`0`

. In static channels, the Doppler spread is not applicable for
the multipath component, and the Doppler shift does not apply to the direct path
component of the channel.

To generate a new channel realization for a static channel, either reset the
object by calling the `reset`

function, or set
the `SatelliteDopplerShift`

property to a nonzero value.

**Tunable: **Yes

**Data Types: **`double`

`Environment`

— Type of propagation environment

`"Urban"`

(default) | `"Suburban"`

| `"RuralWooded"`

| `"Village"`

| `"Residential"`

| `"Highway"`

| `"Rural"`

| `"Train"`

| `"Custom"`

Type of propagation environment, specified as one of these values.

`"Urban"`

`"Suburban"`

`"RuralWooded"`

`"Village"`

`"Residential"`

`"Highway"`

— Applicable only when you set the value of CarrierFrequency property in the range [10, 20] GHz`"Rural"`

— Applicable only when you set the value of CarrierFrequency property in the range [10, 20] GHz`"Train"`

— Applicable only when you set the value of CarrierFrequency property in the range [10, 20] GHz`"Custom"`

When you set this property to `"Custom"`

and NumStates
property to `2`

, configure the propagation environment using these properties.

#### Dependencies

To enable this property, set the NumStates
property to `2`

.

**Data Types: **`char`

| `string`

` StateDistribution `

— Parameters of state duration distribution

`[3.0639 2.9108; 1.6980 1.2602]`

for two-state
channel and `[log(0.88) log(1.73) log(2.62); log(0.61) 1.11 0.98]`

for
three-state channel (default) | 2-by-2 matrix | 2-by-3 matrix

Parameters of the state duration distribution in dB, specified as one of these values.

2-by-2 matrix — Applicable when you set the NumStates property to

`2`

and Environment property to`"Custom"`

.For example, if you specify the input as [

*muG*,*muB*;*sigmaG*,*sigmaB*], then:*muG*and*sigmaG*represent the mean and standard deviation of good state duration, respectively.*muB*and*sigmaB*represent the mean and standard deviation of bad state duration, respectively.

2-by-3 matrix— Applicable when you set the NumStates property to

`3`

.For example, if you specify the input as [

*beta*,*muM*,*muB*;*gamma*,*sigmaM*,*sigmaB*], then:*beta*and*gamma*define the parameters for the good state distribution. This channel uses the linear value of*beta*or*gamma*, which is,`exp`

(*beta*) or`exp`

(*gamma*), respectively.*muM*and*sigmaM*represent the mean and standard deviation of moderate state duration, respectively.*muB*and*sigmaB*represent the mean and standard deviation of bad state duration, respectively.

#### Dependencies

To enable this property, set either of these conditions.

Set the NumStates property to

`3`

.Set the NumStates property to

`2`

and Environment property to`"Custom"`

.

**Data Types: **`double`

`MinStateDuration `

— Minimum duration of each state

`[10 6]`

(default) | two-element row vector

Minimum duration of each state in meters, specified as a two-element row vector. The first element corresponds to good state and the second element corresponds to bad state.

#### Dependencies

To enable this property, set the NumStates
property to `2`

and Environment property to `"Custom"`

.

**Data Types: **`double`

`DirectPathDistribution`

— Parameters of direct path amplitude distribution

`[-1.8225 -15.4844; 1.1317 3.3245]`

for two-state
channel and `[-10; 3]`

for three-state channel (default) | 2-by-2 matrix | 2-by-1 vector

Parameters of direct path amplitude distribution in dB, specified as one of these values.

2-by-2 matrix — Applicable when you set the NumStates property to

`2`

and Environment property to`"Custom"`

.For example, if you specify the input as [

*muMaG*,*muMaB*;*sigmaMaG*,*sigmaMaB*], then:*muMaG*and*sigmaMaG*represent the mean of the direct path amplitude (*Ma*) and the standard deviation of*Ma*in good state, respectively.*muMaB*and*sigmaMaB*represent the mean and standard deviation of*Ma*in bad state, respectively.

2-by-1 vector — Applicable when you set the NumStates property to

`3`

.For example, if you specify the input as [

*muMaM*;*sigmaMaM*], then*muMaM*and*sigmaMaM*represent the mean and standard deviation of direct path amplitude in the moderate state, respectively.

#### Dependencies

To enable this property, set either of these conditions.

Set the NumStates property to

`3`

.Set the NumStates property to

`2`

and Environment property to`"Custom"`

.

**Data Types: **`double`

`MultipathPower`

— Mean multipath power in each state

`[-14 -15 -20]`

(default) | 1-by-3 vector

Mean multipath power of each state in dB, specified as a 1-by-3 vector.

For example, if you specify the input as [*Mg*,
*Mm*, *Mb*], then *Mg* represents
the mean multipath power in the good state, *Mm* represents the mean
multipath power in the moderate state, and *Mb* represents the mean
multipath power in the bad state.

#### Dependencies

To enable this property, set the NumStates
property to `3`

.

**Data Types: **`double`

`MultipathPowerCoefficients`

— Coefficients to compute multipath power

`[-0.0481 0.9434; -14.7450 -1.7555]`

(default) | 2-by-2 matrix

Coefficients to compute the multipath power, specified as a 2-by-2 matrix. For
example, if you specify the input as [*h1G*, *h1B*;
*h2G*, *h2B*], then:

*h1G*and*h2G*represent the coefficients in good state.*h1B*and*h2B*represent the coefficients in bad state.

#### Dependencies

To enable this property, set the NumStates
property to `2`

and Environment property to `"Custom"`

.

**Data Types: **`double`

`StandardDeviationCoefficients`

— Coefficients to compute standard deviation of direct path amplitude

`[-0.4643 -0.0798; 0.3334 2.8101]`

(default) | 2-by-2 matrix

Coefficients to compute standard deviation of direct path amplitude in all states,
specified as a 2-by-2 matrix. For example, if you specify the input as
[*g1G*, *g1B*; *g2G*,
*g2B*], then:

*g1G*and*g2G*represent the coefficients in good state.*g1B*and*g2B*represent the coefficients in bad state.

#### Dependencies

To enable this property, set the NumStates
property to `2`

and Environment property to `"Custom"`

.

**Data Types: **`double`

`DirectPathCorrelationDistance`

— Direct path amplitude correlation distance

`[1.7910 1.7910]`

for two-state channel and
`3.2293`

for three-state channel (default) | two-element row vector | scalar

Direct path amplitude correlation distance (*Lcorr*) in meters,
specified as one of these values.

Two-element row vector — Applicable when you set the NumStates property to

`2`

and Environment property to`"Custom"`

. The first element corresponds to good state and the second element corresponds to bad state.Scalar — Applicable when you set the NumStates property to

`3`

. The value represents*Lcorr*of moderate state.

#### Dependencies

To enable this property, set either of these conditions.

Set the NumStates property to

`3`

.Set the NumStates property to

`2`

and Environment property to`"Custom"`

.

**Data Types: **`double`

`TransitionLengthCoefficients`

— Coefficients to compute transition length

`[0.0744; 2.1423]`

(default) | two-element column vector

Coefficients to compute the transition length (*f1;f2*), specified
as a two-element column vector.

#### Dependencies

To enable this property, set the NumStates
property to `2`

and Environment property to `"Custom"`

.

**Data Types: **`double`

`StateProbabilityRange`

— Minimum and maximum probability of each state

`[0.05 0.1; 0.95 0.9]`

(default) | 2-by-2 matrix

Minimum and maximum probability of each state, specified as a 2-by-2 matrix. For
example, if you specify the input as [*pminG*,
*pminB*; *pmaxG*, *pmaxB*], then:

*pminG*and*pmaxG*represent the minimum and maximum values of state probability in good state.*pminB*and*pmaxB*represent the minimum and maximum values of state probability in bad state.

The minimum probability must be less than the maximum probability in a state. The value of each element must be in range [0, 1].

#### Dependencies

To enable this property, set the NumStates
property to `2`

and Environment property to `"Custom"`

.

**Data Types: **`double`

`StateTransitionMatrix`

— State transition probability matrix

`[ 0 1 0; 0.65 0 0.35; 0 1 0 ]`

(default) | 3-by-3 matrix

State transition probability matrix, specified as a 3-by-3 matrix.

For example, if you specify the matrix as [*Pgg*
*Pgm*
*Pgb*; *Pmg*
*Pmm*
*Pmb*; *Pbg*
*Pbm*
*Pbb*], then *P xy* represents the
probability of the next state as

*when the current state is*

*y**. In the matrix,*

*x**g*represents good state,

*m*represents moderate state, and

*b*represents bad state.

Elements in the matrix must be in the range [0, 1]. The sum of the elements in each row of the matrix must be equal to 1.

#### Dependencies

To enable this property, set the NumStates
property to `3`

.

**Data Types: **`double`

`ChannelFiltering`

— Channel filtering

`true`

or `1`

(default) | `false`

or `0`

Channel filtering, specified as one of these logical values.

`1`

(`true`

) — The object accepts an input signal and produces a filtered output signal, in addition to the channel path gains, sample times, and state series.`0`

(`false`

) — The object does not accept an input signal, produces no filtered output signal, and outputs only channel path gains, sample times, and state series. You must specify the duration of the fading process by using the NumSamples property, and the sampling rate by using the SampleRate property.

**Data Types: **`logical`

`NumSamples`

— Number of time samples

`7680`

(default) | nonnegative integer

Number of time samples used to set the duration of the fading process realization, specified as a nonnegative integer.

**Tunable: **Yes

#### Dependencies

To enable this property, set ChannelFiltering property to `false`

.

**Data Types: **`double`

`OutputDataType`

— Data type of outputs

`"double"`

(default) | `"single"`

Data type of outputs, specified as one of these values.

`"double"`

`"single"`

#### Dependencies

To enable this property, set ChannelFiltering property to `false`

.

**Data Types: **`char`

| `string`

`FadingTechnique`

— Channel model fading technique

`"Filtered Gaussian noise"`

(default) | `"Sum of sinusoids"`

Channel model fading technique, specified as `"Filtered Gaussian noise"`

or `"Sum of sinusoids"`

.

**Data Types: **`char`

| `string`

`NumSinusoids`

— Number of sinusoids used

`48`

(default) | positive integer

Number of sinusoids used to generate the Doppler fading samples, specified as a positive integer.

#### Dependencies

To enable this property, set the FadingTechnique property to ```
"Sum of
sinusoids"
```

.

**Data Types: **`double`

| `uint16`

`RandomStream`

— Source of random number stream

`"Global stream"`

(default) | `"mt19937ar with seed"`

Source of the random number stream, specified as `"Global stream"`

or `"mt19937ar with seed"`

.

When you specify

`"Global stream"`

, the object uses the current global random number stream for uniformly and normally distributed random number generation. In this case, the`reset`

object function resets only the filters.When you specify

`"mt19937ar with seed"`

, the object uses the mt19937ar algorithm for uniformly and normally distributed random number generation. In this case, the`reset`

object function resets the filters and reinitializes the random number stream to the value of the Seed property.

**Data Types: **`char`

| `string`

`Seed`

— Initial seed

`73`

(default) | nonnegative integer

Initial seed of the mt19937ar random number stream generator algorithm, specified as
a nonnegative integer. When you call the `reset`

object function, it reinitializes the mt19937ar random number stream
to the `Seed`

value.

#### Dependencies

To enable this property, set the RandomStream property to ```
"mt19937ar with
seed"
```

.

**Data Types: **`double`

| `uint32`

`Visualization`

— Channel visualization

`"Off"`

(default) | `"Impulse response"`

| `"Frequency response"`

| `"Impulse and frequency responses"`

| `"Doppler spectrum"`

Channel visualization, specified as one of these options.

`"Off"`

`"Impulse response"`

`"Frequency response"`

`"Impulse and frequency responses"`

`"Doppler spectrum"`

When you set this property to enable the visualization, selected channel characteristics are animated in separate figures, with each System object call.

For more information, see Channel Visualization.

**Data Types: **`char`

| `string`

## Usage

### Description

`[`

produces path gains, `pathgains`

,`sampletimes`

,`stateseries`

] = chan()`pathgains`

, sample times,
`sampletimes`

, and state series, `stateseries`

for
an ITU-R P.681 LMS flat fading channel.

In this case, the System object acts as a source of path gains, sample times, and state series.

Specify the duration of the fading process by using the NumSamples property. Specify the datatype of outputs using the OutputDataType property.

**Note**

This syntax is applicable when you set the ChannelFiltering property to `false`

.

`[`

filters the input signal, `y`

,`pathgains`

,`sampletimes`

,`stateseries`

] = chan(`x`

)`x`

, through an ITU-R P.681 LMS flat fading
channel, and returns the output channel-impaired signal in `y`

, in
addition to the outputs in the previous syntax.

**Note**

This syntax is applicable when you set the ChannelFiltering property to `true`

.

### Input Arguments

`x`

— Input signal

*N*_{S}-by-1 vector

_{S}

Input signal, specified as an *N _{S}*-by-1
vector, where

*N*is the number of input samples.

_{S}**Data Types: **`single`

| `double`

**Complex Number Support: **Yes

### Output Arguments

`y`

— Output signal

*N*_{S}-by-1 vector

_{S}

Output signal, returned as an *N _{S}*-by-1
vector of complex values with the same data precision and length as the input signal

`x`

.
*N*is the number of input samples.

_{S}**Data Types: **`single`

| `double`

**Complex Number Support: **Yes

`pathgains`

— Channel path gains of fading process

*N*_{S}-by-1 vector

_{S}

Channel path gains of fading process, returned as an
*N _{S}*-by-1 vector of complex values.

When you set the ChannelFiltering property to

`true`

,`pathgains`

is of the same data precision as the input signal`x`

, and*N*is the number of input samples._{S}When you set the ChannelFiltering property to

`false`

,`pathgains`

is of the same data precision as the OutputDataType property and*N*is equal to the NumSamples property._{S}

**Data Types: **`single`

| `double`

**Complex Number Support: **Yes

`sampletimes`

— Sample times of channel snapshots

*N*_{S}-by-1 vector

_{S}

Sample times of channel snapshots, returned as an
*N _{S}*-by-1 vector.

When you set the ChannelFiltering property to

`true`

,`sampletimes`

is of the same data precision as the input signal`x`

, and*N*is the number of input samples._{S}When you set the ChannelFiltering property to

`false`

,`sampletimes`

is of the same data precision as the OutputDataType property and*N*is equal to the NumSamples property._{S}

**Data Types: **`single`

| `double`

`stateseries`

— State series of channel

*N*_{S}-by-1 vector

_{S}

State series of the channel, returned as an
*N _{S}*-by-1 vector.

When you set the ChannelFiltering property to

`true`

,`stateseries`

is of the same data precision as the input signal`x`

, and*N*is the number of input samples._{S}When you set the ChannelFiltering property to

`false`

,`stateseries`

is of the same data precision as the OutputDataType property and*N*is equal to the NumSamples property._{S}

Each value of this vector describes the state in which channel is present for that channel snapshot.

When you set the NumStates property to

`2`

— A value of`0`

represents bad state. A value of`1`

represents good state. A value between 0 and 1 represents a state transition.When you set the NumStates property to

`3`

— A value of`0`

refers to bad state, value of`0.5`

refers to moderate state, and value of`1`

refers to good state. In a three-state channel, the transitions from one state to another state are abrupt, therefore, at any point of time the value of the state series can be`0`

,`0.5`

, or`1`

.

**Data Types: **`single`

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

### Specific to `p681LMSChannel`

`info` | Characteristic information about object |

## Examples

### Transmit Signal Through P.681-11 LMS Channel

**Create and Configure the Channel**

Create an ITU-R P.681-11 LMS channel and configure it for a suburban scenario with a carrier frequency of 20 GHz and an elevation angle of 50 degrees. Set the sample rate to 6000 kHz.

Specify the mobile terminal speed to 50 m/s, with an azimuth orientation of 20 degrees.

chan = p681LMSChannel; chan.SampleRate = 6e6; % Hz chan.CarrierFrequency = 20e9; % Hz chan.ElevationAngle = 50; % degrees chan.Environment = "Suburban"; chan.MobileSpeed = 50; % m/s chan.AzimuthOrientation = 20; % degrees

Display the channel characteristics.

disp(chan)

p681LMSChannel with properties: NumStates: 2 SampleRate: 6000000 InitialState: "Good" CarrierFrequency: 2.0000e+10 ElevationAngle: 50 MobileSpeed: 50 AzimuthOrientation: 20 SatelliteDopplerShift: 0 Environment: "Suburban" ChannelFiltering: true Use get to show all properties

**Transmit Input Signal Through Channel**

Set the random number generation seed as default.

`rng("default")`

Generate a random QPSK-modulated input signal.

```
numSamples = 6e6;
txWaveform = pskmod(randi([0 3],numSamples,1),4); % Modulation order = 4
```

Filter the signal through the channel.

[rxWaveform,pathGains,sampleTimes,stateSeries] = chan(txWaveform);

**Visualize Space Series and State Series**

Plot the space series as a function of time.

figure % Create figure window subplot(2,1,1) plot(sampleTimes,20*log10(abs(pathGains))) title("Space Series") xlabel("Time (in s)") ylabel("Path Gain (in dB)") grid on

Plot the state series as a function of time.

subplot(2,1,2) plot(sampleTimes,stateSeries) title("State Series") xlabel("Time (in s)") ylabel("State") grid on

### Plot Doppler Spectrum for P.681-7 LMS Channel

Define the channel configuration using a `p681LMSChannel`

System object and specify its properties.

Set the number of channel states to 3, visualization as Doppler spectrum, and disable the channel filtering.

chan = p681LMSChannel; chan.NumStates = 3; chan.SampleRate = 450000; % Hz chan.InitialState = "Moderate"; chan.CarrierFrequency = 11e9; % Hz chan.ElevationAngle = 50; % degrees chan.MobileSpeed = 20; % m/s chan.SatelliteDopplerShift = 25e2; % Hz chan.Visualization = "Doppler spectrum"; chan.ChannelFiltering = false; chan.NumSamples = 4e7;

Display the channel characteristics.

disp(chan)

p681LMSChannel with properties: NumStates: 3 SampleRate: 450000 InitialState: "Moderate" CarrierFrequency: 1.1000e+10 ElevationAngle: 50 MobileSpeed: 20 AzimuthOrientation: 0 SatelliteDopplerShift: 2500 StateDistribution: [2x3 double] DirectPathDistribution: [2x1 double] MultipathPower: [-14 -15 -20] DirectPathCorrelationDistance: 3.2293 StateTransitionMatrix: [3x3 double] ChannelFiltering: false NumSamples: 40000000 OutputDataType: "double" Use get to show all properties

Get the path gains, sample times, and state series of the channel. Also, observe the Doppler spectrum.

[pathGains,sampleTimes,stateSeries] = chan();

### Get P.681 LMS Channel Information

Get channel information from a `p681LMSChannel`

System object by using the `info`

object function.

Create an ITU-R P.681-11 LMS channel System object and specify its properties.

chan = p681LMSChannel; chan.SampleRate = 10e3; % Hz chan.MobileSpeed = 2; % m/s chan.Environment = "RuralWooded"; disp(chan)

p681LMSChannel with properties: NumStates: 2 SampleRate: 10000 InitialState: "Good" CarrierFrequency: 2.2000e+09 ElevationAngle: 45 MobileSpeed: 2 AzimuthOrientation: 0 SatelliteDopplerShift: 0 Environment: "RuralWooded" ChannelFiltering: true Use get to show all properties

QPSK-modulate a random input signal, and then pass it through the channel.

numSamples = 2e4; txWaveform = pskmod(randi([0 3],numSamples,1),4); [rxWaveform,pathGains,sampleTimes,stateSeries] = chan(txWaveform);

Get the characteristic information about the P.681-11 LMS channel.

info(chan)

`ans = `*struct with fields:*
PathDelays: 0
ChannelFilterDelay: 0
ChannelFilterCoefficients: 1
NumSamplesProcessed: 20000

Transmit another QPSK-modulated random input signal through the channel

numSamples2 = 3e4; txWaveform2 = pskmod(randi([0 3],numSamples2,1),4); [rxWaveform2,pathGains2,sampleTimes2,stateSeries2] = chan(txWaveform2);

Observe the change in number of samples processed.

info(chan)

`ans = `*struct with fields:*
PathDelays: 0
ChannelFilterDelay: 0
ChannelFilterCoefficients: 1
NumSamplesProcessed: 50000

## More About

### Doppler Phenomena

To calculate the Doppler spread and Doppler shift due to the movement of the mobile on Earth, refer to these formulas.

The maximum Doppler spread due to mobile movement is given by the following formula:

*F*= (_{mob_max_spread}*v**_{mob}*f*) /_{c}*c*where:

*v*is the speed of the mobile terminal on Earth in m/s, specified as the MobileSpeed property._{mob}*f*is the carrier frequency in Hz, specified by the CarrierFrequency property._{c}*c*is the speed of light in free space in m/s, specified as`physconst`

`('lightspeed')`

.

The Doppler shift due to mobile movement is given by the following formula:

*fd*=_{mob}*F**_{mob_max_spread}`cosd`

(*θ*) *`cosd`

(*φ*)where:

*F*is the maximum Doppler spread due to mobile movement._{mob_max_spread}*θ*is the path elevation angle to the satellite in degrees, specified by the ElevationAngle property.*φ*is the azimuth orientation in degrees, specified by the AzimuthOrientation property.

The sum of absolute value of SatelliteDopplerShift property and maximum Doppler shift caused by the mobile movement must be less than one-tenth of SampleRate property.

### Loo Time Series Generator

To estimate the performance of a LMS receiver, you must perform stochastic synthesis of realistic time series of the channel complex envelope. Use the semi-Markov enhanced 2-state model to simulate the LMS time-variations of the channel for a single geosynchronous satellite.

The figure shows a Loo time series generator which you can use to produce complex signal
variations. The parameters of the circuit update for the generations of time series in each
state. Inside a transition, the Loo parameters drawn for the `Good`

and
`Bad`

states around the transition are interpolated linearly in
dB.

The upper half of the block diagram generates the multipath fast variations. The lower half shows the direct signal slow variations.

Generate multipath fast variations — In the upper half of the block diagram, the two zero-mean and unit-standard deviation Gaussian series in quadrature are passed through a unit-energy Doppler filter. Fast variations are ruled by the Doppler spread mainly due to the motion of the mobile terminal. You can use a Jakes model to generate the fast variations. This expression defines the Jakes filter:

$$S(f)=\frac{K}{\pi {f}_{m}\sqrt{1-{(\frac{f}{{f}_{m}})}^{2}}}for$$ for -

*f*_{m}<*f*< +*f*_{m}*S(f)*= 0 for -*f*_{m}>*f*> +*f*_{m}After the Doppler spread, the resultant complex series is multiplied by σ, where 2σ

^{2}is the mean square value of the multipath variationsGenerate direct signal slow variations — The lower rail simulates the amplitude and phase variations of the direct signal. In the first step, generate a Gaussian distribution with mean

*M*(dB) and standard deviation_{A}*Σ*(dB). In the second step, the series, in dB units, is converted to linear units. In the third step, introduce the phase variations in the direct signal. These are assumed to be linearly varying giving rise to a constant Doppler spectral line that depends on the relative mobile-satellite velocity and the angle of arrival, azimuth and elevation, with respect to the mobile trajectory._{A}The direct signal's amplitude is subjected to variations slower than those due to multipath caused by shadowing. In this implementation, the rate of change of the slow variations is characterized by the DirectPathCorrelationDistance property value,

*Lcorr*. The sampling distance of the multipath being*v*, generate the correlated shadowing time series by using this numerical low pass filter:_{m}T_{s}$${H}_{A}(Z)=\frac{\sqrt{1-{p}_{s}^{2}}}{1-{p}_{s}^{}{z}^{-1}}$$, where

$${p}_{s}=\mathrm{exp}(\frac{-{v}_{m}{T}_{s}}{{L}_{corr}})$$

*v*is the speed of the mobile terminal, specified by the MobileSpeed property._{m}*T*is the sample time, given by 1/SampleRate property._{s}

Generate Doppler variations due to satellite movement — Multipath fast variations and direct signal slow variations combine to form a complex envelope due to scattering environment and mobile movement. The complex envelope introduces variations in signal due to satellite movement, thereby forming the channel output.

The block diagram show these variables for Doppler variations:

*f*denotes the maximum Doppler spread due to mobile movement and is given by the following formula:_{max}*f*=_{max}*F*= (_{mob_max_spread}*v**_{mob}*f*) /_{c}*c*where:

*v*is the speed of the mobile terminal on Earth in m/s, specified as the MobileSpeed property._{mob}*f*is the carrier frequency in Hz, specified by the CarrierFrequency property._{c}*c*is the speed of light in free space in m/s, specified as`physconst`

`('lightspeed')`

.

*f*is the Doppler shift due to mobile movement and is given by the following formula:_{D,direct}*f*=_{D,direct}*fd*=_{mob}*F**_{mob_max_spread}`cosd`

(*θ*) *`cosd`

(*φ*)where:

*F*is the maximum Doppler spread due to mobile movement._{mob_max_spread}*θ*is the path elevation angle to the satellite in degrees, specified by the ElevationAngle property.*φ*is the azimuth orientation in degrees, specified by the AzimuthOrientation property.

*f*is the Doppler shift due to satellite movement, specified by the SatelliteDopplerShift property._{D,sat}

## References

[1] ITU-R Recommendation P.681-11 (08/2019). “Propagation data required for the design systems in the land mobile-satellite service.” P Series; Radiowave propagation.

[2] ITU-R Recommendation P.681-7 (10/2009). “Propagation data required for the design of Earth-space land mobile telecommunication systems.” P Series; Radiowave propagation.

## Extended Capabilities

### C/C++ Code Generation

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

Usage notes and limitations:

Code generation is available only when the

`Visualization`

property is`"Off"`

.See System Objects in MATLAB Code Generation (MATLAB Coder).

## Version History

**Introduced in R2022a**

### R2024b: Support for three-state LMS channel

The `p681LMSChannel`

System object now supports the three-state LMS channel, as defined in the ITU-R
P.681-7.

### R2024a: Additional property — `SatelliteDopplerShift`

Use the `SatelliteDopplerShift`

property to specify the Doppler shift
due to the satellite movement in hertz.

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