nrCDLChannel

Send signal through CDL channel model

Description

The nrCDLChannel System object™ sends an input signal through a clustered delay line (CDL) 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.1: CDL models

  • Section 7.7.3: Scaling of delays

  • Section 7.7.5.1: Scaling of angles

  • Section 7.7.6: K-factor for LOS channel models

To send a signal through the CDL MIMO channel model:

  1. Create the nrCDLChannel object and set its properties.

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

cdl = nrCDLChannel creates a CDL MIMO channel System object.

example

cdl = nrCDLChannel(Name,Value) 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.

Example: cdl = nrCDLChannel('DelayProfile','CDL-D','DelaySpread',2e-6) creates the channel object with CDL-D delay profile and 2 microseconds delay spread.

Properties

expand all

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.

CDL delay profile, specified as 'CDL-A', 'CDL-B', 'CDL-C', 'CDL-D', 'CDL-E', or 'Custom'. See TR 38.901 Section 7.7.1, Tables 7.7.1-1 to 7.7.1-5.

When you set this property to 'Custom', configure the delay profile using properties PathDelays, AveragePathGains, AnglesAoA, AnglesAoD, AnglesZoA, AnglesZoD, HasLOSCluster, KFactorFirstCluster, AngleSpreads, XPR, and NumStrongestClusters.

Data Types: char | string

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

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

Azimuth of arrival angle in degrees, specified as a numeric scalar or row vector. The vector elements specify the angles for each cluster.

Dependencies

To enable this property, set DelayProfile to 'Custom'.

Data Types: double

Azimuth of departure angle in degrees, specified as a numeric scalar or row vector. The vector elements specify the angles for each cluster.

Dependencies

To enable this property, set DelayProfile to 'Custom'.

Data Types: double

Zenith of arrival angle in degrees, specified as a numeric scalar or row vector. The vector elements specify the angles for each cluster.

Dependencies

To enable this property, set DelayProfile to 'Custom'.

Data Types: double

Zenith of departure angle in degrees, specified as a numeric scalar or row vector. The vector elements specify the angles for each cluster.

Dependencies

To enable this property, set DelayProfile to 'Custom'.

Data Types: double

Line of sight (LOS) cluster of the delay profile, specified as false or true. The PathDelays, AveragePathGains, AnglesAoA, AnglesAoD, AnglesZoA, and AnglesZoD properties define the delay profile. To enable the LOS cluster of the delay profile, set HasLOSCluster to true.

Dependencies

To enable this property, set DelayProfile to 'Custom'.

Data Types: logical

K-factor in the first cluster of the delay profile in dB, specified as a numeric scalar. The default value corresponds to the K-factor in the first cluster of CDL-D as defined in TR 38.901 Section 7.7.1, Table 7.7.1-4.

Dependencies

To enable this property, set DelayProfile to 'Custom' and HasLOSCluster to true.

Data Types: double

Apply scaling of angles, specified as false or true according to TR 38.901 Section 7.7.5.1. When set to true, the AngleSpreads and MeanAngles properties define the scaling of angles.

Dependencies

To enable this property, set DelayProfile to 'CDL-A', 'CDL-B', 'CDL-C', 'CDL-D', or 'CDL-E'. This property does not apply for custom delay profile.

Data Types: logical

