# nrTDLChannel

## Description

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?

## Creation

### Description

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`

)

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

creates a TDL
channel model with TDL-D delay profile and a 2-microseconds delay spread.

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

### Configurable Channel Properties

`DelayProfile`

— TDL delay profile

`'TDL-A'`

(default) | `'TDL-B'`

| `'TDL-C'`

| `'TDL-D'`

| `'TDL-E'`

| `'TDLA30'`

| `'TDLB100'`

| `'TDLC300'`

| `'TDLC60'`

| `'Custom'`

TDL delay profile, specified as one of these values.

`'TDL-A'`

,`'TDL-B'`

,`'TDL-C'`

,`'TDL-D'`

, or`'TDL-E'`

— These values correspond to the delay profiles defined in TR 38.901 Section 7.7.2, Tables 7.7.2-1 to 7.7.2-5.`'TDLA30'`

,`'TDLB100'`

,`'TDLC300'`

, or`'TDLC60'`

— These values correspond to the simplified delay profiles defined in TS 38.101-4 Annex B.2.1 and TS 38.104 Annex G.2.1.`'Custom'`

— Configure the delay profile using the`PathDelays`

,`AveragePathGains`

,`FadingDistribution`

, and`KFactorFirstTap`

properties.

**Data Types: **`char`

| `string`

`PathDelays`

— Discrete path delays in seconds

`0.0`

(default) | numeric scalar | row vector

Discrete path delays in seconds, specified as a numeric scalar or row vector.
`AveragePathGains`

and `PathDelays`

must have the same
size.

#### Dependencies

To enable this property, set `DelayProfile`

to `'Custom'`

.

**Data Types: **`double`

`AveragePathGains`

— Average path gains in dB

`0.0`

(default) | numeric scalar | row vector

Average path gains in dB, specified as a numeric scalar or row vector.
`AveragePathGains`

and `PathDelays`

must have the same size.

#### Dependencies

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

.

#### Dependencies

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 scalar

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

#### Dependencies

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 scalar

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

_{desired}

#### Dependencies

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 scalar

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

**Note**

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

#### Dependencies

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 scalar

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

**Note**

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}

#### Dependencies

To enable this property, set `KFactorScaling`

to `true`

.

**Data Types: **`double`

`SampleRate`

— Sample rate of input signal in Hz

`30720000`

(default) | positive numeric scalar

Sample rate of the 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'`

.

#### Dependencies

To enable this property, set `MIMOCorrelation`

to `'Low'`

,
`'Medium'`

, `'Medium-A'`

,
`'UplinkMedium'`

, or `'High'`

.

**Note**

This property describes the transmission direction corresponding to the
channel status in which the role of the transmit and receive antennas are not
swapped. If the antennas are swapped, the opposite transmission direction applies
to this property. To determine the current link direction of the channel, inspect
the `TransmitAndReceiveSwapped`

property value.

**Data Types: **`char`

| `string`

`NumTransmitAntennas`

— Number of transmit antennas

`1`

(default) | positive integer

Number of transmit antennas, specified as a positive integer.

#### Dependencies

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 antennas

2 (default) | positive integer

Number of receive antennas, specified as a positive integer.

#### Dependencies

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 array

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

#### Dependencies

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 array

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

#### Dependencies

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 vector

Transmit polarization slant angles in degrees, specified as a row vector.

#### Dependencies

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 vector

Receive polarization slant angles in degrees, specified as a row vector.

#### Dependencies

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 vector

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

#### Dependencies

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 array

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

#### Dependencies

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 scalar

Time offset of fading process in seconds, specified as a numeric scalar.

**Data Types: **`double`

`NumSinusoids`

— Number of modeling sinusoids

`48`

(default) | positive integer

Number 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 the random number stream to initialize the sinusoid phases using uniformly distributed random numbers, specified as one of these values.

`'mt19937ar with seed'`

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

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

property. Specifying this value results in repeatable channel fading.`'Global stream'`

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

function resets only the filters.

`Seed`

— Initial seed of mt19937ar random number stream

`73`

(default) | nonnegative numeric scalar

Initial seed of mt19937ar random number stream, specified as a nonnegative numeric scalar.

#### Dependencies

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

`true`

(default) | `false`

Normalize channel outputs, specified as `true`

or
`false`

. When this property is set to `true`

, the
channel outputs are normalized by the number of receive antenna elements.

**Note**

When you call the `swapTransmitAndReceive`

