Model NR NTN Channel
This example shows how to model these New Radio (NR) non-terrestrial network (NTN) channels.
These channels model different NTN deployment scenarios, covering both geosynchronous orbit (GSO) satellites and non-geosynchronous orbit (NGSO) satellites.
Introduction
In this example, you generate the path gains of the NTN channel model by applying the Doppler shift due to satellite movement, to the path gains generated from a base channel model. The example implements the base channel model for each NTN channel model using these standards:
Flat fading narrowband channel — ITU-R P.681-11, which defines the propagation data for a land mobile-satellite (LMS) channel [4].
Frequency selective CDL channel — 3GPP TR 38.901 section 6.9.1, which defines the terrestrial CDL channel [2].
Frequency selective TDL channel — 3GPP TR 38.901 section 6.9.2, which defines the terrestrial TDL channel [2].
The Doppler shift due to satellite movement depends on the satellite orbit, elevation angle, and carrier frequency. The Doppler shift due to satellite motion , as defined in 3GPP TR 38.811 section 6.7.1 and section 6.9.2 [1], is:
is the speed of light ().
is the earth radius ().
is the satellite altitude.
is the satellite elevation angle.
is the carrier frequency.
is the satellite speed and is given by, where G is gravitational constant () and M is mass of Earth ().
This example uses:
dopplerShiftCircularOrbitfunction to calculate the Doppler shift due to satellite movement.p681LMSChannelSystem object™ to model the NTN narrowband channelnrCDLChannelSystem object™ to model the NTN CDL channelnrTDLChannelSystem object™ to model the NTN TDL channel
Set NTN Channel Common Parameters
Set the common parameters required to model an NTN channel. This example models a low Earth orbit (LEO) satellite moving at an altitude of 600 km and is operating in the S-band. Assume a mobile or user equipment (UE) speed of 3 km/hr. These default parameters are from 3GPP TR 38.821 table 6.1.2-4 [3].
commonParams = struct; commonParams.CarrierFrequency = 2e9; % In Hz commonParams.ElevationAngle = 50; % In degrees commonParams.SatelliteAltitude = 600000; % In m commonParams.MobileAltitude = 0; % In m commonParams.MobileSpeed = 3*1000/3600; % In m/s commonParams.SampleRate = 7680000; % In Hz % Set the random stream and seed, for reproducibility commonParams.RandomStream ="mt19937ar with seed"; commonParams.Seed = 73; % Set the number of sinusoids used in generation of Doppler spread commonParams.NumSinusoids = 48; % Calculate the Doppler shift due to satellite movement satelliteDopplerShift = dopplerShiftCircularOrbit(... commonParams.ElevationAngle,commonParams.SatelliteAltitude,... commonParams.MobileAltitude,commonParams.CarrierFrequency); % Calculate the maximum Doppler shift due to mobile movement c = physconst("lightspeed"); mobileMaxDoppler = commonParams.MobileSpeed*commonParams.CarrierFrequency/c;
NTN Narrowband Channel
This example supports all the land-mobile satellite (LMS) scenarios available for the NTN flat fading narrowband channel, as defined in 3GPP TR 38.811 section 6.7.1 [1]. The LMS scenarios defined for S-band are:
Urban
Suburban
RuralWooded
Residential
The LMS scenarios defined for Ka-band are:
Suburban
RuralWooded
Follow these steps to model the NTN flat fading narrowband channel, as specified in 3GPP TR 38.811 section 6.7.1 [1].
Set channel parameters specific to an NTN flat fading narrowband channel.
Generate the NTN flat fading narrowband channel.
Visualize the spectrum of the faded or filtered signal.
The NTN flat fading channel is used for narrowband single-input-single-output (SISO) simulations.
Set NTN Narrowband Channel Parameters
Set the NTN flat fading narrowband channel parameters using the defined common parameters and the parameters specific to NTN narrowband channel. This example configures an urban LMS scenario for the NTN narrowband channel.
% Initialize the NTN flat fading narrowband channel ntnNarrowbandChan = p681LMSChannel; ntnNarrowbandChan.SampleRate = commonParams.SampleRate; ntnNarrowbandChan.CarrierFrequency = commonParams.CarrierFrequency; ntnNarrowbandChan.ElevationAngle = commonParams.ElevationAngle; ntnNarrowbandChan.MobileSpeed = commonParams.MobileSpeed; ntnNarrowbandChan.SatelliteDopplerShift = satelliteDopplerShift; ntnNarrowbandChan.RandomStream = commonParams.RandomStream; ntnNarrowbandChan.Seed = commonParams.Seed; ntnNarrowbandChan.Environment ="Urban"; ntnNarrowbandChan.AzimuthOrientation = 0; ntnNarrowbandChan.FadingTechnique =
"Sum of sinusoids"; ntnNarrowbandChan.NumSinusoids = commonParams.NumSinusoids; % Set the below properties when Environment is set to Custom if strcmpi(ntnNarrowbandChan.Environment,"Custom") ntnNarrowbandChan.StateDistribution = [3.0639 2.9108; 1.6980 1.2602]; ntnNarrowbandChan.MinStateDuration = [10 6]; ntnNarrowbandChan.DirectPathDistribution = [-1.8225 -15.4844; 1.1317 3.3245]; ntnNarrowbandChan.MultipathPowerCoefficients = [-0.0481 0.9434; -14.7450 -1.7555]; ntnNarrowbandChan.StandardDeviationCoefficients = [-0.4643 -0.0798; 0.3334 2.8101]; ntnNarrowbandChan.DirectPathCorrelationDistance = [1.7910 1.7910]; ntnNarrowbandChan.TransitionLengthCoefficients = [0.0744; 2.1423]; ntnNarrowbandChan.StateProbabilityRange = [0.05 0.1; 0.95 0.9]; end
Get information about the P.681-11 LMS base channel model and check that the channel filter delay is 0 due to the flat fading nature of the channel.
p681ChannelInfo = info(ntnNarrowbandChan)
p681ChannelInfo = struct with fields:
PathDelays: 0
ChannelFilterDelay: 0
ChannelFilterCoefficients: 1
NumSamplesProcessed: 0
Generate NTN Narrowband Channel
Generate the path gains of NTN flat fading narrowband channel and apply channel filtering to a random input signal using the resultant path gains.
% Generate a random input
rng(commonParams.Seed)
in = randn(commonParams.SampleRate,1,like=1i);Generate the faded waveform for the NTN flat fading narrowband channel.
[narrowbandOut,narrowbandPathGains,narrowbandSampleTimes] = ...
ntnNarrowbandChan(in);Visualize NTN Narrowband Channel Received Spectrum
Plot the received spectrum of the faded signal from the NTN flat fading narrowband channel.
ntnNarrowbandAnalyzer = spectrumAnalyzer( ... SampleRate = ntnNarrowbandChan.SampleRate); ntnNarrowbandAnalyzer.Title = "Received Signal Spectrum - NTN Narrowband Channel in " ... + string(ntnNarrowbandChan.Environment) + " Environment"; ntnNarrowbandAnalyzer.ShowLegend = true; ntnNarrowbandAnalyzer.ChannelNames = "Rx Antenna 1"; ntnNarrowbandAnalyzer(narrowbandOut)

