Send signal through TDL channel model

The `nrTDLChannel`

System
object™ sends an input signal through a tapped delay line (TDL) multi-input multi-output
(MIMO) link-level fading channel to obtain the channel-impaired signal. The object implements
the following aspects of TR 38.901 [1]:

Section 7.7.2: TDL models

Section 7.7.3: Scaling of delays

Section 7.7.5.2 TDL extension: Applying a correlation matrix

Section 7.7.6: K-factor for LOS channel models

To send a signal through the TDL MIMO channel model:

Create the

`nrTDLChannel`

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? (MATLAB).

`tdl = nrTDLChannel`

`tdl = nrTDLChannel(Name,Value)`

creates a TDL MIMO
channel System
object.`tdl`

= nrTDLChannel

creates the object with properties set by using one or more name-value pairs. Enclose
the property name inside quotes, followed by the specified value. Unspecified properties
take default values.`tdl`

= nrTDLChannel(`Name,Value`

)

```
tdl =
nrTDLChannel('DelayProfile','TDL-D','DelaySpread',2e-6)
```

creates a TDL
channel model with TDL-D delay profile and a 2-microseconds delay spread.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 (MATLAB).

`DelayProfile`

— TDL delay profile`'TDL-A'`

(default) | `'TDL-B'`

| `'TDL-C'`

| `'TDL-D'`

| `'TDL-E'`

| `'Custom'`

TDL delay profile, specified as one of `'TDL-A'`

,
`'TDL-B'`

, `'TDL-C'`

, `'TDL-D'`

,
`'TDL-E'`

, or `'Custom'`

. See TR 38.901 Section
7.7.2, Tables 7.7.2-1 to 7.7.2-5.

When you set this property to `'Custom'`

, configure the delay
profile using properties `PathDelays`

, `AveragePathGains`

, `FadingDistribution`

, and `KFactorFirstTap`

.

**Data Types: **`char`

| `string`

`PathDelays`

— Discrete path delays in seconds`0.0`

(default) | numeric scalar | row vectorDiscrete path delays in seconds, specified as a numeric scalar or row vector.
`AveragePathGains`

and `PathDelays`

must have the same
size.

To enable this property, set `DelayProfile`

to `'Custom'`

.

**Data Types: **`double`

`AveragePathGains`

— Average path gains in dB`0.0`

(default) | numeric scalar | row vectorAverage path gains in dB, specified as a numeric scalar or row vector.
`AveragePathGains`

and `PathDelays`

must
have the same size.

To enable this property, set `DelayProfile`

to `'Custom'`

.

**Data Types: **`double`

`FadingDistribution`

— Fading process statistical distribution`'Rayleigh'`

(default) | `'Rician'`

Fading process statistical distribution, specified as `'Rayleigh'`

or `'Rician'`

.

To enable this property, set `DelayProfile`

to `'Custom'`

.

**Data Types: **`char`

| `string`

`KFactorFirstTap`

— K-factor of first tap of delay profile in dB`13.3`

(default) | numeric scalarK-factor of first tap of delay profile in dB, specified as a numerical scalar. The default value corresponds to the K-factor of the first tap of TDL-D as defined in TR 38.901 Section 7.7.2, Table 7.7.2-4.

To enable this property, set `DelayProfile`

to `'Custom'`

and `FadingDistribution`

to `'Rician'`

.

**Data Types: **`double`

`DelaySpread`

— Desired RMS delay spread in seconds`30e-9`

(default) | numeric scalarDesired root mean square (RMS) delay spread in seconds, specified as a numeric
scalar. For examples of desired RMS delay spreads,
* DS*, see TR 38.901 Section
7.7.3 and Tables 7.7.3-1 and 7.7.3-2.

To enable this property, set `DelayProfile`

to `'TDL-A'`

, `'TDL-B'`

, `'TDL-C'`

,
`'TDL-D'`

, or `'TDL-E'`

. This property does not
apply for custom delay profile.

**Data Types: **`double`

`MaximumDopplerShift `