Scaled or cluster-wise root mean square (RMS) angle spreads in degrees, specified as a four-element row vector in one of these forms:

  • [ASD ASA ZSD ZSA] — Use this vector to specify the desired RMS angle spreads of the channel, as described in TR 38.901 Section 7.7.5.1 (ASdesired), where:

    • ASD is the RMS azimuth spread of departure angles

    • ASA is the RMS azimuth spread of arrival angles

    • ZSD is the RMS zenith spread of departure angles

    • ZSA is the RMS zenith spread of arrival angles

    To use this form, set AngleScaling to true and DelayProfile to 'CDL-A', 'CDL-B', 'CDL-C', 'CDL-D', or 'CDL-E'.

  • [CASD CASA CZSD CZSA] — Use this vector to specify cluster-wise RMS angle spreads for scaling ray offset angles within a cluster, as described in TR 38.901 Section 7.7.1, Step1, where:

    • CASD is the cluster-wise RMS azimuth spread of departure angles

    • CASA is the cluster-wise RMS azimuth spread of arrival angles

    • CZSD is the cluster-wise RMS zenith spread of departure angles

    • CZSA is the cluster-wise RMS zenith spread of arrival angles

    To use this form, set DelayProfile to 'Custom'. Based on TR 38.901 Section 7.7.5.1, the object does not perform angle scaling in this case.

The default value corresponds to the default cluster-wise angle spreads of CDL-A as defined in TR 38.901 Section 7.7.1 Table 7.7.1-1.

Dependencies

To enable this property, set DelayProfile to 'Custom' or AngleScaling to true.

Data Types: double

Scaled mean angles in degrees, specified as a four-element row vector of the form [AoD AoA ZoD ZoA].

  • AoD is the mean azimuth of departure angles after scaling

  • AoA is the mean azimuth of arrival angles after scaling

  • ZoD is the mean zenith of departure angles after scaling

  • ZoA is the mean zenith of arrival angles after scaling

Use this vector to specify the desired mean angles of the channel used for angle scaling, as described in TR 38.901 Section 7.7.5.1 (μΦ,desired).

Dependencies

To enable this property, set AngleScaling to true.

Data Types: double

Cross-polarization power ratio in dB, specified as a numeric scalar. 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 DelayProfile to 'Custom'.

Data Types: double

Desired RMS delay spread in seconds, specified as a numeric scalar. For examples of desired RMS delay spreads, DSdesired, see TR 38.901 Section 7.7.3 and Tables 7.7.3-1 and 7.7.3-2.

Dependencies

To enable this property, set DelayProfile to 'CDL-A', 'CDL-B', 'CDL-C', 'CDL-D', or 'CDL-E'. This property does not apply for custom delay profile.

Data Types: double

Carrier frequency in Hz, specified as a numeric scalar.

Data Types: double

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

User terminal (or user equipment) direction of travel in degrees, specified as a two-element column vector. The vector elements specify the azimuth and the elevation components [azimuth; elevation].

Data Types: double

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 'CDL-D' or 'CDL-E'.

Data Types: double

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 is Kmodel as described in TR 38.901 Section 7.7.6. Kmodel is the ratio of the power of the first path LOS to the total power of all the Laplacian clusters, including the Laplacian part of the first cluster.

Dependencies

To enable this property, set KFactorScaling to true.

Data Types: double

Sample rate of input signal in Hz, specified as a positive numeric scalar.

Data Types: double

Transmit antenna array characteristics, specified as a structure that contains these fields:

Parameter FieldValuesDescription
Size

[2 2 2 1 1] (default),

row vector

Size of antenna array [M N P Mg Ng], where:

  • M and N are the number of rows and columns in the antenna array, respectively.

  • P is the number of polarizations (1 or 2).

  • Mg and Ng are the number of row and column array panels, respectively.

The nrCDLChannel System object maps the input signal signalIn to the antenna array elements panel-wise, in the order that a 5-D array of size M-by-N-by-P-by-Mg-by-Ng is linearly indexed across the first dimension to the last.

For example, this figure shows how the object maps the input signal signalIn to an antenna array of size [2 3 2 2 2]. The antenna array consists of 2-by-2 antenna panels of 2-by-3 elements with 2 polarizations. The object maps the first M = 2 columns of the input signal (s1 and s2) to the first column of antenna elements with the first polarization angle of the first panel. The next M = 2 columns of the input signal (s3 and s4) are mapped to the next column of antenna elements, and so on. Following this pattern, the object maps the first M × N = 6 columns of the input signal (s1 to s6) to the antenna elements with the first polarization angle of the complete first panel. Similarly, the next 6 columns of the input signal (s7 to s12) are mapped to the antenna elements with the second polarization angle of the first panel. Subsequent sets of M × N × P = 12 columns of the input signal (s13 to s24, s25 to s36, s37 to s48) are mapped to consecutive panels, taking panel rows first, then panel columns.