NTN CDL Channel
This example supports the four channel profiles of the NTN CDL channel defined in 3GPP TR 38.811 section 6.9.1 [1]. These four channel profiles are:
NTN-CDL-A
NTN-CDL-B
NTN-CDL-C
NTN-CDL-D
The 3GPP specification defines the NTN-CDL-A and NTN-CDL-B channel profiles for non-line-of-sight (NLOS) conditions, and the NTN-CDL-C and NTN-CDL-D channel profiles for line-of-sight (LOS) conditions. The specification defines all four channel profiles at an elevation angle of 50 degrees. These are the key distinguishing factors between the NTN CDL channel [1] and the terrestrial CDL channel [2], which primarily arise due to the large propagation delay and different scattering environment in NTN scenarios.
Angle of departure — In the NTN CDL channel, the azimuth angle of departure and zenith angle of departure from the satellite (the transmitter) are the same for all clusters, whereas, in the terrestrial CDL channel, these angles can differ for each cluster.
Angular spread — In the NTN CDL channel, the azimuth spread of departure and zenith spread of departure from the satellite are zero. This means that you can effectively represent all departure rays using a single departure ray. In contrast, the terrestrial CDL channel has non-zero angular spreads.
Doppler shift — The NTN CDL channel accounts for the time evolution of Doppler shift caused by both satellite motion and UE movement. The terrestrial CDL channel, however, considers only the Doppler shift due to UE movement.
Delay profile — The NTN CDL channel delay profiles contain fewer clusters compared to those of the terrestrial CDL channel.
Follow these steps to model the NTN frequency selective fading CDL channel, as specified in 3GPP TR 38.811 section 6.9.1 [1].
Set channel parameters specific to the NTN frequency selective fading CDL channel.
Generate the NTN frequency selective fading CDL channel.
Visualize the spectrum of the faded or filtered signal.
Set NTN CDL Channel Parameters
Set the NTN frequency selective fading CDL channel parameters using the defined common parameters and the parameters specific to the NTN CDL channel. By default, this example models a downlink channel (in which the satellite is the transmitter and the UE is the receiver). To model an uplink channel, use the swapTransmitAndReceive function to reverse the link direction of nrCDLChannel before calling the step function.
% Initialize the NTN CDL channel ntnCDLChan = nrCDLChannel; ntnCDLChan.DelayProfile ="NTN-CDL-A"; ntnCDLChan.DelaySpread = 30e-9; % In s ntnCDLChan.SatelliteElevationAngle = commonParams.ElevationAngle; ntnCDLChan.CarrierFrequency = commonParams.CarrierFrequency; ntnCDLChan.SampleRate = commonParams.SampleRate; ntnCDLChan.RandomStream = commonParams.RandomStream; ntnCDLChan.Seed = commonParams.Seed; % Set the antenna configuration % The number of elements of an array is the product of all the elements in % the Size field. Size is a five-element vector of form [M N P Mg Ng], % where M is the number of rows in the antenna array, N is the number of % columns in the antenna array, P is the number of polarizations, and Mg % and Ng are the number of rows and columns of the array panels, % respectively. The Element field defines the antenna element in the array. ntnCDLChan.TransmitAntennaArray.Size = [1 1 1 1 1]; ntnCDLChan.TransmitAntennaArray.PolarizationAngles = 0; ntnCDLChan.TransmitAntennaArray.Element =
"38.901"; ntnCDLChan.ReceiveAntennaArray.Size = [1 1 2 1 1]; ntnCDLChan.ReceiveAntennaArray.PolarizationAngles = [45 -45]; ntnCDLChan.ReceiveAntennaArray.Element =
"isotropic";
Use the info object function to observe the path delays, average path gains, arrival angles, departure angles, and the K-factor first tap value. Use this information to verify that the channel has been configured for the defined NTN channel delay profile and delay spread.
cdlChanInfo = info(ntnCDLChan)
cdlChanInfo = struct with fields:
KFactorFirstCluster: -Inf
ClusterTypes: {'NLOS' 'NLOS' 'NLOS'}
PathDelays: [0 3.2433e-08 8.5248e-08]
AveragePathGains: [0 -4.6750 -6.4820]
AnglesAoD: [0 0 0]
AnglesAoA: [178.8000 -115.7000 111.5000]
AnglesZoD: [140 140 140]
AnglesZoA: [35.6000 22.9000 127.4000]
ClusterAngleSpreads: [0 15 0 7]
XPR: 10
NumTransmitAntennas: 1
NumInputSignals: 1
NumReceiveAntennas: 2
NumOutputSignals: 2
ChannelFilterDelay: 7
MaximumChannelDelay: 8
Use the MaximumDopplerShift and UTDirectionOfTravel properties to model Doppler shift in the NTN CDL channel.
The Doppler shift due to satellite motion is translated as a frequency shift, as there is no spread in departure angles. Set the second element of the
MaximumDopplerShiftproperty to the Doppler shift caused by satellite motion. Then, set the second column of theUTDirectionOfTravelproperty to the corresponding departure angles.The movement of the UE introduces a Doppler or frequency spread due to a scattering environment. To model the frequency spread, set the first element of the
MaximumDopplerShiftproperty to the maximum Doppler shift due to UE movement. Then, specify the first column of theUTDirectionOfTravelproperty to define the direction of UE movement.
ntnCDLChan.MaximumDopplerShift = [mobileMaxDoppler satelliteDopplerShift];
ntnCDLChan.UTDirectionOfTravel = [0 cdlChanInfo.AnglesAoD(1); 90 cdlChanInfo.AnglesZoD(1)];
% Orient the transmit beam in the direction of the departure angle
ntnCDLChan.TransmitArrayOrientation = [cdlChanInfo.AnglesAoD(1); cdlChanInfo.AnglesZoD(1)-90; 0];Generate NTN CDL Channel
Generate the path gains of the NTN frequency selective fading CDL channel, and apply channel filtering to a random input signal using the resultant path gains.
% Generate a random input
rng(commonParams.Seed)
in = randn(commonParams.SampleRate,cdlChanInfo.NumTransmitAntennas,like=1i);Generate the faded waveform for the NTN CDL channel.
[cdlOut,cdlPathGains,cdlSampleTimes] = ntnCDLChan(in);
Visualize NTN CDL Channel Received Spectrum
Plot the received spectrum of the faded signal from the NTN frequency selective fading CDL channel.
ntnCDLAnalyzer = spectrumAnalyzer(SampleRate = ntnCDLChan.SampleRate); ntnCDLAnalyzer.Title = "Received Signal Spectrum - NTN CDL Channel with " ... + string(ntnCDLChan.DelayProfile) + " Delay Profile"; ntnCDLAnalyzer.ShowLegend = true; for nRx = 1:size(cdlOut,2) ntnCDLAnalyzer.ChannelNames{nRx} = "Rx Antenna " + nRx; end ntnCDLAnalyzer(cdlOut)

