Main Content

lteULChannelEstimateNPUSCH

NPUSCH channel estimation

Since R2020a

Description

[hEst,noiseEst] = lteULChannelEstimateNPUSCH(ue,chs,rxGrid) estimates the channel between transmit and receive antennas for user equipment (UE) settings ue, channel transmission configuration chs, and received resource grid rxGrid. The function returns hEst, the estimated channel, and noiseEst, the estimated noise power spectral density.

The function calculates hEst and noiseEst by averaging least-squares estimates of the narrowband physical uplink shared channel (NPUSCH) demodulation reference signal (DRS) symbols over time and copying these symbols across the allocated resource elements (REs) within the time-frequency grid.

[hEst,noiseEst] = lteULChannelEstimateNPUSCH(ue,chs,cec,rxGrid) specifies cec, a structure containing the method and parameters to use for channel estimation.

example

[hEst,noiseEst] = lteULChannelEstimateNPUSCH(___,stateIn) specifies stateIn, the initial encoder state for NPUSCH DRS symbol generation, in addition to any input argument combination from previous syntaxes..

Examples

collapse all

Perform NPUSCH channel estimation on a received resource grid.

Configure UE-specific settings.

ue = struct('NNCellID',0,'NBULSubcarrierSpacing','15kHz','NSlot',0);

Specify a channel transmission configuration.

chs = struct('NPUSCHFormat','Data','NRUsc',1,'NULSlots',16,'NRU',1, ...
    'NRep',1,'NBULSubcarrierSet',0,'Modulation','QPSK');

Configure the channel estimation type and parameters.

cec = struct('FreqWindow',7,'TimeWindow',1,'InterpType','cubic','PilotAverage','UserDefined');

Generate the NPUSCH DRS symbols and allocate them to the appropriate locations on a resource grid.

grid = lteNBResourceGrid(ue);
grid(lteNPUSCHDRSIndices(ue,chs)) = lteNPUSCHDRS(ue,chs);

Generate a waveform by performing single-carrier frequency-division multiple access (SC-FDMA) modulation on the NPUSCH DRS symbols.

waveform = lteSCFDMAModulate(ue,chs,grid);

Perform SC-FDMA demodulation, assuming that the received waveform matches the transmitted waveform.

rxGrid = lteSCFDMADemodulate(ue,chs,waveform);

Estimate the channel.

[hEst,noiseEst] = lteULChannelEstimateNPUSCH(ue,chs,cec,rxGrid);

Input Arguments

collapse all

UE-specific settings, specified as a structure containing these fields.

FieldValuesDescriptionData Types
NBULSubcarrierSpacing'3.75kHz', '15kHz'

NB-IoT uplink subcarrier spacing

To set a subcarrier spacing of 3.75 kHz, specify this field as '3.75kHz'. To set a subcarrier spacing of 15 kHz, specify this field as '15kHz'.

char, string
NNCellIDInteger in the interval [0, 503]Narrowband physical layer cell identity (PCI)double
NFrame0 (default), nonnegative integerFrame numberdouble
NSlotNonnegative integer

Slot number

When you specify the NPUSCHFormat field as 'Data' and the SeqGroupHopping field as 'Off' in the chs input, the function ignores this field.

double

Data Types: struct

Channel transmission configuration, specified as a structure containing these fields.

FieldValuesDescriptionData Types
NPUSCHFormat'Data', 'Control'

NPUSCH format

To indicate that the NPUSCH carries narrowband uplink shared channel (UL-SCH) data, specify this field as 'Data'. To indicate that the NPUSCH carries uplink control information, specify this field as 'Control'.

char, string
NRUsc1, 3, 6, 12

Number of consecutive subcarriers in a resource unit (RU)

If you specify the NPUSCHFormat field as 'Control' or the NBULSubcarrierSpacing field of the ue input as '3.75kHz', then you must specify this field as 1.

double
NRep1, 2, 4, 8, 16, 32, 64, 128Number of repetitions for a codeworddouble
NRU1, 2, 3, 4, 5, 6, 8, 10Number of RUsdouble
NULSlots2, 4, 8, 16

Number of slots per RU

If you specify the NPUSCHFormat field as 'Control', then you must specify this field as 4.

If you specify the NPUSCHFormat field as 'Data', then you must specify this field as:

  • 16 when you specify the NRUsc field as 1

  • 8 when you specify the NRUsc field as 3

  • 4 when you specify the NRUsc field as 6

  • 2 when you specify the NRUsc field as 12

double
BaseSeqIdx

Integer in the interval [0, 29]

Default depends on the value of the NRUsc field.

Multitone NPUSCH DRS base sequence index

  • When you specify the NRUsc field as 3, specify this field as an integer in the interval [0, 11]. If you do not specify this field, the function sets it to the value of mod(ue.NNCellID,12).

  • When you specify the NRUsc field as 6, specify this field as an integer in the interval [0, 13]. If you do not specify this field, the function sets it to the value of mod(ue.NNCellID,14).

  • When you specify the NRUsc field as 12, specify this field as an integer in the interval [0, 29]. If you do not specify this field, the function sets it to the value of mod(ue.NNCellID,30).

  • When you specify the NRUsc field as any other value, the function does not use this field.

Dependencies. To enable this field, specify the NRUsc field as 3, 6, or 12.