Antenna Array-To-Signal Mapping

ElementSpacing

[0.5 0.5 1.0 1.0] (default),

row vector

Element spacing, in wavelengths, specified as a row vector of the form [λv λh dgv dgh]. The vector elements represent the vertical and horizontal element spacing and the vertical and horizontal panel spacing, respectively.

PolarizationAngles

[45 -45] (default),

row vector

Polarization angles in degrees, specified as a row vector of the form [θ ρ].

Orientation

[0; 0; 0](default),

column vector

Mechanical orientation of the array, in degrees, specified as a column vector of the form [α; β; γ]. The vector elements specify the bearing, downtilt, and slant, respectively. The default value indicates that the broadside direction of the array points to the positive x-axis.

Element

'38.901' (default),

'isotropic'

Antenna element radiation pattern as described in TR 38.901 Section 7.3. (Note that TR 38.901 superseded TR 38.900.)

PolarizationModel

'Model-2' (default),

'Model-1'

Model that determines the radiation field patterns based on a defined radiation power pattern. For more information, see TR 38.901 Section 7.3.2.

Data Types: struct

Receive antenna array characteristics, specified as a structure that contains these fields:

Parameter FieldValuesDescription
Size

[1 1 2 1 1] (default),

row vector

Size of antenna array [M N P Mg Ng], where:

  • M and N are the number of rows and columns in the antenna array, respectively.

  • P is the number of polarizations (1 or 2).

  • Mg and Ng are the number of row and column array panels, respectively.

The nrCDLChannel System object maps the antenna array elements to the output signal signalOut panel-wise, in the order that a 5-D array of size M-by-N-by-P-by-Mg-by-Ng is linearly indexed across the first dimension to the last.

For example, this figure shows how the object maps an antenna array of size [2 3 2 2 2] to the output signal signalOut. The antenna array consists of 2-by-2 antenna panels of 2-by-3 elements with 2 polarizations. The first column of antenna elements with the first polarization angle of the first panel are mapped to the first M = 2 columns of the output signal (s1 and s2). The next column of antenna elements are mapped to the next M = 2 columns of the output signal (s3 and s4), and so on. Following this pattern, the object maps the antenna elements with the first polarization angle of the complete first panel to the first M × N = 6 columns of the output signal (s1 to s6). Similarly, the antenna elements with the second polarization angle of the first panel are mapped to the next 6 columns of the output signal (s7 to s12). Consecutive panels are mapped to subsequent sets of M × N × P = 12 columns of the output signal (s13 to s24, s25 to s36, s37 to s48), taking panel rows first, then panel columns.

Antenna Array-To-Signal Mapping

ElementSpacing

[0.5 0.5 0.5 0.5] (default),

row vector

Element spacing, in wavelengths, specified as a row vector of the form [λv λh dgv dgh]. The vector elements represent the vertical and horizontal element spacing and the vertical and horizontal panel spacing, respectively.

PolarizationAngles

[0 90] (default),

row vector

Polarization angles in degrees, specified as a row vector of the form [θ ρ].

Orientation

[0; 0; 0](default),

column vector

Mechanical orientation of the array, in degrees, specified as a column vector of the form [α; β; γ]. The vector elements specify the bearing, downtilt, and slant, respectively. The default value indicates that the broadside direction of the array points to the positive x-axis.

Element

'isotropic' (default),

'38.901'

Antenna element radiation pattern as described in TR 38.901 Section 7.3. (Note that TR 38.901 superseded TR 38.900.)

PolarizationModel