NTN TDL Channel
This example supports the four channel profiles of the NTN TDL channel defined in 3GPP TR 38.811 section 6.9.2 [1]. These four channel profiles are:
NTN-TDL-A
NTN-TDL-B
NTN-TDL-C
NTN-TDL-D
The 3GPP specification defines the NTN-TDL-A and NTN-TDL-B channel profiles for NLOS conditions, and the NTN-TDL-C and NTN-TDL-D channel profiles for LOS conditions. The specification defines all four channel profiles at an elevation angle of 50 degrees. These are the key distinguishing factors between the NTN TDL channel [1] and the terrestrial TDL channel [2], which primarily arise due to the large propagation delay and different scattering environment in NTN scenarios.
Doppler shift — The NTN TDL channel accounts for the time evolution of Doppler shift caused by both satellite motion and UE movement. The terrestrial TDL channel, however, considers only the Doppler shift due to UE movement.
Delay profile — The NTN TDL channel delay profiles contain fewer clusters compared to those of the terrestrial TDL channel.
Follow these steps to model the NTN frequency selective fading TDL channel, as specified in 3GPP TR 38.811 section 6.9.2 [1].
Set channel parameters specific to the NTN frequency selective fading TDL channel.
Generate the NTN frequency selective fading TDL channel.
Visualize the spectrum of the faded or filtered signal.
Set NTN TDL Channel Parameters
Set the NTN frequency selective fading TDL channel parameters using the defined common parameters and the parameters specific to the NTN TDL channel. By default, this example models a downlink channel (in which the satellite is the transmitter and the UE is the receiver). To model an uplink channel, use the swapTransmitAndReceive function to reverse the link direction of nrTDLChannel before calling the step function.
% Initialize the NTN TDL channel ntnTDLChan = nrTDLChannel; ntnTDLChan.DelayProfile ="NTN-TDL-A"; ntnTDLChan.DelaySpread = 30e-9; % In s ntnTDLChan.TransmissionDirection =
"Downlink"; ntnTDLChan.MIMOCorrelation =
"Low"; ntnTDLChan.Polarization =
"Co-Polar"; ntnTDLChan.SampleRate = commonParams.SampleRate; ntnTDLChan.MaximumDopplerShift = mobileMaxDoppler; ntnTDLChan.SatelliteDopplerShift = satelliteDopplerShift; ntnTDLChan.RandomStream = commonParams.RandomStream; ntnTDLChan.Seed = commonParams.Seed; % Set the antenna configuration % Specify these properties, when MIMOCorrelation is a value other than % Custom if ~strcmpi(ntnTDLChan.MIMOCorrelation,"Custom") ntnTDLChan.NumTransmitAntennas = 1; ntnTDLChan.NumReceiveAntennas = 2; else % Specify these properties, when MIMOCorrelation is Custom and % Polarization is Co-Polar or Cross-Polar if any(strcmpi(ntnTDLChan.Polarization,["Co-Polar","Cross-Polar"])) ntnTDLChan.TransmitCorrelationMatrix = 1; ntnTDLChan.ReceiveCorrelationMatrix = [1 0; 0 1]; end % Specify these properties, when MIMOCorrelation is Custom and % Polarization is Cross-Polar if strcmpi(ntnTDLChan.Polarization,"Cross-Polar") ntnTDLChan.TransmitPolarizationAngles = [45 -45]; % In degrees ntnTDLChan.ReceivePolarizationAngles = [90 0]; % In degrees ntnTDLChan.XPR = 10; % In dB end % Specify this property, when both MIMOCorrelation and Polarization are % Custom if strcmpi(ntnTDLChan.Polarization,"Custom") ntnTDLChan.SpatialCorrelationMatrix = [1 0; 0 1]; end end
Check that the channel has been configured for the defined NTN channel delay profile and delay spread by calling the object function info to observe the path delays, average path gains, and K-factor first tap value.
tdlChanInfo = info(ntnTDLChan)
tdlChanInfo = struct with fields:
ChannelFilterDelay: 7
MaximumChannelDelay: 8
PathDelays: [0 3.2433e-08 8.5248e-08]
AveragePathGains: [0 -4.6750 -6.4820]
KFactorFirstTap: -Inf
NumTransmitAntennas: 1
NumReceiveAntennas: 2
SpatialCorrelationMatrix: [2×2 double]
Generate NTN TDL Channel
Generate the path gains of the NTN frequency selective fading TDL channel, and apply channel filtering to a random input signal using the resultant path gains.
% Generate a random input
rng(commonParams.Seed)
in = randn(commonParams.SampleRate,tdlChanInfo.NumTransmitAntennas,like=1i);Generate the faded waveform for the NTN TDL channel.
[tdlOut,tdlPathGains,tdlSampleTimes] = ntnTDLChan(in);
Visualize NTN TDL Channel Received Spectrum
Plot the received spectrum of the faded signal from the NTN frequency selective fading TDL channel.
ntnTDLAnalyzer = spectrumAnalyzer(SampleRate = ntnTDLChan.SampleRate); ntnTDLAnalyzer.Title = "Received Signal Spectrum - NTN TDL Channel with " ... + string(ntnTDLChan.DelayProfile) + " Delay Profile"; ntnTDLAnalyzer.ShowLegend = true; for nRx = 1:size(tdlOut,2) ntnTDLAnalyzer.ChannelNames{nRx} = "Rx Antenna " + nRx; end ntnTDLAnalyzer(tdlOut)

