Send signal through TDL channel model
The nrTDLChannel
System object™ sends an input signal through a tapped delay line (TDL) multi-input multi-output
(MIMO) link-level fading channel to obtain the channel-impaired signal. The object implements
the following aspects of TR 38.901 [1]:
Section 7.7.2: TDL models
Section 7.7.3: Scaling of delays
Section 7.7.5.2 TDL extension: Applying a correlation matrix
Section 7.7.6: K-factor for LOS channel models
To send a signal through the TDL MIMO channel model:
Create the nrTDLChannel
object and set its properties.
Call the object with arguments, as if it were a function.
To learn more about how System objects work, see What Are System Objects?.
creates a TDL MIMO
channel System object.tdl
= nrTDLChannel
creates the object with properties set by using one or more name-value pairs. Enclose
the property name inside quotes, followed by the specified value. Unspecified properties
take default values.tdl
= nrTDLChannel(Name,Value
)
tdl =
nrTDLChannel('DelayProfile','TDL-D','DelaySpread',2e-6)
creates a TDL
channel model with TDL-D delay profile and a 2-microseconds delay spread.Unless otherwise indicated, properties are nontunable, which means you cannot change their
values after calling the object. Objects lock when you call them, and the
release
function unlocks them.
If a property is tunable, you can change its value at any time.
For more information on changing property values, see System Design in MATLAB Using System Objects.
DelayProfile
— TDL delay profile'TDL-A'
(default) | 'TDL-B'
| 'TDL-C'
| 'TDL-D'
| 'TDL-E'
| 'Custom'
TDL delay profile, specified as one of 'TDL-A'
,
'TDL-B'
, 'TDL-C'
, 'TDL-D'
,
'TDL-E'
, or 'Custom'
. See TR 38.901 Section
7.7.2, Tables 7.7.2-1 to 7.7.2-5.
When you set this property to 'Custom'
, configure the delay
profile using properties PathDelays
, AveragePathGains
, FadingDistribution
, and KFactorFirstTap
.
Data Types: char
| string
PathDelays
— Discrete path delays in 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
FadingDistribution
— Fading process statistical distribution'Rayleigh'
(default) | 'Rician'
Fading process statistical distribution, specified as 'Rayleigh'
or 'Rician'
.
To enable this property, set DelayProfile
to 'Custom'
.
Data Types: char
| string
KFactorFirstTap
— K-factor of first tap of delay profile in dB13.3
(default) | numeric scalarK-factor of first tap of delay profile in dB, specified as a numerical scalar. The default value corresponds to the K-factor of the first tap of TDL-D as defined in TR 38.901 Section 7.7.2, Table 7.7.2-4.
To enable this property, set DelayProfile
to 'Custom'
and FadingDistribution
to 'Rician'
.
Data Types: double
DelaySpread
— Desired RMS delay spread in seconds30e-9
(default) | numeric scalarDesired root mean square (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 '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 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
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 'TDL-D'
or 'TDL-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
Rayleigh paths, including the Rayleigh part of the first path.
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
MIMOCorrelation
— Correlation between UE and BS antennas'Low'
(default) | 'Medium'
| 'Medium-A'
| 'UplinkMedium'
| 'High'
| 'Custom'
Correlation between user equipment (UE) and base station (BS) antennas, specified as one of these values:
'Low'
or 'High'
— Applies to both uplink
and downlink. 'Low'
is equivalent to no correlation between
antennas.
'Medium'
or 'Medium-A'
— For downlink,
see TS 36.101 Annex B.2.3.2. For uplink, see TS 36.104 Annex B.5.2. The TransmissionDirection
property controls the transmission
direction.
'UplinkMedium'
— See TS 36.104, Annex B.5.2.
'Custom'
— The ReceiveCorrelationMatrix
property specifies the correlation between
UE antennas, and the TransmitCorrelationMatrix
property specifies the correlation between
BS antennas. See TR 38.901 Section 7.7.5.2.
For more details on correlation between UE and BS antennas, see TS 36.101 [2] and TS 36.104 [3]
Data Types: char
| string
Polarization
— Antenna polarization arrangement'Co-Polar'
(default) | 'Cross-Polar'
| 'Custom'
Antenna polarization arrangement, specified as 'Co-Polar'
,
'Cross-Polar'
, 'Custom'
.
Data Types: char
| string
TransmissionDirection
— Transmission direction'Downlink'
(default) | 'Uplink'
Transmission direction, specified as 'Downlink'
or
'Uplink'
.
To enable this property, set MIMOCorrelation
to 'Low'
,
'Medium'
, 'Medium-A'
,
'UplinkMedium'
, or 'High'
.
Data Types: char
| string
NumTransmitAntennas
— Number of transmit antennas1
(default) | positive integerNumber of transmit antennas, specified as a positive integer.
To enable this property, set MIMOCorrelation
to 'Low'
,
'Medium'
, 'Medium-A'
,
'UplinkMedium'
, or 'High'
, or set both
MIMOCorrelation
and Polarization
to 'Custom'
.
Data Types: double
NumReceiveAntennas
— Number of receive antennasNumber of receive antennas, specified as a positive integer.
To enable this property, set MIMOCorrelation
to 'Low'
,
'Medium'
, 'Medium-A'
,
'UplinkMedium'
, or 'High'
.
Data Types: double
TransmitCorrelationMatrix
— Spatial correlation of transmitter[1]
(default) | 2-D matrix | 3-D arraySpatial correlation of transmitter, specified as a 2-D matrix or 3-D array.
If the channel is frequency-flat (PathDelays
is a scalar), specify
TransmitCorrelationMatrix
as a 2-D Hermitian matrix of size
NT-by-NT.
NT 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
NP), specify
TransmitCorrelationMatrix
as one of these arrays:
2-D Hermitian matrix of size NT-by-NT with element properties as previously described. Each path has the same transmit correlation matrix.
3-D array of size NT-by-NT-by-NP, where each submatrix of size NT-by-NT is a Hermitian matrix with element properties as previously described. Each path has its own transmit correlation matrix.
To enable this property, set MIMOCorrelation
to 'Custom'
and Polarization
to either 'Co-Polar'
or 'Cross-Polar'
.
Data Types: double
Complex Number Support: Yes
ReceiveCorrelationMatrix
— Spatial correlation of receiver[1 0; 0 1]
(default) | 2-D matrix | 3-D arraySpatial correlation of receiver, specified as a 2-D matrix or 3-D array.
If the channel is frequency-flat (PathDelays
is a scalar), specify
ReceiveCorrelationMatrix
as a 2-D Hermitian matrix of size
NR-by-NR.
NR 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
NP), specify
ReceiveCorrelationMatrix
as one of these arrays:
2-D Hermitian matrix of size NR-by-NR with element properties as previously described. Each path has the same receive correlation matrix.
3-D array of size NR-by-NR-by-NP, where each submatrix of size NR-by-NR is a Hermitian matrix with element properties as previously described. Each path has its own receive correlation matrix.
To enable this property, set MIMOCorrelation
to 'Custom'
and Polarization
to either 'Co-Polar'
or 'Cross-Polar'
.
Data Types: double
Complex Number Support: Yes
TransmitPolarizationAngles
— Transmit polarization slant angles in degrees[45 -45]
(default) | row vectorTransmit polarization slant angles in degrees, specified as a row vector.
To enable this property, set MIMOCorrelation
to 'Custom'
and Polarization
to 'Cross-Polar'
.
Data Types: double
ReceivePolarizationAngles
— Receive polarization slant angles in degrees[90 0]
(default) | row vectorReceive polarization slant angles in degrees, specified as a row vector.
To enable this property, set MIMOCorrelation
to 'Custom'
and Polarization
to 'Cross-Polar'
.
Data Types: double
XPR
— Cross-polarization power ratio in dB10.0
(default) | numeric scalar | row vectorCross-polarization power ratio in dB, specified as a numeric scalar or a row vector. This property corresponds to the ratio between the vertical-to-vertical (PVV) and vertical-to-horizontal (PVH) 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 NP), specify
XPR
as one of these values:
Scalar — Each path has the same cross-polarization power ratio.
Row vector of size 1-by-NP — Each path has its own cross-polarization power ratio.
The default value corresponds to the cluster-wise cross-polarization power ratio of CDL-A as defined in TR 38.901 Section 7.7.1, Table 7.7.1-1.
To enable this property, set MIMOCorrelation
to 'Custom'
and Polarization
to 'Cross-Polar'
.
Data Types: double
SpatialCorrelationMatrix
— Combined correlation for channel[1 0; 0 1]
(default) | 2-D matrix | 3-D arrayCombined correlation for the channel, specified as 2-D matrix or 3-D array. The matrix determines the product of the number of transmit antennas (NT) and the number of receive antennas (NR).
If the channel is frequency-flat (PathDelays
is a scalar), specify SpatialCorrelationMatrix
as a 2-D
Hermitian matrix of size (NT ⨉
NR)-by-(NT
⨉ NR).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 NP), specify
SpatialCorrelationMatrix
as one of these arrays:
2-D Hermitian matrix of size (NT ⨉ NR)-by-(NT ⨉ NR) with off-diagonal element properties as previously described. Each path has the same spatial correlation matrix.
3-D array of size (NT ⨉ NR)-by-(NT ⨉ NR)-by-NP array — where each matrix of size (NT ⨉ NR)-by-(NT ⨉ NR) is a Hermitian matrix with off-diagonal element properties as previously described. Each path has its own spatial correlation matrix.
To enable this property, set MIMOCorrelation
to 'Custom'
and Polarization
to 'Custom'
.
Data Types: double
NormalizePathGains
— Normalize path 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
NumSinusoids
— Number of modeling sinusoids48
(default) | positive integerNumber of modeling sinusoids, specified as a positive integer. These sinusoids model the fading process.
Data Types: double
RandomStream
— Source of random number stream'mt19937ar with seed'
(default) | 'Global stream'
Source of random number stream, specified as one of the following:
'mt19937ar with seed'
— The object uses the mt19937ar
algorithm for normally distributed random number generation. Calling the reset
function resets the filters
and reinitializes the random number stream to the value of the Seed
property.
'Global stream'
— The object uses the current global random
number stream for normally distributed random number generation. Calling the
reset
function resets only the
filters.
Seed
— Initial seed of mt19937ar random number 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
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
.
Data Types: logical
[
also returns the sample times of the channel snapshots of the path gains.signalOut
,pathGains
,sampleTimes
] = tdl(signalIn
)
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 NS-by-NP-by-NT-by-NR complex matrix, where:
NS is the number of samples.
NP is the number of paths,
specified by the length of the PathDelays
property of tdl
.
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 the channel snapshots of the path gains, returned as an
NS-by-1 column vector of real numbers.
NS is the first dimension of
pathGains
that corresponds to the number of samples.
Data Types: double
To use an object function, specify the
System object as the first input argument. For
example, to release system resources of a System object named obj
, use
this syntax:
release(obj)
nrTDLChannel
info | Get characteristic information about link-level MIMO fading channel |
getPathFilters | Get path filter impulse response for link-level MIMO fading channel |
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 = dsp.SpectrumAnalyzer('SampleRate',tdl.SampleRate,... 'AveragingMethod','Exponential','ForgettingFactor',0.99 ); analyzer.Title = ['Received Signal Spectrum ' tdl.DelayProfile]; analyzer(rxWaveform);
Plot the path gains of a tapped delay line (TDL) single-input/single-output (SISO) channel using an nrTDLChannel
System object.
Configure a channel with delay profile TDL-E from TR 38.901 Section 7.7.2. Set the maximum Doppler shift to 70 Hz and enable path gain output.
tdl = nrTDLChannel;
tdl.SampleRate = 500e3;
tdl.MaximumDopplerShift = 70;
tdl.DelayProfile = 'TDL-E';
Configure 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)');
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 = dsp.SpectrumAnalyzer('SampleRate',tdl.SampleRate); analyzer.Title = ['Received Signal Spectrum ' tdl.DelayProfile]; analyzer(rxWaveform);
Transmit waveform through a tapped delay line (TDL) channel model from TR 38.901 Section 7.7.2 with customized delay profile.
Define the channel configuration structure using an nrTDLChannel
System object. Customize the delay profile with two taps.
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);
[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.
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?