Main Content

lteSLChannelEstimatePSCCH

PSCCH sidelink channel estimation

Description

[hest] = lteSLChannelEstimatePSCCH(ue,rxgrid) returns an estimate for the channel by averaging the least squares estimates of the reference symbols across time and copying these estimates across the allocated resource elements within the time frequency grid. The channel estimation configuration uses the method described in TS 36.101 [1], Annex F.

example

[hest] = lteSLChannelEstimatePSCCH(ue,cec,rxgrid) also accepts the channel estimator configuration structure, cec, to adjust the default method and parameters defined for estimating the channel.

example

[hest,noiseest] = lteSLChannelEstimatePSCCH(___) also returns an estimate of the noise power spectral density for the channel. This syntax supports input options from prior syntaxes.

example

Examples

collapse all

Estimate the channel characteristics given the PSCCH-received resource grid containing PSCCH DM-RS symbols. Use the default channel estimation configuration method, as defined in TS 36.101, Annex F.

Create a structure defining UE-specific settings.

ue = struct('NSLRB',25,'CyclicPrefixSL','Normal','PRBSet',5);

Create the subframe grid, control channel, and indices for a subframe. Populate the subframe with PSCCH symbols.

subframe = lteSLResourceGrid(ue);

[pscchIndices,pscchInfo] = ltePSCCHIndices(ue);
pscchSymbols = ltePSCCH(randi([0 1],pscchInfo.G,1));

subframe(pscchIndices) = pscchSymbols;

Create the control DM-RS and indices. Add the PSCCH DM-RS symbols to the subframe.

subframe(ltePSCCHDRSIndices(ue)) = ltePSCCHDRS;

Perform sidelink SC-FDMA modulation.

txWaveform = lteSLSCFDMAModulate(ue,subframe);

No channel impairment is applied, so set the received waveform equal to the transmit waveform. Perform sidelink SC-FDMA demodulation and channel estimation.

rxWaveform = txWaveform;

rxGrid = lteSLSCFDMADemodulate(ue,rxWaveform);
hest = lteSLChannelEstimatePSCCH(ue,rxGrid);

Estimate the channel characteristics given the PSCCH-received resource grid containing PSCCH DM-RS symbols. The default channel estimation configuration is adjusted.

Create structures defining UE-specific settings and channel estimation configuration settings.

ue = struct('NSLRB',50,'CyclicPrefixSL','Normal','PRBSet',5);

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

Create the subframe grid, control channel, and indices for a subframe. Populate the subframe with PSCCH symbols.

subframe = lteSLResourceGrid(ue);

[pscchIndices,pscchInfo] = ltePSCCHIndices(ue);
pscchSymbols = ltePSCCH(randi([0 1],pscchInfo.G,1));

subframe(pscchIndices) = pscchSymbols;

Create the control DM-RS and indices. Add the PSCCH DM-RS symbols to the subframe.

subframe(ltePSCCHDRSIndices(ue)) = ltePSCCHDRS;

Perform sidelink SC-FDMA modulation.

txWaveform = lteSLSCFDMAModulate(ue,subframe);

No channel impairment is applied, so set the received waveform equal to the transmit waveform. Perform sidelink SC-FDMA demodulation and channel estimation.

rxWaveform = txWaveform;

rxGrid = lteSLSCFDMADemodulate(ue,rxWaveform);
hest = lteSLChannelEstimatePSCCH(ue,cec,rxGrid);

Estimate the channel characteristics and noise power spectral density given the PSCCH-received resource grid containing PSCCH DM-RS symbols.

Create structures defining UE-specific and channel estimation configuration settings.

ue = struct('NSLRB',25,'CyclicPrefixSL','Normal','PRBSet',5);
cec = struct('FreqWindow',7,'TimeWindow',1,'InterpType','cubic', ...
    'PilotAverage','UserDefined');

Create the subframe grid, control channel, and indices for a subframe. Populate the subframe with PSCCH symbols.

subframe = lteSLResourceGrid(ue);

[pscchIndices,pscchInfo] = ltePSCCHIndices(ue);
pscchSymbols = ltePSCCH(randi([0 1],pscchInfo.G,1));

subframe(pscchIndices) = pscchSymbols;

Create the control DM-RS and indices. Add the PSCCH DM-RS symbols to the subframe.

subframe(ltePSCCHDRSIndices(ue)) = ltePSCCHDRS;

Perform sidelink SC-FDMA modulation.

txWaveform = lteSLSCFDMAModulate(ue,subframe);

Add noise to impair the channel. Perform sidelink SC-FDMA demodulation and channel estimation. View the noise estimate.