Further Exploration
You can use this example to further explore these options:
To configure and analyze the NTN narrowband, TDL, or CDL channels for other satellite orbits, change the
SatelliteAltitudefield of thecommonParamsstructure.To analyze the NTN flat fading narrowband channel for another environment, change the
Environmentproperty of thep681LMSChannel.To analyze the NTN TDL channel for LOS delay profiles, change the
DelayProfileproperty of thenrTDLChannelto NTN-TDL-C or NTN-TDL-D.To configure the NTN TDL channel for multiple antennas, change the
MIMOCorrelationandPolarizationproperties of thenrTDLChannel. You might need to set other properties depending on these values.To analyze the NTN CDL channel for LOS delay profiles with multiple antennas, set the
DelayProfileproperty ofnrCDLChannelto NTN-CDL-C or NTN-CDL-D, and adjust theSizefield of theTransmitAntennaArrayorReceiveAntennaArrayproperty.Use the NTN channel models in a link simulation to compute the link metric. For more information, see the NR NTN PDSCH Throughput example.
References
[1] 3GPP TR 38.811. "Study on new radio (NR) to support non-terrestrial networks." 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[2] 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.
[3] 3GPP TR 38.821. "Solutions for NR to support non-terrestrial networks (NTN)." 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[4] ITU-R Recommendation P.681-11 (08/2019). "Propagation data required for the design systems in the land mobile-satellite service." P Series; Radio wave propagation.