— Maximum Doppler shift in Hz`5`

(default) | nonnegative numeric scalarMaximum Doppler shift in Hz, specified as a nonnegative numeric scalar. This property applies to all channel paths. When the maximum Doppler shift is set to 0, the channel remains static for the entire input. To generate a new channel realization, reset the object by calling the `reset`

function.

**Data Types: **`double`

`KFactorScaling`

— K-factor scaling`false`

(default) | `true`

K-factor scaling, specified as `false`

or `true`

.
When set to `true`

, the `KFactor`

property specifies the desired K-factor, and the object applies K-factor scaling as
described in TR 38.901 Section 7.7.6.

K-factor scaling modifies both the path delays and path powers.

To enable this property, set `DelayProfile`

to `'TDL-D'`

or `'TDL-E'`

.

**Data Types: **`double`

`KFactor`

— Desired K-factor for scaling in dB`9.0`

(default) | numeric scalarDesired K-factor for scaling in dB, specified as a numeric scalar. For typical K-factor values, see TR 38.901 Section 7.7.6 and Table 7.5-6.

K-factor scaling modifies both the path delays and path powers.

`K-factor`

applies to the overall delay profile. Specifically, the K-factor after the scaling isas described in TR 38.901 Section 7.7.6.`K`

_{model}is the ratio of the power of the first path LOS to the total power of all the Rayleigh paths, including the Rayleigh part of the first path.`K`

_{model}

To enable this property, set `KFactorScaling`

to `true`

.

**Data Types: **`double`

`SampleRate`

— Sample rate of input signal in Hz`30.72e6`

(default) | positive numeric scalarSample rate of input signal in Hz, specified as a positive numeric scalar.

**Data Types: **`double`

`MIMOCorrelation`

— Correlation between UE and BS antennas`'Low'`

(default) | `'Medium'`

| `'Medium-A'`

| `'UplinkMedium'`

| `'High'`

| `'Custom'`

Correlation between user equipment (UE) and base station (BS) antennas, specified as one of these values:

`'Low'`

or`'High'`

— Applies to both uplink and downlink.`'Low'`

is equivalent to no correlation between antennas.`'Medium'`

or`'Medium-A'`

— For downlink, see TS 36.101 Annex B.2.3.2. For uplink, see TS 36.104 Annex B.5.2. The`TransmissionDirection`

property controls the transmission direction.`'UplinkMedium'`

— See TS 36.104, Annex B.5.2.`'Custom'`

— The`ReceiveCorrelationMatrix`

property specifies the correlation between UE antennas, and the`TransmitCorrelationMatrix`

property specifies the correlation between BS antennas. See TR 38.901 Section 7.7.5.2.

For more details on correlation between UE and BS antennas, see TS 36.101 [2] and TS 36.104 [3]

**Data Types: **`char`

| `string`

`Polarization`

— Antenna polarization arrangement`'Co-Polar'`

(default) | `'Cross-Polar'`

| `'Custom'`

Antenna polarization arrangement, specified as `'Co-Polar'`

,
`'Cross-Polar'`

, `'Custom'`

.

**Data Types: **`char`

| `string`

`TransmissionDirection`

— Transmission direction`'Downlink'`

(default) | `'Uplink'`

Transmission direction, specified as `'Downlink'`

or
`'Uplink'`

.

To enable this property, set `MIMOCorrelation`

to `'Low'`

,
`'Medium'`

, `'Medium-A'`

,
`'UplinkMedium'`

, or `'High'`

.

**Data Types: **`char`

| `string`

`NumTransmitAntennas`

— Number of transmit antennas`1`

(default) | positive integerNumber of transmit antennas, specified as a positive integer.

To enable this property, set `MIMOCorrelation`

to `'Low'`

,
`'Medium'`

, `'Medium-A'`

,
`'UplinkMedium'`

, or `'High'`

, or set both
`MIMOCorrelation`

and `Polarization`

to `'Custom'`

.

**Data Types: **`double`

`NumReceiveAntennas`

— Number of receive antennas2 (default) | positive integer

