Send signal through CDL channel model
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:
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?.
creates a CDL MIMO
channel System object.cdl
= nrCDLChannel
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.cdl
= nrCDLChannel(Name,Value
)
cdl =
nrCDLChannel('DelayProfile','CDL-D','DelaySpread',2e-6)
creates the channel
object with CDL-D 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.
DelayProfile
— CDL delay profile'CDL-A'
(default) | 'CDL-B'
| 'CDL-C'
| 'CDL-D'
| 'CDL-E'
| 'Custom'
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
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
— K-factor in first cluster of delay profile in dB13.3
(default) | numeric scalarK-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.
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 'CDL-A'
, 'CDL-B'
, 'CDL-C'
,
'CDL-D'
, or 'CDL-E'
. This property does not
apply for custom delay profile.
Data Types: logical
AngleSpreads
— Scaled or cluster-wise RMS angle spreads in degrees[5.0 11.0 3.0 3.0]
(default) | four-element row vectorScaled 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.
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) | four-element row vectorScaled 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 ().
To enable this property, set AngleScaling
to true
.
Data Types: double
XPR
— Cross-polarization power ratio in dB10.0
(default) | numeric scalarCross-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.
To enable this property, set DelayProfile
to 'Custom'
.
Data Types: double
DelaySpread
— Desired RMS delay spread in seconds30e-9
(default) | numeric scalarDesired 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.
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
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) | two-element column vectorUser 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
KFactorScaling
— K-factor scalingfalse
(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.
To enable this property, set DelayProfile
to 'CDL-D'
or 'CDL-E'
.
Data Types: double
KFactor
— Desired K-factor for scaling in dB9.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.
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.
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 Mg Ng], where:
The For
example, this figure shows how the object maps the input signal
|
ElementSpacing |
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 |
row vector |
Polarization angles in degrees, specified as a row vector of the form [θ ρ]. |
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 x-axis. |
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 Mg Ng], where:
The For
example, this figure shows how the object maps an antenna array of size
|
ElementSpacing |
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 |
row vector |
Polarization angles in degrees, specified as a row vector of the form [θ ρ]. |
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 x-axis. |
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.90625e-9
(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
(first-dimension 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 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
signalOut
— Output signalOutput 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
pathGains
— MIMO channel path gains of fading processMIMO 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
sampleTimes
— Sample times of channel snapshotsSample 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
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 link-level MIMO fading channel |
getPathFilters | Get path filter impulse response for link-level MIMO fading channel |
displayChannel | Visualize and explore CDL channel model characteristics |
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 .
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');
[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).
You have a modified version of this example. Do you want to open this example with your edits?