function to reverse the role of the transmit
and receive antennas within the channel, the function also swaps the `NumTransmitAntennas`

and `NumReceiveAntennas`

properties. Hence the normalization is always by
the number of receive antenna elements, specified by the `NumReceiveAntennas`

property.

**Data Types: **`logical`

`ChannelFiltering`

— Fading channel filtering

`true`

(default) | `false`

Fading channel filtering, specified as `true`

or
`false`

. When this property is set to `false`

,
these conditions apply.

The object takes no input signal and returns only the path gains and sample times.

The

`NumTimeSamples`

property controls the duration of the fading process realization at a sampling rate given by the`SampleRate`

property.The channel coefficients sampling rate is one sample per each time sample from 0 to

`NumTimeSamples`

– 1.

**Data Types: **`logical`

`NumTimeSamples`

— Number of time samples

`30720`

(default) | positive integer

Number of time samples, specified as a positive integer. Use this property to set the duration of the fading process realization.

**Tunable: **Yes

#### Dependencies

To enable this property, set `ChannelFiltering`

to `false`

.

**Data Types: **`double`

`OutputDataType`

— Data type of generated path gains

`'double'`

(default) | 'single'

Data type of generated path gains, specified as `'double'`

or
`'single'`

.

#### Dependencies

To enable this property, set `ChannelFiltering`

to `false`

.

**Data Types: **`double`

### Nonconfigurable Channel Properties

`TransmitAndReceiveSwapped`

— Reversed channel link direction

`false`

(default) | `true`

This property is read-only.

Reversed channel link direction, returned as one of these values.

`false`

— The role of the transmit and receive antennas within the channel model corresponds to the original channel link direction. Calling the`swapTransmitAndReceive`

function on the`nrTDLChannel`

object reverses the link direction of the channel and toggles this property value from`false`

to`true`

.`true`

— The role of the transmit and receive antennas within the channel model are swapped. Calling the`swapTransmitAndReceive`

function on the`nrTDLChannel`

object restores the original link direction of the channel and toggles this property value from`true`

to`false`

.

**Data Types: **`logical`

## Usage

### Syntax

### Description

`[`

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

,`pathGains`

,`sampleTimes`

] = tdl(`signalIn`

)

`[`

returns only the path gains and the sample times. The `pathGains`

,`sampleTimes`

] = tdl()`tdl`

object acts
as a source of the path gains and sample times without filtering an input signal. The
`NumTimeSamples`

object property specifies the duration of the fading
process and the `OutputDataType`

object property specifies the data type of the generated
path gains. To use this syntax, you must set the `ChannelFiltering`

object property to `false`

.

### Input Arguments

`signalIn`

— Input signal

complex scalar | vector | *N*_{S}-by-*N*_{T} matrix

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

### Output Arguments

`signalOut`

— Output signal

complex scalar | vector | *N*_{S}-by-*N*_{R} matrix

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

*N*_{S}-by-*N*_{P}-by-*N*_{T}-by-*N*_{R}
complex matrix

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 snapshots

*N*_{S}-by-1 column vector of real
numbers

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

## 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 `nrTDLChannel`

`info` | Characteristic information of link-level MIMO channel |

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

`swapTransmitAndReceive` | Reverse link direction in TDL channel model |

## Examples

### Transmission Over MIMO Channel Model with Delay Profile TDL

Display the 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 UE velocity of 30 km/h:

v = 30.0; % UE 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; % UE 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 = spectrumAnalyzer('SampleRate',tdl.SampleRate); analyzer.Title = ['Received Signal Spectrum ' tdl.DelayProfile]; analyzer(rxWaveform);

### Plot Path Gains for TDL-E Delay Profile with SISO

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 the 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)');

### Transmission Over TDL-D Channel Model with Cross-Polar Antennas

Display the waveform spectrum received through a tapped delay line (TDL) channel model using delay profile TDL-D from TR 38.901 Section 7.7.2.

Configure 4-by-2, high-correlation, cross-polar antennas as specified in TS 36.101 Annex B.2.3A.3.

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 = spectrumAnalyzer('SampleRate',tdl.SampleRate); analyzer.Title = ['Received Signal Spectrum ' tdl.DelayProfile]; analyzer(rxWaveform);

### Transmission Over TDL Channel Model with Custom Delay Profile

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.

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

Second tap: 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);

## References

[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*.

## Extended Capabilities

### C/C++ Code Generation

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

Usage notes and limitations:

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

## Version History

**Introduced in R2018b**

## See Also

### Functions

### Objects

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