Number of receive antennas, specified as a positive integer.

To enable this property, set `MIMOCorrelation`

to `'Low'`

,
`'Medium'`

, `'Medium-A'`

,
`'UplinkMedium'`

, or `'High'`

.

**Data Types: **`double`

`TransmitCorrelationMatrix`

— Spatial correlation of transmitter`[1]`

(default) | 2-D matrix | 3-D arraySpatial correlation of transmitter, specified as a 2-D matrix or 3-D array.

If the channel is frequency-flat (

`PathDelays`

is a scalar), specify`TransmitCorrelationMatrix`

as a 2-D Hermitian matrix of size*N*_{T}-by-*N*_{T}.*N*_{T}is the number of transmit antennas. The main diagonal elements must be all ones, and the off-diagonal elements must have a magnitude smaller than or equal to one.If the channel is frequency-selective (

`PathDelays`

is a row vector of length*N*_{P}), specify`TransmitCorrelationMatrix`

as one of these arrays:2-D Hermitian matrix of size

*N*_{T}-by-*N*_{T}with element properties as previously described. Each path has the same transmit correlation matrix.3-D array of size

*N*_{T}-by-*N*_{T}-by-*N*_{P}, where each submatrix of size*N*_{T}-by-*N*_{T}is a Hermitian matrix with element properties as previously described. Each path has its own transmit correlation matrix.

To enable this property, set `MIMOCorrelation`

to `'Custom'`

and `Polarization`

to either `'Co-Polar'`

or `'Cross-Polar'`

.

**Data Types: **`double`

**Complex Number Support: **Yes

`ReceiveCorrelationMatrix`

— Spatial correlation of receiver`[1 0; 0 1]`

(default) | 2-D matrix | 3-D arraySpatial correlation of receiver, specified as a 2-D matrix or 3-D array.

If the channel is frequency-flat (

`PathDelays`

is a scalar), specify`ReceiveCorrelationMatrix`

as a 2-D Hermitian matrix of size*N*_{R}-by-*N*_{R}.*N*_{R}is the number of receive antennas. The main diagonal elements must be all ones, and the off-diagonal elements must have a magnitude smaller than or equal to one.If the channel is frequency-selective (

`PathDelays`

is a row vector of length*N*_{P}), specify`ReceiveCorrelationMatrix`

as one of these arrays:2-D Hermitian matrix of size

*N*_{R}-by-*N*_{R}with element properties as previously described. Each path has the same receive correlation matrix.3-D array of size

*N*_{R}-by-*N*_{R}-by-*N*_{P}, where each submatrix of size*N*_{R}-by-*N*_{R}is a Hermitian matrix with element properties as previously described. Each path has its own receive correlation matrix.

To enable this property, set `MIMOCorrelation`

to `'Custom'`

and `Polarization`

to either `'Co-Polar'`

or `'Cross-Polar'`

.

**Data Types: **`double`

**Complex Number Support: **Yes

`TransmitPolarizationAngles`

— Transmit polarization slant angles in degrees`[45 -45]`

(default) | row vectorTransmit polarization slant angles in degrees, specified as a row vector.

To enable this property, set `MIMOCorrelation`

to `'Custom'`

and `Polarization`

to `'Cross-Polar'`

.

**Data Types: **`double`

`ReceivePolarizationAngles`

— Receive polarization slant angles in degrees`[90 0]`

(default) | row vectorReceive polarization slant angles in degrees, specified as a row vector.

To enable this property, set `MIMOCorrelation`

to `'Custom'`

and `Polarization`

to `'Cross-Polar'`

.

**Data Types: **`double`

`XPR`

— Cross-polarization power ratio in dB`10.0`

(default) | numeric scalar | row vectorCross-polarization power ratio in dB, specified as a numeric scalar or a row vector.
This property corresponds to the ratio between the vertical-to-vertical
(*P*_{VV}) and vertical-to-horizontal
(*P*_{VH}) polarizations defined for the
clustered delay line (CDL) models in TR 38.901 Section 7.7.1.