rxWaveform = awgn(txWaveform,15,'measured');

rxGrid = lteSLSCFDMADemodulate(ue,rxWaveform);
[hest,noiseest] = lteSLChannelEstimatePSCCH(ue,cec,rxGrid);
noiseest
noiseest = 
3.4375e-04

Input Arguments

collapse all

User equipment settings, specified as a structure containing these fields.

Sidelink mode, specified as 'D2D' or 'V2X'.

Data Types: char | string

Number of sidelink resource blocks, specified as an integer scalar from 6 to 110.

Example: 6, which corresponds to a channel bandwidth of 1.4 MHz.

Data Types: double

Cyclic prefix length, specified as 'Normal' or 'Extended'.

Data Types: char | string

Zero-based physical resource block (PRB) index, specified as an integer, an integer column vector, or a two-column integer matrix.

For D2D sidelink, the PSCCH is intended to be transmitted in a single PRB in a subframe and therefore, specifying PRBSet as a scalar PRB index is recommended. For V2X sidelink, the PSCCH is intended to be transmitted in a pair of consecutive PRB in a subframe, therefore PRBSet must be a column vector containing two consecutive indices. However, for a more general nonstandard multi-PRB allocation, PRBSet can be a set of indices specified as an integer column vector or as a two-column integer matrix corresponding to slot-wise resource allocations for PSCCH.

Data Types: double

Cyclic shift for DM-RS, specified as 0, 3, 6 or 9. The function uses this input only for V2X sidelink.

Data Types: double

Data Types: struct

Received resource element grid, specified as an NSC-by-NSym-by-NR array of complex symbols.

  • NSC is the number of subcarriers.

  • NSym = NSF × NSymPerSF = 1 × NSymPerSF

    • NSF is the total number of subframes. For this function rxgrid must contain one subframe.

    • NSymPerSF is the number of SC-FDMA symbols per subframe.

      • For normal cyclic prefix, a subframe contains 14 SC-FDMA symbols.

      • For extended cyclic prefix, a subframe contains 12 SC-FDMA symbols.

    • NR is the number of receive antennas.

Data Types: double
Complex Number Support: Yes

PSCCH channel estimation settings, specified as a structure that can contain these fields.

Size of frequency window, specified as an integer that is odd or a multiple of 12. FreqWindow is the number of resource elements (REs) used to average over frequency.

Data Types: double

Size of time window, specified as an odd integer. TimeWindow is the number of resource elements (REs) used to average over time.

Data Types: double

Type of 2-D interpolation used during interpolation, specified as one of these supported choices.

ValueDescription
'nearest'Nearest neighbor interpolation
'linear'Linear interpolation
'natural'Natural neighbor interpolation
'cubic'Cubic interpolation
'v4'MATLAB® 4 griddata method
'none'Disables interpolation

For details, see griddata.

Data Types: char | string

Type of pilot averaging, specified as 'UserDefined' or 'TestEVM'.

The 'UserDefined' pilot averaging uses a rectangular kernel of size cec.FreqWindow-by-cec.TimeWindow and performs a 2-D filtering operation on the pilots. Pilots near the edge of the resource grid are averaged less because they have no neighbors outside of the grid.

For cec.FreqWindow = 12×X (that is, any multiple of 12) and cec.TimeWindow = 1, the estimator enters a special case where an averaging window of (12×X)-in-frequency is used to average the pilot estimates. The averaging is always applied across (12×X) subcarriers, even at the upper and lower band edges. Therefore, the first (6×X) symbols at the upper and lower band edge have the same channel estimate. This operation ensures that averaging is always done on 12 (or a multiple of 12) symbols. The 'TestEVM' pilot averaging ignores other structure fields in cec, and for the transmitter EVM testing, it follows the method described in TS 36.101, Annex F.

Data Types: char | string

Data Types: struct

Output Arguments

collapse all

Channel estimate between each transmit and receive antenna, returned as an NSC-by-NSym-by-NR array of complex symbols. NSC is the total number of subcarriers, NSym is the number of SC-FDMA symbols, and NR is the number of receive antennas.

For cec.InterpType = 'none',

  • No interpolation between the pilot symbol estimates is performed and no virtual pilots are created

  • hest contains channel estimates in the locations of transmitted DM-RS symbols for each received antenna and all other elements of hest are 0

  • The averaging of pilot symbol estimates, described by cec.TimeWindow and cec.FreqWindow, is still performed

Noise estimate, returned as a numeric scalar. When cec.PilotAverage is 'UserDefined', this output is the power spectral density of the noise present on the estimated channel response coefficients. Otherwise, noiseest returns 0.

References

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

Version History

Introduced in R2017a