Main Content

nrCSIReportSRS

R2026b

Report uplink channel state information using SRS

Since R2026b

    Description

    [CSI,CSIInfo] = nrCSIReportSRS(carrier,srs,pusch,h,rcov) returns the uplink channel state information (CSI) report CSI containing the rank, transmit precoding matrix indicator (TPMI), and modulation and coding scheme (MCS) index. The function also returns an additional CSI information CSIInfo.

    Specify the carrier configuration carrier, sounding reference signal (SRS) configuration srs, physical uplink shared channel (PUSCH) configuration pusch, uplink channel estimation information h, and inter-cell interference with noise covariance rcov.

    example

    [CSI,CSIInfo] = nrCSIReportSRS(carrier,srs,pusch,h,rcov,Name=Value) specifies additional options using one or more name-value arguments. Unspecified options take default values.

    Examples

    collapse all

    Create a carrier configuration object.

    carrier = nrCarrierConfig;

    Configure the SRS with 4 ports.

    srs = nrSRSConfig;
    srs.NumSRSPorts = 4;

    Configure the PUSCH for codebook-based transmission.

    pusch = nrPUSCHConfig;
    pusch.TransmissionScheme = "codebook";
    pusch.NumAntennaPorts = srs.NumSRSPorts;

    Configure the number of transmit and receive antennas.

    nTxAnts = max(srs.NumSRSPorts);
    nRxAnts = nTxAnts;

    Generate SRS indices and symbols, and map to the resource grid.

    srsInd = nrSRSIndices(carrier,srs);
    srsSym = nrSRS(carrier,srs);
    txGrid = nrResourceGrid(carrier,nTxAnts);
    txGrid(srsInd) = srsSym;

    Perform OFDM modulation.

    OFDMInfo = nrOFDMInfo(carrier);
    txWaveform = nrOFDMModulate(carrier,txGrid);

    Configure and pass through a TDL-C channel. Swap transmit and receive sides for uplink.

    channel = nrTDLChannel;
    % Swap transmit and receive sides as the default TDL channel is configured for downlink transmissions.
    swapTransmitAndReceive(channel);
    % Configure the channel
    channel.NumTransmitAntennas = nTxAnts;
    channel.NumReceiveAntennas = nRxAnts;
    channel.SampleRate = OFDMInfo.SampleRate;
    channel.DelayProfile = "TDL-C";
    channel.DelaySpread = 300e-9;
    channel.MaximumDopplerShift = 5;
    chInfo = info(channel);
    % Get the maximum channel delay
    maxChDelay = chInfo.MaximumChannelDelay;
    % Pass the time-domain waveform through the channel
    rxWaveform = channel([txWaveform; zeros(maxChDelay,nTxAnts)]);

    Perform timing synchronization.

    offset = nrTimingEstimate(carrier,rxWaveform,srsInd,srsSym);
    rxWaveform = rxWaveform(1+offset:end,:);

    Add AWGN and perform OFDM demodulation.

    SNRdB = 20;
    SNR = 10^(SNRdB/10);
    sigma = 1/(sqrt(2.0*channel.NumReceiveAntennas*double(OFDMInfo.Nfft)*SNR));
    rng('default');
    noise = sigma*complex(randn(size(rxWaveform)),randn(size(rxWaveform)));
    rxWaveform = rxWaveform + noise;
    rxGrid = nrOFDMDemodulate(carrier,rxWaveform);

    Perform channel estimation.

    [H,Rcov] = nrChannelEstimate(rxGrid,srsInd,srsSym,CDMLengths=[2 1]);

    Obtain the CSI report.

    SubbandSize = 20;
    rankRestriction = [1 1 0 0 1 1 1 1];
    MCSFormatIndicator = "subband";
    [CSI,CSIInfo] = nrCSIReportSRS(carrier,srs,pusch,H,Rcov,SubbandSize=SubbandSize,MCSFormatIndicator=MCSFormatIndicator,RankRestriction=rankRestriction)
    CSI = struct with fields:
            Rank: 1
            TPMI: 25
        MCSIndex: [4×1 double]
    
    
    CSIInfo = struct with fields:
        PrecodingMatrix: [4×1 double]
         SINRPerSubband: 1.6812
          EffectiveSINR: [4×1 double]
    
    

    Input Arguments

    collapse all

    Carrier configuration parameters for a specific OFDM numerology, specified as an nrCarrierConfig object. This function uses only these properties of the nrCarrierConfig object.

    SRS configuration, specified as an nrSRSConfig object.

    PUSCH configuration, specified as an nrPUSCHConfig object. This function uses only these properties of the nrPUSCHConfig object.

    To enable this function, you must satisfy these property conditions of the nrPUSCHConfig object.

    Estimated uplink channel information, specified as a 4-D numeric array of either of these size.

    • K-by-L-by-R-by-P — Applies when channel estimates are available at each subcarrier location. K is the number of subcarriers in the carrier resource grid, L is the number of OFDM symbols spanning one slot, R is the number of receive antennas, and P is the number of SRS antenna ports.

    • NSizeGrid-by-L-by-R-by-P — Applies when channel estimates are available for each resource block (RB). NSizeGrid is the number of RBs in the carrier resource grid.

    To use a three-antenna-port PUSCH configuration, specify h as a K-by-L-by-R-by-3 array and set the NumSRSPorts property of srs to 4. The function assumes only the first three SRS ports for channel sounding and mutes the fourth port. The uplink CSI report assumes a three-antenna-port PUSCH.

    Data Types: double
    Complex Number Support: Yes

    Estimated inter-cell interference plus noise covariance, specified as one of these options.

    • Nonnegative scalar — Applies when there is no inter-cell interference, just noise.

    • 4-D numeric array — Applies when you consider inter-cell interference. Specify rcov as a 4-D array of either of these size.

      • K-by-L-by-R-by-R — Applies when inter-cell interference estimates are available at each subcarrier location.

      • NSizeGrid-by-L-by-R-by-R — Applies when inter-cell interference estimates are available for each RB.

      • 1-by-1-by- R-by-R — Applies when inter-cell interference information is unavailable.

      Specify h and rcov at the same granularity level. Specify both inputs either at the resource element level, that is per subcarrier and symbol, or at the resource block level, that is, per resource block and symbol.

    Data Types: double
    Complex Number Support: Yes

    Name-Value Arguments

    collapse all

    Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

    Example: MCSFormatIndicator="subband" sets the MCS format as subband.

    MCS table used for MCS index calculation, specified as one of these options.

    • When transform precoding is disabled:

      • "qam64" — MCS index table corresponding to TS 38.214 Table 5.1.3.1-1

      • "qam256" — MCS index table corresponding to TS 38.214 Table 5.1.3.1-2

      • "qam64LowSE" — MCS index table corresponding to TS 38.214 Table 5.1.3.1-3

    • When transform precoding is enabled:

      • "qam64" — MCS index table corresponding to TS 38.214 Table 6.1.4.1-1

      • "qam64LowSE" — MCS index table corresponding to TS 38.214 Table 6.1.4.1-2

    The "qam256" option is not valid when transform precoding is enabled.

    Data Types: char | string

    Mode of TPMI reporting, specified as "wideband" or "subband". When set to "wideband", the function reports a single TPMI for the entire bandwidth. When set to "subband", the function reports a TPMI value for each subband.

    Data Types: char | string

    Number of physical resource blocks (PRBs) considered as a subband for TPMI or MCS index calculation, specified as a positive integer in the range from 1 to NSizeGrid property of carrier.

    Data Types: double

    Mode of MCS reporting, specified as "wideband" or "subband". When set to "wideband", the function reports a single MCS index for the entire bandwidth. When set to "subband", the function reports MCS index values for the wideband and for each subband.

    Data Types: char | string

    Rank restriction, specified as a binary-valued vector of length 8. The first element corresponds to rank 1, the second element corresponds to rank 2, and so on.

    A value of 0 disables the corresponding rank from being used in the CSI calculation, whereas a value of 1 enables the corresponding rank to be used.

    Data Types: double | logical

    Output Arguments

    collapse all

    Uplink CSI report, returned as a structure containing these fields.

    FieldsDescription
    Rank

    Rank indicator, returned as a scalar indicating the optimal number of transmission layers to maximize spectral efficiency for the given channel conditions and interference plus noise covariance input.

    TPMI

    Transmit precoding matrix indicator (0-based), returned as a scalar when TPMIFormatIndicator is "wideband", or a vector of size numSubbands-by-1 when TPMIFormatIndicator is "subband". numSubbands is the number of SRS subbands for a given SubbandSize.

    MCSIndex

    Modulation and coding scheme index (0-based), returned as a matrix. The matrix size depends on the MCSFormatIndicator name-value argument.

    • When you set MCSFormatIndicator to "wideband", the size of the matrix is 1-by-numCodewords, where numCodewords is the number of codewords.

    • When you set MCSFormatIndicator to "subband", the size of the matrix is (numSubbands + 1)-by-numCodewords.

      The first row corresponds to the wideband MCS value, and subsequent rows correspond to each subband starting from subband 1.

    Data Types: struct

    Additional CSI information, returned as a structure with these fields.

    FieldsDescription
    PrecodingMatrix

    Precoding matrix corresponding to the TPMI field of the CSI argument, returned as a 3-D array of size P-by-Rank-by-numSubbands.

    SINRPerSubband

    Linear signal-to-noise-plus-interference ratio (SINR) values per subband for the selected precoder matrix from the codebook, returned as a matrix of size numSubbands-by-Rank.

    EffectiveSINR

    Effective SINR values in dB, calculated using the received bit mutual information rate (RBIR) based effective SINR mapping (ESM) method, returned as a matrix. The matrix size depends on the MCSFormatIndicator name-value argument.

    • When you set MCSFormatIndicator to "wideband", the size of the matrix is 1-by-numCodewords.

    • When you set MCSFormatIndicator to "subband", the size of the matrix is (numSubbands + 1)-by-numCodewords, where numSubbands.

      The first row corresponds to the wideband MCS value, and subsequent rows correspond to each subband starting from subband 1.

    Returned as a matrix of size (numSubbands+1)-by-numCodewords.

    Data Types: struct

    References

    [1] 3GPP TS 38.211. “NR; Physical channels and modulation.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

    Extended Capabilities

    expand all

    Version History

    Introduced in R2026b