If the channel is frequency-flat (

`PathDelays`

is a scalar), specify`XPR`

as a scalar.If the channel is frequency-selective (

`PathDelays`

is a row vector of length*N*_{P}), specify`XPR`

as one of these values:Scalar — Each path has the same cross-polarization power ratio.

Row vector of size 1-by-

*N*_{P}— Each path has its own cross-polarization power ratio.

The default value corresponds to the cluster-wise cross-polarization power ratio of CDL-A as defined in TR 38.901 Section 7.7.1, Table 7.7.1-1.

To enable this property, set `MIMOCorrelation`

to `'Custom'`

and `Polarization`

to `'Cross-Polar'`

.

**Data Types: **`double`

`SpatialCorrelationMatrix`

— Combined correlation for channel`[1 0; 0 1]`

(default) | 2-D matrix | 3-D arrayCombined correlation for the channel, specified as 2-D matrix or 3-D array. The
matrix determines the product of the number of transmit antennas
(*N*_{T}) and the number of receive antennas
(*N*_{R}).

If the channel is frequency-flat (

`PathDelays`

is a scalar), specify`SpatialCorrelationMatrix`

as a 2-D Hermitian matrix of size (*N*_{T}⨉*N*_{R})-by-(*N*_{T}⨉*N*_{R}).The magnitude of any off-diagonal element must be no larger than the geometric mean of the two corresponding diagonal elements.If the channel is frequency-selective (

`PathDelays`

is a row vector of length*N*_{P}), specify`SpatialCorrelationMatrix`

as one of these arrays:2-D Hermitian matrix of size (

*N*_{T}⨉*N*_{R})-by-(*N*_{T}⨉*N*_{R}) with off-diagonal element properties as previously described. Each path has the same spatial correlation matrix.3-D array of size (

*N*_{T}⨉*N*_{R})-by-(*N*_{T}⨉*N*_{R})-by-*N*_{P}array — where each matrix of size (*N*_{T}⨉*N*_{R})-by-(*N*_{T}⨉*N*_{R}) is a Hermitian matrix with off-diagonal element properties as previously described. Each path has its own spatial correlation matrix.

To enable this property, set `MIMOCorrelation`

to `'Custom'`

and `Polarization`

to `'Custom'`

.

**Data Types: **`double`

`NormalizePathGains`

— Normalize path gains`true`

(default) | `false`

Normalize path gains, specified as `true`

or
`false`

. Use this property to normalize the fading processes. When
this property is set to `true`

, the total power of the path gains,
averaged over time, is 0 dB. When this property is set to `false`

, the
path gains are not normalized. The average powers of the path gains are specified by the
selected delay profile, or if `DelayProfile`

is
set to `'Custom'`

, by the `AveragePathGains`

property.

**Data Types: **`logical`

`InitialTime`

— Time offset of fading process in seconds`0.0`

(default) | numeric scalarTime offset of fading process in seconds, specified as a numeric scalar.

**Tunable: **Yes

**Data Types: **`double`

`NumSinusoids`

— Number of modeling sinusoids`48`

(default) | positive integerNumber of modeling sinusoids, specified as a positive integer. These sinusoids model the fading process.

**Data Types: **`double`

`RandomStream`

— Source of random number stream`'mt19937ar with seed'`

(default) | `'Global stream'`

Source of random number stream, specified as one of the following:

`'mt19937ar with seed'`

— The object uses the mt19937ar algorithm for normally distributed random number generation. Calling the`reset`

function resets the filters and reinitializes the random number stream to the value of the`Seed`

property.`'Global stream'`

— The object uses the current global random number stream for normally distributed random number generation. Calling the`reset`

function resets only the filters.

`Seed`

— Initial seed of mt19937ar random number stream`73`

(default) | nonnegative numeric scalarInitial seed of mt19937ar random number stream, specified as a nonnegative numeric scalar.

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

. When calling the `reset`

function, the seed reinitializes the mt19937ar random number
stream.

**Data Types: **`double`