'Model-2' (default),

'Model-1'

Model that determines the radiation field patterns based on a defined radiation power pattern. For more information, see TR 38.901 Section 7.3.2.

Data Types: struct

Number of time samples per half wavelength, specified as Inf or a numeric scalar. The SampleDensity and MaximumDopplerShift properties control the coefficient generation sampling rate, Fcg, given by

Fcg = MaximumDopplerShift × 2 × SampleDensity.

Setting SampleDensity to Inf assigns Fcg the value of the SampleRate property.

Data Types: double

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

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

Tunable: Yes

Data Types: double

Number of strongest clusters to split into subclusters, specified as a numeric scalar. See TR 38.901 Section 7.5, Step 11.

Dependencies

To enable this property, set DelayProfile to 'Custom'.

Data Types: double

Cluster delay spread in seconds, specified as a nonnegative scalar. Use this property to specify the delay offset between subclusters for clusters split into subclusters. See TR 38.901 Section 7.5, Step 11.

Dependencies

To enable this property, set DelayProfile to 'Custom' and NumStrongestClusters to a value greater than zero.

Data Types: double

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.

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

Fading channel filtering, specified as true or false. When this property is set to false, the following conditions apply:

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

  • The SampleDensity property determines when to sample the channel coefficients.

  • The NumTimeSamples property controls the duration of the fading process realization at a sampling rate given by the SampleRate property.

Data Types: logical

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

Normalize channel outputs by the number of receive antennas, specified as true or false.

Dependencies

To enable this property, set ChannelFiltering to true.

Data Types: logical

Usage

Description

example

signalOut = cdl(signalIn) sends the input signal through a CDL MIMO fading channel and returns the channel-impaired signal.

[signalOut,pathGains] = cdl(signalIn) also returns the MIMO channel path gains of the underlying fading process.

example

[signalOut,pathGains,sampleTimes] = cdl(signalIn) also returns the sample times of the channel snapshots of pathGains (first-dimension elements).

[pathGains,sampleTimes] = cdl() returns only the path gains and the sample times. In this case, the NumTimeSamples property determines the duration of the fading process. The object acts as a source of the path gains and sample times without filtering an input signal.

To use this syntax, you must set the ChannelFiltering property of cdl to false.

Input Arguments

expand all

Input signal, specified as a complex scalar, vector, or NS-by-NT matrix, where:

  • NS is the number of samples.

  • NT is the number of transmit antennas.

Data Types: single | double
Complex Number Support: Yes

Output Arguments

expand all

Output signal, returned as a complex scalar, vector, or NS-by-NR matrix, where:

  • NS is the number of samples.

  • NR 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

MIMO channel path gains of the fading process, returned as an NCS-by-NP-by-NT-by-NR complex matrix, where:

  • NCS is the number of channel snapshots, controlled by the SampleDensity property of cdl.

  • NP is the number of paths, specified by the size of the PathDelays property of cdl.

  • NT is the number of transmit antennas.

  • NR 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

Sample times of channel snapshots, returned as an NCS-by-1 column vector, where NCS is the number of channel snapshots controlled by the SampleDensity property.

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)

expand all

infoGet characteristic information about link-level MIMO fading channel
getPathFilters Get path filter impulse response for link-level MIMO fading channel
displayChannelVisualize and explore CDL channel model characteristics
stepRun System object algorithm
cloneCreate duplicate System object
isLockedDetermine if System object is in use
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Examples

collapse all

Transmit waveform through a clustered delay line (CDL) channel model with delay profile CDL-D from TR 38.901 Section 7.7.1.

Define the channel configuration structure using an nrCDLChannel System object. Use delay profile CDL-D, a delay spread of 10 ns, and UE velocity of 15 km/h:

v = 15.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
 
cdl = nrCDLChannel;
cdl.DelayProfile = 'CDL-D';
cdl.DelaySpread = 10e-9;
cdl.CarrierFrequency = fc;
cdl.MaximumDopplerShift = fd;