double
SeqGroupHopping'On' (default), 'Off'To enable sequence-group hopping, specify this field as 'On'. To disable sequence group hopping, specify this field as 'Off'. For more information, see section 5.5.1.3 of [1].char, string
SeqGroup0 (default), integer in the interval [0, 29]

Sequence-group assignment for sequence shift pattern calculation

For more information, see section 10.1.4.1.3 of [1].

Dependencies. To enable this field, specify the SeqGroupHopping field as 'On'.

double
CyclicShift0 (default), integer in the interval [0, 3]

Cyclic shift

  • When you specify the NRUsc field as 3, specify this field as an integer in the interval [0, 2].

  • When you specify the NRUsc field as 6, specify this field as an integer in the interval [0, 3].

Dependencies. To enable this field, specify the NRUsc field as 3 or 6.

double
NBULSubcarrierSetInteger in the interval [0, 47], vector of integers in the interval [0, 11]

NB-IoT uplink subcarrier indices, in zero-based form

If you specify the NPUSCHFormat field as 'Control', specify this field as an integer in the interval [0, 11].

If you specify the NPUSCHFormat field as 'Data' and the NBULSubcarrierSpacing field of the ue input as '3.75kHz', specify this field as an integer in the interval [0, 47].

If you specify the NPUSCHFormat field as 'Data' and the NBULSubcarrierSpacing field of the ue input as '15kHz', specify this field as a vector of integers in the interval [0, 11].

double

Data Types: struct

Received resource grid, specified as a complex-valued matrix of size T-by-P.

  • T is the number of time-domain samples.

  • P is the number of transmit antennas.

You can generate this input by performing SC-FDMA demodulation on a received resource grid using the lteSCFDMADemodulate function.

Data Types: double
Complex Number Support: Yes

Channel estimation configuration, specified as a structure containing these fields.

FieldValuesDescriptionData Types
FreqWindowPositive odd integer, positive multiple of 12Size of window for frequency averaging, in resource elementsdouble
TimeWindowPositive odd integerSize of window for time averaging, in resource elementsdouble
InterpType'nearest', 'linear', 'natural', 'cubic', 'v4', 'none'

Type of interpolation between pilot symbols, specified as one of these values.

  • 'nearest' — Use nearest neighbor interpolation

  • 'linear' — Use linear interpolation

  • 'natural' — Use natural neighbor interpolation

  • 'cubic' — Use cubic interpolation

  • 'v4' — Use the MATLAB® 4 griddata method

  • 'none' — The function performs no interpolation between pilot symbols and does not create virtual pilots. The hEst output contains channel estimates in the locations of the transmitted NPUSCH DRS symbols for each receive antenna, and all other elements of hEst are 0. The function still performs pilot symbol averaging in accordance with the values you specify for the FreqWindow and TimeWindow fields.

For more information, see the griddata function.

char, string
PilotAverage'TestEVM', 'UserDefined'

Type of pilot averaging

If you specify this field as 'TestEVM', the function ignores any other fields you specify. In this case, the function performs pilot averaging according to the method set out in and Annex F of [2].

When you specify this field as 'UserDefined', the function performs pilot averaging with a rectangular kernel of size FreqWindow-by-TimeWindow. The function also performs a two-dimensional filtering operation on the pilots. The pilots near the edge of the resource grid either have no neighbors or a limited number of neighbors through the creation of virtual pilots. Consequently, these pilots are not averaged in the same way as pilots that are not near the edge of the resource grid.

char, string

Data Types: struct

Encoder state for NPUSCH DRS generation, specified as a structure. This input corresponds to the stateIn input of the lteNPUSCHDRS function. This input contains the internal state of each transport block in these fields.

FieldValuesDescriptionData Types
SlotIdxInteger in the interval [0, (chs.NRU × chs.NULSlots × chs.NRep) – 1]Index of a slot within a bundle, in zero-based formdouble
InitNSlotNonnegative integerSlot number for scrambling sequence initializationdouble
InitNFrameNonnegative integerFrame number for scrambling sequence initializationdouble
EndOfBlkLogical 1 (true) or 0 (false)To indicate that the transmission has reached the end of a transport block, specify this field as 1 (true). Otherwise, specify this field as 0 (false).logical
EndOfTxLogical 1 (true) or 0 (false)To indicate that the transmission has reached the end of a bundle, specify this field as 1 (true). Otherwise, specify this field as 0 (false).logical
GhpNSlotNonnegative integer

Slot number for the first slot in the RU

Dependencies. To enable this field, specify the NPUSCHFormat field as 'Data' and the NRUsc field as 1 in the chs input.

double

Data Types: struct

Output Arguments

collapse all

Channel estimate, returned as a complex-valued array of size K-by-L-by-R.

  • K is the total number of subcarriers.

  • L is the number of SC-FDMA symbols.

  • R is the number of receive antennas.

Data Types: double
Complex Number Support: Yes

Noise power spectral density, returned as a real-valued scalar. This output represents the power spectral density of the noise present on the estimated channel response coefficients.

Data Types: double

References

[1] 3GPP TS 36.211. “Physical channels and modulation.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network; Evolved Universal Terrestrial Radio Access (E-UTRA). https://www.3gpp.org.

[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. https://www.3gpp.org.

Version History

Introduced in R2020a