`NormalizeChannelOutputs`

— Normalize channel outputs by the number of receive antennas`true`

(default) | `false`

Normalize channel outputs by the number of receive antennas, specified as
`true`

or `false`

.

**Data Types: **`logical`

`signalOut = tdl(signalIn)`

`[signalOut,pathGains] = tdl(signalIn)`

`[signalOut,pathGains,sampleTimes] = tdl(signalIn)`

`[`

also returns the sample times of the channel snapshots of the path gains.`signalOut`

,`pathGains`

,`sampleTimes`

] = tdl(`signalIn`

)

`signalIn`

— Input signalcomplex scalar | vector |

Input signal, specified as a complex scalar, vector, or *N*_{S}-by-*N*_{T} matrix, where:

*N*_{S}is the number of samples.*N*_{T}is the number of transmit antennas.

**Data Types: **`single`

| `double`

**Complex Number Support: **Yes

`signalOut`

— Output signalcomplex scalar | vector |

Output signal, returned as a complex scalar, vector, or *N*_{S}-by-*N*_{R} matrix, where:

*N*_{S}is the number of samples.*N*_{R}is the number of receive antennas.

The output signal data type is of the same precision as the input signal data type.

**Data Types: **`single`

| `double`

**Complex Number Support: **Yes

`pathGains`

— MIMO channel path gains of fading process MIMO channel path gains of the fading process, returned as an
*N*_{S}-by-*N*_{P}-by-*N*_{T}-by-*N*_{R}
complex matrix, where:

*N*_{S}is the number of samples.*N*_{P}is the number of paths, specified by the length of the`PathDelays`

property of`tdl`

.*N*_{T}is the number of transmit antennas.*N*_{R}is the number of receive antennas.

The path gains data type is of the same precision as the input signal data type.

**Data Types: **`single`

| `double`

**Complex Number Support: **Yes

`sampleTimes`

— Sample times of channel snapshotsSample times of the channel snapshots of the path gains, returned as an
*N*_{S}-by-1 column vector of real numbers.
*N*_{S} is the first dimension of
`pathGains`

that corresponds to the number of samples.

**Data Types: **`double`

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

`nrTDLChannel`

`info` | Get characteristic information about link-level MIMO fading channel |

`getPathFilters` | Get path filter impulse response for link-level MIMO fading channel |

Display waveform spectrum received through a Tapped Delay Line (TDL) multi-input/multi-output (MIMO) channel model from TR 38.901 Section 7.7.2 using an `nrTDLChannel`

System object.

Define the channel configuration structure using an `nrTDLChannel`

System object. Use delay profile TDL-C from TR 38.901 Section 7.7.2, a delay spread of 300 ns, and UT velocity of 30 km/h:

v = 30.0; % UT velocity in km/h fc = 4e9; % carrier frequency in Hz c = physconst('lightspeed'); % speed of light in m/s fd = (v*1000/3600)/c*fc; % UT max Doppler frequency in Hz tdl = nrTDLChannel; tdl.DelayProfile = 'TDL-C'; tdl.DelaySpread = 300e-9; tdl.MaximumDopplerShift = fd;

Create a random waveform of 1 subframe duration with 1 antenna.

SR = 30.72e6; T = SR * 1e-3; tdl.SampleRate = SR; tdlinfo = info(tdl); Nt = tdlinfo.NumTransmitAntennas; txWaveform = complex(randn(T,Nt),randn(T,Nt));

Transmit the input waveform through the channel.

rxWaveform = tdl(txWaveform);

Plot the received waveform spectrum.

analyzer = dsp.SpectrumAnalyzer('SampleRate',tdl.SampleRate); analyzer.Title = ['Received Signal Spectrum ' tdl.DelayProfile]; analyzer(rxWaveform);

Plot the path gains of a Tapped Delay Line (TDL) single-input/single-output (SISO) channel using an `nrTDLChannel`

System object.

Configure a channel with delay profile TDL-E from TR 38.901 Section 7.7.2. Set the maximum Doppler shift to 70 Hz and enable path gain output