Configure the transmit array as a vector of the form [M N P Mg Ng] = [2 2 2 1 1], representing 1 panel (Mg=1, Ng=1) with a 2-by-2 antenna array (M=2, N=2) and two polarization angles (P=2). Configure the receive antenna array as a vector of the form [M N P Mg Ng] = [1 1 2 1 1], representing a single pair of cross-polarized co-located antennas.

cdl.TransmitAntennaArray.Size = [2 2 2 1 1];
cdl.ReceiveAntennaArray.Size = [1 1 2 1 1];

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

SR = 15.36e6;
T = SR * 1e-3;
cdl.SampleRate = SR;
cdlinfo = info(cdl);
Nt = cdlinfo.NumTransmitAntennas;
 
txWaveform = complex(randn(T,Nt),randn(T,Nt));

Transmit the input waveform through the channel.

rxWaveform = cdl(txWaveform);

Plot channel output and path gain snapshots for various sample density values while using an nrCDLChannel System object.

Configure a channel with delay profile CDL-B from TR 38.901 Section 7.7.1. Set the maximum Doppler shift to 300 Hz and the channel sampling rate to 10 kHz.

cdl = nrCDLChannel;
cdl.DelayProfile = 'CDL-B';
cdl.MaximumDopplerShift = 300.0;
cdl.SampleRate = 10e3;
cdl.Seed = 19;

Configure the transmit and receive antenna arrays for single-input/single-output (SISO) operation.

cdl.TransmitAntennaArray.Size = [1 1 1 1 1];
cdl.ReceiveAntennaArray.Size = [1 1 1 1 1];

Create an input waveform with a length of 40 samples.

T = 40; 
in = ones(T,1);

Plot the step response of the channel (displayed as lines) and the corresponding path gain snapshots (displayed circles) for various values of the SampleDensity property. The sample density property controls how often the channel snapshots are taken relative to the Doppler frequency.

  • When SampleDensity is set to Inf, a channel snapshot is taken for every input sample.

  • When SampleDensity is set to a scalar S, a channel snapshot is taken at a rate of FCS=2S×MaximumDopplerShift.

The nrCDLChannel object applies the channel snapshots to the input waveform by means of zero-order hold interpolation. The object takes an extra snapshot beyond the end of the input. Some of the final output samples use this extra value to minimize the interpolation error. The channel output contains a transient (and a delay) due to the filters that implement the path delays.

s = [Inf 5 2]; % sample densities

legends = {};
figure; hold on;
SR = cdl.SampleRate;
for i = 1:length(s)
    
    % call channel with chosen sample density
    release(cdl); cdl.SampleDensity = s(i);
    [out,pathgains,sampletimes] = cdl(in);
    chInfo = info(cdl); tau = chInfo.ChannelFilterDelay;
    
    % plot channel output against time
    t = cdl.InitialTime + ((0:(T-1)) - tau).' / SR;
    h = plot(t,abs(out),'o-'); 
    h.MarkerSize = 2; 
    h.LineWidth = 1.5;
    desc = ['Sample Density = ' num2str(s(i))];
    legends = [legends ['Output, ' desc]];
    disp([desc ', Ncs = ' num2str(length(sampletimes))]);
    
    % plot path gains against sample times
    h2 = plot(sampletimes-tau/SR,abs(sum(pathgains,2)),'o');
    h2.Color = h.Color; 
    h2.MarkerFaceColor = h.Color;
    legends = [legends ['Path Gains, ' desc]];    
end
Sample Density = Inf, Ncs = 40
Sample Density = 5, Ncs = 13
Sample Density = 2, Ncs = 6
xlabel('Time (s)');
title('Channel Output and Path Gains vs. Sample Density');
ylabel('Channel Magnitude');
legend(legends,'Location','NorthWest');

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.

Extended Capabilities

Introduced in R2018b