メインコンテンツ

nrComponentCarrierConfig

R2026b

Create component carrier configuration objects for 5G NR nodes

Since R2026b

    Description

    Use the nrComponentCarrierConfig object to create component carrier configuration objects that specify the parameters (such as duplexing mode, carrier frequency, bandwidth, subcarrier spacing, and number of resource blocks) for aggregated carriers in next-generation Node B (gNB).

    The nrComponentCarrierConfig object enables you to define three types of carrier aggregation: intra-band contiguous, intra-band noncontiguous, and inter-band. For more information about how to configure these aggregation types, see Types of Carrier Aggregation and How to Configure Them.

    Creation

    Description

    ccConfig = nrComponentCarrierConfig creates a single component carrier configuration object.

    ccConfig = nrComponentCarrierConfig(PropertyName=Value) sets properties using one or more optional name-value arguments. Depending on the properties you set, this syntax can create one or more component carrier configuration objects.

    example

    ccConfig = nrComponentCarrierConfig(NumContiguousCarriers=numContiguousCarriers) creates numContiguousCarriers contiguous component carrier configuration objects.

    ccConfig = nrComponentCarrierConfig(NumContiguousCarriers=numContiguousCarriers,PropertyName=Value) creates numContiguousCarriers contiguous component carrier configuration objects with specified property values.

    Note

    When you create multiple component carrier objects in a single call, nrComponentCarrierConfig assigns the same values for channel bandwidth, subcarrier spacing, SRS periodicity, DL-UL configuration, and number of resource blocks to all carriers.

    Input Arguments

    expand all

    Number of contiguous carriers to create, specified as a positive integer.

    Data Types: double

    Properties

    expand all

    This property is read-only after object creation.

    Duplexing mode, specified as one of these options.

    • "FDD" — Frequency division duplexing

    • "TDD" — Time division duplexing

    Data Types: char | string

    This property is read-only after object creation.

    Carrier frequency, specified as one of these options. Units are in Hz.

    • Specify the carrier frequency as a real number or a vector of real numbers if DuplexMode is "TDD".

      • When you specify CarrierFrequency as a scalar value (a single frequency) and set NumContiguousCarriers to N (where N is greater than 1), the nrComponentCarrierConfig constructor creates a 1-by-N vector of nrComponentCarrierConfig objects. It assigns the specified frequency to the first object, and calculates the frequency for each subsequent object by adding a nominal spacing (see Nominal Spacing for Intra-Band Contiguous Carrier Aggregation) to the frequency of the previous object, thereby generating contiguous carriers.

      • When you specify CarrierFrequency as a vector of N frequencies and do not specify NumContiguousCarriers, the constructor returns a 1-by-N array of objects. Each object corresponds to a single carrier and uses the respective frequency from the vector.

    • Specify the carrier frequency as two-element real vector or an N-by-2 matrix if DuplexMode is "FDD"..

      • When you specify CarrierFrequency as a two-element vector [DL frequency, UL frequency] and set NumContiguousCarriers to N (where N is greater than 1), the nrComponentCarrierConfig constructor returns a 1-by-N vector of nrComponentCarrierConfig objects. For each object, the constructor automatically assigns a DL-UL frequency pair. It increments both the downlink and uplink frequencies by a nominal spacing value (see Nominal Spacing for Intra-Band Contiguous Carrier Aggregation) from the previous carrier, ensuring that all carriers are contiguous in frequency.

      • When you specify CarrierFrequency as an N-by-2 matrix of real numbers (where N > 1), you must not specify NumContiguousCarriers. The nrComponentCarrierConfig constructor returns a 1-by-N vector of nrComponentCarrierConfig objects. It assigns each object the DL-UL frequency pair from the corresponding row of the matrix. This enables you to explicitly control the frequencies for noncontiguous, inter-band, or custom carrier configurations.

    The minimum supported carrier frequency depends on the duplex mode. For TDD, the CarrierFrequency value must be at least 600 MHz. For FDD, the CarrierFrequency value must be at least 330 MHz.

    Note

    To model interfering gNB nodes in your simulation, the interfering carriers across the gNB nodes must have the same values for the properties CarrierFrequency and ChannelBandwidth. Additionally, SubcarrierSpacing must be the same across the interfering carriers.

    Data Types: double

    This property is read-only after object creation.

    Channel bandwidth of the component carrier, specified as one of these options. Units are in Hz.

    • 5e6

    • 10e6

    • 15e6

    • 20e6

    • 30e6

    • 35e6

    • 40e6

    • 45e6

    • 50e6

    • 60e6

    • 70e6

    • 80e6

    • 90e6

    • 100e6

    • 200e6

    • 400e6

    When you create multiple component carrier objects in a single call, the nrComponentCarrierConfig constructor assigns the same channel bandwidth to all carriers.

    In FDD mode, the downlink (DL) and uplink (UL) operations occur in separate bands of the specified size. In TDD mode, both DL and UL share a single band of the specified size.

    Note

    To model interfering gNB nodes in your simulation, the interfering carriers across the gNB nodes must have the same values for the properties CarrierFrequency and ChannelBandwidth. Additionally, SubcarrierSpacing must be the same across the interfering carriers.

    Data Types: double

    This property is read-only after object creation.

    Subcarrier spacing (SCS) for the component carrier, specified as one of these options.

    • 15e3 or 15

    • 30e3 or 30

    • 60e3 or 60

    • 120e3 or 120

    When you create multiple component carrier objects in a single call, the nrComponentCarrierConfig constructor assigns the same SCS to all carriers.

    Note

    To model interfering gNB nodes in your simulation, the interfering carriers across the gNB nodes must have the same values for the properties CarrierFrequency and ChannelBandwidth. Additionally, SubcarrierSpacing must be the same across the interfering carriers.

    Data Types: double

    This property is read-only after object creation.

    Number of resource blocks (RBs) in the component carrier, specified as an integer in the range [4,273].

    In the FDD mode, the DL bandwidth and UL bandwidth each contain resource blocks equal to NumResourceBlocks. In the TDD mode, the DL and UL bandwidths share these resource blocks. If you do not specify this name-value argument, then the nrComponentCarrierConfig object derives it automatically from the channel bandwidth and the subcarrier spacing. The default value, 25, corresponds to the default 5e6 Hz channel bandwidth and 15e3 Hz SCS. The minimum value, 4, is the minimum required transmission bandwidth for a sounding reference signal (SRS), as defined in TS 38.211, table 6.4.1.4.3-1 [1].

    When you create multiple component carrier objects in a single call, the nrComponentCarrierConfig constructor assigns the same number of resource blocks to all carriers.

    Data Types: double

    This property is read-only after object creation.

    DL and UL time division configuration for TDD mode, specified as a structure. The structure contains these fields.

    • DLULPeriodicity — DL-UL pattern periodicity in milliseconds. If you specify SCS as 15e3, 30e3, 60e3, or 120e3, then the default value of the DLULPeriodicity field is 5 milliseconds, 2.5 milliseconds, 1.25 milliseconds, or 0.625 milliseconds, respectively.

    • NumDLSlots — Number of full DL slots at the start of the DL-UL pattern. The default value is 2.

    • NumDLSymbols — Number of DL symbols after the full DL slots. The default value is 12.

    • NumULSymbols — Number of full UL symbols at the end of the DL-UL pattern. The default value is 1.

    • NumULSlots — Number of UL slots before the full UL slots. The default value is 2.

    The nrComponentCarrierConfig object sets the reference SCS for the DL-UL pattern to the value of SubcarrierSpacing. The configuration supports one S slot after the full DL slots and before the full UL slots. The S slot consists of NumDLSymbols at the start and NumULSymbols at the end. The object sets the guard period between DL and UL time to 14 - (NumDLSymbols + NumULSymbols). You can set NumULSymbols to 0 or 1. If you set NumULSymbols to 1, the gNB reserves the UL symbol for sounding reference signal (SRS).

    When you create multiple component carrier objects in a single call, the nrComponentCarrierConfig constructor assigns the same DL-UL configuration to all carriers.

    Dependencies

    To enable this property, set the DuplexMode property to "TDD".

    This property is read-only after object creation.

    Sounding reference signal (SRS) transmission periodicity for connected UE nodes, specified as 5, 8, 10, 16, 20, 32, 40, 64, 80, 160, 320, 640, 1280, or 2560 slots. This value is identical for all connected UE nodes. This periodicity must also be an integer multiple of L, where L is the interval in slots at which the gNB reserves one symbol for the SRS resource across the entire bandwidth. The minimum value of L is 5. For FDD, the nrComponentCarrierConfig object fixes the value of L at 5 slots. For TDD, L is the minimum of these values: 5, 8, 10, 16, 20, 32, 40, 64, 80, 160, 320, 640, 1280, or 2560 slots; the value of L is also a multiple of the DL-UL pattern length.

    When you create multiple component carrier objects in a single call, the nrComponentCarrierConfig constructor assigns the same SRS periodicity to all carriers.

    Data Types: double

    This property is read-only after object creation.

    Number of contiguous carriers to create, specified as a positive integer.

    Data Types: double

    Examples

    collapse all

    This example shows two approaches to creating intra-band contiguous component carrier configurations for both TDD and FDD duplex modes using the nrComponentCarrierConfig object.

    Automatic Approach

    Specify a starting carrier frequency and the number of contiguous carriers. The constructor automatically calculates adjacent carrier frequencies using the nominal channel spacing formula. For TDD, set CarrierFrequency as a scalar. For FDD, use a two-element vector [DL frequency, UL frequency].

    Create four component carrier objects for intra-band contiguous aggregation in TDD mode with a starting frequency of 3.5 GHz, channel bandwidth of 20 MHz, and subcarrier spacing of 30 kHz.

    cc_TDD = nrComponentCarrierConfig( ...
    DuplexMode = "TDD", ...
    CarrierFrequency = 3.5e9, ...
    ChannelBandwidth = 20e6, ...
    SubcarrierSpacing = 30e3, ...
    NumContiguousCarriers = 4)
    cc_TDD = 
      1×4 nrComponentCarrierConfig array
    
    

    Obtain the four contiguous component carriers.

    allFrequencies = [cc_TDD.CarrierFrequency]
    allFrequencies = 1×4
    109 ×
    
        3.5000    3.5200    3.5400    3.5600
    
    

    Create three component carrier objects for intra-band contiguous aggregation in FDD mode with starting frequencies of 2.14 GHz (DL) and 1.95 GHz (UL), channel bandwidth of 20 MHz, and subcarrier spacing of 15 kHz.

    cc_FDD = nrComponentCarrierConfig( ...
    DuplexMode = "FDD", ...
    CarrierFrequency = [2.140e9, 1.950e9], ...
    ChannelBandwidth = 20e6, ...
    SubcarrierSpacing = 15e3, ...
    NumContiguousCarriers = 3)
    cc_FDD = 
      1×3 nrComponentCarrierConfig array
    
    

    Obtain the three contiguous DL and UL frequency pairs.

    allFreqs_FDD = reshape([cc_FDD.CarrierFrequency], 2, [])'
    allFreqs_FDD = 3×2
    109 ×
    
        2.1400    1.9500
        2.1600    1.9700
        2.1800    1.9900
    
    

    Custom Frequency Assignment

    Explicitly specify four contiguous carrier frequencies for TDD, assuming 20 MHz spacing between carriers (center-to-center distance between adjacent carrier frequencies).

    explicitFreqs_TDD = [3.5e9, 3.52e9, 3.54e9, 3.56e9];

    Create the component carrier objects.

    cc_TDD_explicit = nrComponentCarrierConfig( ...
    DuplexMode = "TDD", ...
    CarrierFrequency = explicitFreqs_TDD, ...
    ChannelBandwidth = 20e6, ...
    SubcarrierSpacing = 30e3)
    cc_TDD_explicit = 
      1×4 nrComponentCarrierConfig array
    
    

    Explicitly specify three contiguous DL and UL frequency pairs for FDD, spaced 20 MHz apart for both DL and UL.

    explicitFreqs_FDD = [ ...
        2.14e9, 1.95e9;   % Carrier 1: DL, UL
        2.16e9, 1.97e9;   % Carrier 2: DL, UL (+20 MHz from Carrier 1)
        2.18e9, 1.99e9    % Carrier 3: DL, UL (+20 MHz from Carrier 2)
        ];

    Create the component carrier objects.

    cc_FDD_explicit = nrComponentCarrierConfig(DuplexMode="FDD", ...
    CarrierFrequency=explicitFreqs_FDD, ...
    ChannelBandwidth=20e6, ...
    SubcarrierSpacing=15e3)
    cc_FDD_explicit = 
      1×3 nrComponentCarrierConfig array
    
    

    This example shows how to create intra-band noncontiguous component carrier configuration objects for both TDD and FDD duplex modes using the nrComponentCarrierConfig object.

    Intra-band noncontiguous component carrier configuration in TDD

    Create three noncontiguous TDD carriers within the same band, each with a 20 MHz bandwidth and center frequencies of 3.5 GHz, 3.55 GHz, and 3.62 GHz.

    % Each row: [TDD_frequency]
    % Three noncontiguous TDD carriers with 20 MHz bandwidth each
    nonContiguousFreqs_TDD = [ ...
        3.500e9;    % Carrier 1: 3490-3510 MHz
        3.550e9;    % Carrier 2: 3540-3560 MHz (30 MHz gap from Carrier 1)
        3.620e9     % Carrier 3: 3610-3630 MHz (50 MHz gap from Carrier 2)
        ];

    Create the component carrier objects in TDD mode

    cc_TDD_noncontig = nrComponentCarrierConfig(CarrierFrequency=nonContiguousFreqs_TDD, ...
    DuplexMode="TDD",ChannelBandwidth=20e6, ...
    SubcarrierSpacing=30e3,NumResourceBlocks=51)
    cc_TDD_noncontig = 
      1×3 nrComponentCarrierConfig array
    
    

    Display the first component carrier object.

    cc_TDD_noncontig_1=cc_TDD_noncontig(1)
    cc_TDD_noncontig_1 = 
      nrComponentCarrierConfig with properties:
    
       Read-only properties:
         CarrierFrequency: 3.5000e+09
         ChannelBandwidth: 20000000
        NumResourceBlocks: 51
        SubcarrierSpacing: 30000
               DuplexMode: "TDD"
            DLULConfigTDD: [1×1 struct]
         SRSPeriodicityUE: 5
    
    

    Intra-band noncontiguous component carrier configuration in FDD

    Create four noncontiguous carriers in FDD mode within the same band, with each carrier assigned downlink and uplink frequencies, and gaps separating adjacent carriers.

    % Each row: [DL_frequency, UL_frequency]
    % Four noncontiguous FDD carriers (10 MHz BW each)
    % Gaps are measured between carrier edges (not centers)
    nonContiguousFreqs_FDD = [ ...
    2.120e9, 1.720e9;    % Carrier 1: DL center=2120 MHz, UL center=1720 MHz
    2.140e9, 1.740e9;    % Carrier 2: 20 MHz from C1 center (10 MHz edge gap)
    2.165e9, 1.755e9;    % Carrier 3: 25 MHz from C2 center (15 MHz edge gap)
    2.190e9, 1.770e9     % Carrier 4: 25 MHz from C3 center (15 MHz edge gap)
    ]
    nonContiguousFreqs_FDD = 4×2
    109 ×
    
        2.1200    1.7200
        2.1400    1.7400
        2.1650    1.7550
        2.1900    1.7700
    
    

    Create the component carrier objects in FDD mode.

    cc_FDD_noncontig = nrComponentCarrierConfig(CarrierFrequency=nonContiguousFreqs_FDD, ...
    DuplexMode="FDD",ChannelBandwidth=10e6, ...
    SubcarrierSpacing=15e3,NumResourceBlocks=52)
    cc_FDD_noncontig = 
      1×4 nrComponentCarrierConfig array
    
    

    Display the first component carrier object.

    cc_FDD_noncontig_1=cc_FDD_noncontig(1)
    cc_FDD_noncontig_1 = 
      nrComponentCarrierConfig with properties:
    
       Read-only properties:
         CarrierFrequency: [2.1200e+09 1.7200e+09]
         ChannelBandwidth: 10000000
        NumResourceBlocks: 52
        SubcarrierSpacing: 15000
               DuplexMode: "FDD"
         SRSPeriodicityUE: 5
    
    

    This example shows how to create inter-band component carrier configuration objects for both TDD and FDD duplex modes using the nrComponentCarrierConfig object.

    Inter-band component carrier configuration in TDD

    Create three carriers across different frequency bands in the TDD mode.

    % Each row: [TDD_frequency]
    % Three carriers across different TDD bands (inter-band carrier aggregation)
    interBandFreqs_TDD = [ ...
        2.600e9;    % Carrier 1
        3.600e9;    % Carrier 2
        4.700e9     % Carrier 3
        ];

    Create the component carrier objects in TDD mode.

    cc_TDD_interband = nrComponentCarrierConfig(DuplexMode="TDD", ...
        CarrierFrequency=interBandFreqs_TDD, ...
        ChannelBandwidth=20e6, ...
        SubcarrierSpacing=30e3);

    Display the first component carrier object.

    cc_TDD_interband_1=cc_TDD_interband(1)
    cc_TDD_interband_1 = 
      nrComponentCarrierConfig with properties:
    
       Read-only properties:
         CarrierFrequency: 2.6000e+09
         ChannelBandwidth: 20000000
        NumResourceBlocks: 51
        SubcarrierSpacing: 30000
               DuplexMode: "TDD"
            DLULConfigTDD: [1×1 struct]
         SRSPeriodicityUE: 5
    
    

    Inter-Band Component Carrier Configuration in FDD

    Create three carriers across different frequency bands in FDD mode.

    % Each row: [DL_frequency, UL_frequency]
    % Three 5G NR carriers across different FDD bands (inter-band carrier aggregation)
    interBandFreqs_FDD = [ ...
        0.634e9, 0.680e9;    % Carrier 1
        2.140e9, 1.950e9;    % Carrier 2
        2.655e9, 2.535e9     % Carrier 3
        ];

    Create the component carrier objects in FDD mode.

    cc_FDD_interband = nrComponentCarrierConfig(DuplexMode="FDD", ...
    CarrierFrequency=interBandFreqs_FDD, ...
    ChannelBandwidth= 20e6, ...
    SubcarrierSpacing=15e3)
    cc_FDD_interband = 
      1×3 nrComponentCarrierConfig array
    
    

    Display the first component carrier object.

    cc_FDD_interband_1=cc_FDD_interband(1)
    cc_FDD_interband_1 = 
      nrComponentCarrierConfig with properties:
    
       Read-only properties:
         CarrierFrequency: [634000000 680000000]
         ChannelBandwidth: 20000000
        NumResourceBlocks: 106
        SubcarrierSpacing: 15000
               DuplexMode: "FDD"
         SRSPeriodicityUE: 5
    
    

    Carrier aggregation enables the gNB and UE nodes to transmit and receive data simultaneously on multiple carriers, significantly increasing data throughput. In a 5G network, the base stations manage and allocate these carriers to the UE nodes. This example demonstrates how to configure and simulate carrier aggregation in a 5G network.

    In this example, you create:

    • One gNB node with two component carriers

    • Two UE nodes. The first UE node connects to the primary carrier only (single carrier operation), while the second UE node connects to both the primary and secondary carriers (carrier aggregation).

    To simulate the scenario, follow these steps.

    Create the network simulator.

    rng("default") % Reset the random number generator
    networkSimulator = wirelessNetworkSimulator.init
    networkSimulator = 
      wirelessNetworkSimulator with properties:
    
            CurrentTime: 0
                EndTime: 0
        ChannelFunction: "fspl"
                  Nodes: {}
    
    

    Create component carrier configurations using the nrComponentCarrierConfig object.

    % Two NR carriers in the same band
    ccConfigs = nrComponentCarrierConfig(NumContiguousCarriers=2)
    ccConfigs = 
      1×2 nrComponentCarrierConfig array
    
    

    The array contains two contiguous component carrier objects: the first corresponds to the primary carrier, and the second corresponds to the secondary carrier.

    Display the component carrier objects.

    ccConfigsPrimary = ccConfigs(1)
    ccConfigsPrimary = 
      nrComponentCarrierConfig with properties:
    
       Read-only properties:
         CarrierFrequency: [2.6725e+09 2.5275e+09]
         ChannelBandwidth: 5000000
        NumResourceBlocks: 25
        SubcarrierSpacing: 15000
               DuplexMode: "FDD"
         SRSPeriodicityUE: 5
    
    
    ccConfigsSecondary=ccConfigs(2)
    ccConfigsSecondary = 
      nrComponentCarrierConfig with properties:
    
       Read-only properties:
         CarrierFrequency: [2.6775e+09 2.5325e+09]
         ChannelBandwidth: 5000000
        NumResourceBlocks: 25
        SubcarrierSpacing: 15000
               DuplexMode: "FDD"
         SRSPeriodicityUE: 5
    
    

    Create a gNB node with multiple component carriers.

    gNB = nrGNB(ComponentCarrierConfig=ccConfigs, ...
        NumTransmitAntennas=4, ...
        NumReceiveAntennas=4);

    Configure a built-in scheduler for multiple carriers.

    configureScheduler(gNB,Scheduler="BestCQI");

    Create UE nodes with multi-carrier capability.

    ue1 = nrUE(NumTransmitAntennas=2,NumReceiveAntennas=2);
    
    ue2 = nrUE(NumComponentCarriers=2, ...  % UE can connect to two carriers
        NumTransmitAntennas=2, ...
        NumReceiveAntennas=2);
    
    ues = [ue1,ue2];

    Connect the UE nodes on the primary carrier and enable full-buffer traffic. Full-buffer traffic assumes an unlimited amount of queued data is available for transmission.

    connectUE(gNB,ues,FullBufferTraffic="on"); 

    Add the secondary carrier on the second UE node.

    addSecondaryCarrierOnUE(gNB,ue2,ccConfigs(2));

    Add the nodes to the simulator.

    addNodes(networkSimulator,gNB)
    addNodes(networkSimulator,ues)

    Run the simulation.

    simulationTime = 0.1; % Units are in seconds
    run(networkSimulator,simulationTime);

    Obtain the UE node statistics.

    ue1Stats = ue1.statistics();
    ue2Stats = ue2.statistics();

    Obtain the physical layer statistics of the first UE node.

    ue1StatsPHY = ue1Stats.PHY
    ue1StatsPHY = struct with fields:
        TransmittedPackets: 97
           ReceivedPackets: 96
            DecodeFailures: 0
    
    

    Obtain the physical layer statistics of the second UE node.

    ue2StatsPHY = ue2Stats.PHY
    ue2StatsPHY = struct with fields:
        TransmittedPackets: 194
           ReceivedPackets: 192
            DecodeFailures: 0
    
    

    The results show that the second UE node, which supports carrier aggregation, achieved twice the packet transmission and reception capacity of the first UE node, which uses only the primary carrier.

    More About

    expand all

    References

    [1] 3GPP TS 38.101-1. “NR; User Equipment (UE) radio transmission and reception; Part 1: Range 1 Standalone.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

    Version History

    Introduced in R2026b