```
tdl = nrTDLChannel;
tdl.SampleRate = 500e3;
tdl.MaximumDopplerShift = 70;
tdl.DelayProfile = 'TDL-E';
```

Configure transmit and receive antenna arrays for SISO operation.

tdl.NumTransmitAntennas = 1; tdl.NumReceiveAntennas = 1;

Create a dummy input signal. The length of the input determines the time samples of the generated path gain.

in = zeros(1000,tdl.NumTransmitAntennas);

To generate the path gains, call the channel on the input. Plot the results.

[~, pathGains] = tdl(in); mesh(10*log10(abs(pathGains))); view(26,17); xlabel('Channel Path'); ylabel('Sample (time)'); zlabel('Magnitude (dB)');

Display waveform spectrum received through a Tapped Delay Line (TDL) channel model with delay profile TDL-D from TR 38.901 Section 7.7.2 and 4-by-2 high correlation cross-polar antennas as specified in TS 36.101 Annex B.2.3A.3.

Configure cross-polar antennas according to TS 36.101 Annex B.2.3A.3 4x2 high correlation.

tdl = nrTDLChannel; tdl.NumTransmitAntennas = 4; tdl.DelayProfile = 'TDL-D'; tdl.DelaySpread = 10e-9; tdl.KFactorScaling = true; tdl.KFactor = 7.0; tdl.MIMOCorrelation = 'High'; tdl.Polarization = 'Cross-Polar';

Create a random waveform of 1 subframe duration with 4 antennas.

SR = 1.92e6; T = SR * 1e-3; tdl.SampleRate = SR; tdlinfo = info(tdl); Nt = tdlinfo.NumTransmitAntennas; txWaveform = complex(randn(T,Nt),randn(T,Nt));

Transmit the input waveform through the channel.

rxWaveform = tdl(txWaveform);

Plot the received waveform spectrum.

analyzer = dsp.SpectrumAnalyzer('SampleRate',tdl.SampleRate); analyzer.Title = ['Received Signal Spectrum ' tdl.DelayProfile]; analyzer(rxWaveform);

Transmit waveform through a Tapped Delay Line (TDL) channel model from TR 38.901 Section 7.7.2 with customized delay profile.

Define the channel configuration structure using an `nrTDLChannel`

System object. Customize the delay profile with two taps.

Tap 1: Rician with average power 0 dB, K-factor 10 dB, and zero delay.

Tap 2: Rayleigh with average power -5 dB, and 45 ns path delay using TDL-D.

tdl = nrTDLChannel; tdl.NumTransmitAntennas = 1; tdl.DelayProfile = 'Custom'; tdl.FadingDistribution = 'Rician'; tdl.KFactorFirstTap = 10.0; tdl.PathDelays = [0.0 45e-9]; tdl.AveragePathGains = [0.0 -5.0];

Create a random waveform of 1 subframe duration with 1 antenna.

SR = 30.72e6; T = SR * 1e-3; tdl.SampleRate = SR; tdlinfo = info(tdl); Nt = tdlinfo.NumTransmitAntennas; txWaveform = complex(randn(T,Nt),randn(T,Nt));

Transmit the input waveform through the channel.

rxWaveform = tdl(txWaveform);

[1]
3GPP TR 38.901. “Study on channel model for frequencies
from 0.5 to 100 GHz.” *3rd Generation Partnership Project; Technical
Specification Group Radio Access Network*.

[2]
3GPP TS 36.101. “Evolved Universal Terrestrial Radio
Access (E-UTRA); User Equipment (UE) radio transmission and reception.” *3rd
Generation Partnership Project; Technical Specification Group Radio Access
Network*.

[3]
3GPP TS 36.104. “Evolved Universal Terrestrial Radio
Access (E-UTRA); Base Station (BS) radio transmission and reception.” *3rd
Generation Partnership Project; Technical Specification Group Radio Access
Network*.

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

Usage notes and limitations:

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

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.

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

Select web siteYou can also select a web site from the following list:

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

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

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