Send signal through CDL channel model
The nrCDLChannel
System
object™ sends an input signal through a clustered delay line (CDL) multiinput
multioutput (MIMO) linklevel fading channel to obtain the channelimpaired 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: Kfactor for LOS channel models
To send a signal through the CDL MIMO channel model:
Create the nrCDLChannel
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).
creates a CDL MIMO
channel System
object.cdl
= nrCDLChannel
creates the object with properties set by using one or more namevalue pairs. Enclose
the property name inside quotes, followed by the specified value. Unspecified properties
take default values.cdl
= nrCDLChannel(Name,Value
)
cdl =
nrCDLChannel('DelayProfile','CDLD','DelaySpread',2e6)
creates the channel
object with CDLD delay profile and 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
— CDL delay profile'CDLA'
(default)  'CDLB'
 'CDLC'
 'CDLD'
 'CDLE'
 'Custom'
CDL delay profile, specified as 'CDLA'
,
'CDLB'
, 'CDLC'
, 'CDLD'
,
'CDLE'
, or 'Custom'
. See TR 38.901 Section
7.7.1, Tables 7.7.11 to 7.7.15.
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
PathDelays
— Discrete path delays in seconds0.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 dB0.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
AnglesAoA
— Azimuth of arrival angle in degrees0.0
(default)  numeric scalar  row vectorAzimuth of arrival angle in degrees, specified as a numeric scalar or row vector. The vector elements specify the angles for each cluster.
To enable this property, set DelayProfile
to 'Custom'
.
Data Types: double
AnglesAoD
— Azimuth of departure angle in degrees0.0
(default)  numeric scalar  row vectorAzimuth of departure angle in degrees, specified as a numeric scalar or row vector. The vector elements specify the angles for each cluster.
To enable this property, set DelayProfile
to 'Custom'
.
Data Types: double
AnglesZoA
— Zenith of arrival angle in degrees0.0
(default)  numeric scalar  row vectorZenith of arrival angle in degrees, specified as a numeric scalar or row vector. The vector elements specify the angles for each cluster.
To enable this property, set DelayProfile
to 'Custom'
.
Data Types: double
AnglesZoD
— Zenith of departure angle in degrees0.0
(default)  numeric scalar  row vectorZenith of departure angle in degrees, specified as a numeric scalar or row vector. The vector elements specify the angles for each cluster.
To enable this property, set DelayProfile
to 'Custom'
.
Data Types: double
HasLOSCluster
— Line of sight cluster of the delay profilefalse
(default)  true
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
.
To enable this property, set DelayProfile
to 'Custom'
.
Data Types: logical
KFactorFirstCluster
— Kfactor in first cluster of delay profile in dB13.3
(default)  numeric scalarKfactor in the first cluster of the delay profile in dB, specified as a numeric scalar. The default value corresponds to the Kfactor in the first cluster of CDLD as defined in TR 38.901 Section 7.7.1, Table 7.7.14.
To enable this property, set DelayProfile
to 'Custom'
and HasLOSCluster
to true
.
Data Types: double
AngleScaling
— Apply scaling of anglesfalse
(default)  true
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.
To enable this property, set DelayProfile
to 'CDLA'
, 'CDLB'
, 'CDLC'
,
'CDLD'
, or 'CDLE'
. This property does not
apply for custom delay profile.
Data Types: logical
AngleSpreads
— Scaled or clusterwise RMS angle spreads in degrees[5.0 11.0 3.0 3.0]
(default)  fourelement row vectorScaled or clusterwise root mean square (RMS) angle spreads in degrees, specified as a fourelement 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 (AS_{desired}), 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 'CDLA'
,
'CDLB'
, 'CDLC'
,
'CDLD'
, or 'CDLE'
.
[C_{ASD} C_{ASA} C_{ZSD} C_{ZSA}] — Use this vector to specify clusterwise RMS angle spreads for scaling ray offset angles within a cluster, as described in TR 38.901 Section 7.7.1, Step1, where:
C_{ASD} is the clusterwise RMS azimuth spread of departure angles
C_{ASA} is the clusterwise RMS azimuth spread of arrival angles
C_{ZSD} is the clusterwise RMS zenith spread of departure angles
C_{ZSA} is the clusterwise 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 clusterwise angle spreads of CDLA as defined in TR 38.901 Section 7.7.1 Table 7.7.11.
To enable this property, set DelayProfile
to 'Custom'
or AngleScaling
to true
.
Data Types: double
MeanAngles
— Scaled mean angles in degrees[0.0 0.0 0.0 0.0]
(default)  fourelement row vectorScaled mean angles in degrees, specified as a fourelement 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 ($${\mu}_{\Phi ,\text{desired}}$$).
To enable this property, set AngleScaling
to true
.
Data Types: double
XPR
— Crosspolarization power ratio in dB10.0
(default)  numeric scalarCrosspolarization power ratio in dB, specified as a numeric scalar. The default value corresponds to the clusterwise crosspolarization power ratio of CDLA as defined in TR 38.901 Section 7.7.1, Table 7.7.11.
To enable this property, set DelayProfile
to 'Custom'
.
Data Types: double
DelaySpread
— Desired RMS delay spread in seconds30e9
(default)  numeric scalarDesired RMS delay spread in seconds, specified as a numeric scalar. For examples of
desired RMS delay spreads, DS_{desired}
,
see TR 38.901 Section 7.7.3 and Tables 7.7.31 and 7.7.32.
To enable this property, set DelayProfile
to 'CDLA'
, 'CDLB'
, 'CDLC'
,
'CDLD'
, or 'CDLE'
. This property does not
apply for custom delay profile.
Data Types: double
CarrierFrequency
— Carrier frequency in Hz4e9
(default)  numeric scalarCarrier frequency in Hz, specified as a numeric scalar.
Data Types: double
MaximumDopplerShift
— Maximum Doppler shift in Hz5
(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
UTDirectionOfTravel
— User terminal direction of travel in degrees[0; 90]
(default)  twoelement column vectorUser terminal (UT) direction of travel in degrees, specified as a twoelement column vector. The vector elements specify the azimuth and the elevation components [azimuth; elevation].
Data Types: double
KFactorScaling
— Kfactor scalingfalse
(default)  true
Kfactor scaling, specified as false
or true
.
When set to true
, the KFactor
property specifies the desired Kfactor and the object applies
Kfactor scaling as described in TR 38.901 Section 7.7.6.
Kfactor scaling modifies both the path delays and path powers.
To enable this property, set DelayProfile
to 'CDLD'
or 'CDLE'
.
Data Types: double
KFactor
— Desired Kfactor for scaling in dB9.0
(default)  numeric scalarDesired Kfactor for scaling in dB, specified as a numeric scalar. For typical Kfactor values, see TR 38.901 Section 7.7.6 and Table 7.56.
Kfactor scaling modifies both the path delays and path powers.
Kfactor
applies to the overall delay profile.
Specifically, the Kfactor after the scaling is
K_{model}
as 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
Laplacian clusters, including the Laplacian part of the first cluster.
To enable this property, set KFactorScaling
to true
.
Data Types: double
SampleRate
— Sample rate of input signal in Hz30.72e6
(default)  positive numeric scalarSample rate of input signal in Hz, specified as a positive numeric scalar.
Data Types: double
TransmitAntennaArray
— Transmit antenna array characteristicsTransmit antenna array characteristics, specified as a structure that contains these fields:
Parameter Field  Values  Description 

Size 
row vector 
Size of antenna array [M N P M_{g} N_{g}], where:
The antenna array elements are mapped panelwise to the waveform channels (columns) in the order that a 5D array of size MbyNbyPbyM_{g}byN_{g} is linearly indexed across the first dimension to the last. For example, an antenna array of size 
ElementSpacing 
row vector 
Element spacing, in wavelengths, specified as a row vector of the form [λ_{v} λ_{h} dg_{v} dg_{h}]. The vector elements represent the vertical and horizontal element spacing and the vertical and horizontal panel spacing, respectively. 
PolarizationAngles 
row vector 
Polarization angles in degrees, specified as a row vector of the form [θ ρ]. Polarization angles apply only when the number of polarizations is 2. 
Orientation 
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 xaxis. 
Element 

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

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
ReceiveAntennaArray
— Receive antenna array characteristicsReceive antenna array characteristics, specified as a structure that contains these fields:
Parameter Field  Values  Description 

Size 
row vector 
Size of antenna array [M N P M_{g} N_{g}], where:
The antenna array elements are mapped panelwise to the waveform channels (columns) in the order that a 5D array of size MbyNbyPbyM_{g}byN_{g} is linearly indexed across the first dimension to the last. For example, an antenna array of size 
ElementSpacing 
row vector 
Element spacing, in wavelengths, specified as a row vector of the form [λ_{v} λ_{h} dg_{v} dg_{h}]. The vector elements represent the vertical and horizontal element spacing and the vertical and horizontal panel spacing, respectively. 
PolarizationAngles 
row vector 
Polarization angles in degrees, specified as a row vector of the form [θ ρ]. Polarization angles apply only when the number of polarizations is 2. 
Orientation 
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 xaxis. 
Element 

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

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
SampleDensity
— Number of time samples per half wavelength64
(default)  Inf
 numeric scalarNumber 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
NormalizePathGains
— Normalize path gainstrue
(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 seconds0.0
(default)  numeric scalarTime offset of fading process in seconds, specified as a numeric scalar.
Tunable: Yes
Data Types: double
NumStrongestClusters
— Number of strongest clusters to split into subclusters0
(default)  numeric scalarNumber of strongest clusters to split into subclusters, specified as a numeric scalar. See TR 38.901 Section 7.5, Step 11.
To enable this property, set DelayProfile
to 'Custom'
.
Data Types: double
ClusterDelaySpread
— Cluster delay spread in seconds3.90625e9
(default)  nonnegative scalarCluster 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.
To enable this property, set DelayProfile
to 'Custom'
and NumStrongestClusters
to a value greater than zero.
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 stream73
(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
ChannelFiltering
— Fading channel filteringtrue
(default)  false
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
NumTimeSamples
— Number of time samples30720
(default)  positive integerNumber of time samples, specified as a positive integer. Use this property to set the duration of the fading process realization.
Tunable: Yes
To enable this property, set ChannelFiltering
to false
.
Data Types: double
NormalizeChannelOutputs
— Normalize channel outputs by the number of receive antennastrue
(default)  false
Normalize channel outputs by the number of receive antennas, specified as
true
or false
.
To enable this property, set ChannelFiltering
to true
.
Data Types: logical
[
also returns the sample times of the channel snapshots of signalOut
,pathGains
,sampleTimes
] = cdl(signalIn
)pathGains
(firstdimension elements).
[
returns only the path gains and the sample times. In this case, the pathGains
,sampleTimes
] = cdl()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
.
signalIn
— Input signalInput signal, specified as a complex scalar, vector, or N_{S}byN_{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 signalOutput signal, returned as a complex scalar, vector, or N_{S}byN_{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 processMIMO channel path gains of the fading process, returned as an N_{CS}byN_{P}byN_{T}byN_{R} complex matrix, where:
N_{CS} is the number of channel
snapshots, controlled by the SampleDensity
property of cdl
.
N_{P} is the number of paths,
specified by the size of the PathDelays
property of cdl
.
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 channel snapshots, returned as an
N_{CS}by1 column vector, where
N_{CS} is the number of channel snapshots
controlled by the SampleDensity
property.
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)
nrCDLChannel
info  Get characteristic information about linklevel MIMO fading channel 
getPathFilters  Get path filter impulse response for linklevel MIMO fading channel 
Transmit waveform through a clustered delay line (CDL) channel model with delay profile CDLD from TR 38.901 Section 7.7.1.
Define the channel configuration structure using an nrCDLChannel
System object. Use delay profile CDLD, a delay spread of 10 ns, and UT velocity of 15 km/h:
v = 15.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 cdl = nrCDLChannel; cdl.DelayProfile = 'CDLD'; cdl.DelaySpread = 10e9; 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 2by2 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 crosspolarized colocated 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 * 1e3; 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 CDLB 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 = 'CDLB';
cdl.MaximumDopplerShift = 300.0;
cdl.SampleRate = 10e3;
cdl.Seed = 19;
Configure the transmit and receive antenna arrays for singleinput/singleoutput (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 ${\mathit{F}}_{\mathrm{CS}}=2\mathit{S}\times \mathit{MaximumDopplerShift}$.
The nrCDLChannel
object applies the channel snapshots to the input waveform by means of zeroorder 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:(T1))  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(sampletimestau/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');
[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.
Usage notes and limitations:
See System Objects in MATLAB Code Generation (MATLAB Coder).
A modified version of this example exists on your system. Do you want to open this version instead?
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.