Channel Estimation and Equalization for PBCH

This module provides the channel estimator and equalizer for physical broadcast channel (PBCH). The implementation consists of 3 parts:

  1. Channel estimation

  2. Channel interpolation

  3. Symbol Equalization

The channel estimator supports zero-forcing (ZF) and minimum mean square error (MMSE) estimator. The channel estimation is followed by interpolating the channel at time-frequency locations where information symbols are transmitted. Currently, only nearest neighbour interpolator is supported but it will soon be extended to linear and 2D spline interpolator as well. Finally once the channel is estimated at the symbol location, the equalization is performed to offset the phase and scaling effect of the wireless channels.

Note

Channel estimator supports zero-forcing (ZF) and minimum mean square error (MMSE) estimation methods.

Note

Currently, only nearest neighbour interpolator is supported but it will soon be extended to linear and 2D spline interpolator as well.

Note

For symbol Equalization, Least square method is used.


Examples

estimatorType    = 'ZF'
# estimatorType    = np.random.choice(['ZF', "MMSE"])
interpolatorType = 'NN'
chEst            = ChannelEstimationAndEqualization(estimatorType = estimatorType,
                                                    interpolatorType = interpolatorType)

rxGrid        = np.random.randn(4,240) + 1j*np.random.randn(4,240) # SSB grid of size (4, 240)
pilots        = np.random.randn(144)   + 1j*np.random.randn(144)   # dmrs Sequence of length (144,)
pilotLocation = tk.ResourceMapping.SSB_Grid(0).dmrsIndices         # Indices where DMRS: Tuple of 2 numpy arrays each of size 144
dataLocation  = tk.ResourceMapping.SSB_Grid(0).pbchIndices         # Indices where PBCH: Tuple of 2 numpy arrays each of size 432
snr           = 10                                                 # Signal to noise ratio

pbchSymbols = chEst(rxGrid = rxGrid, pilots = pilots,
                    pilotLocation = pilotLocation,
                    dataLocations = dataLocation, snr=snr)

print(pbchSymbols.shape)
(432,)

The details about the input-output interface of the module are detailed below.

class toolkit5G.ReceiverAlgorithms.ChannelEstimationAndEqualization(estimatorType='ZF', interpolatorType='NN')[source]

This module provides the class for channel estimation and equalization for physical broadcast chanel (PBCH). The implementation uses least Square estimator with nearest neighbour interpolator to estimate the channel and zero forcing (least squares) to equalize the received grid.

Note

When estimatorType is “MMSE”, snr must be passed.

Parameters:
  • estimatorType (str) – Defines the estimator type. It can take values from the set \(\{\) “ZF”, “MMSE” \(\}\). Default value is “ZF”.

  • interpolatorType (str) – Defines the estimator type. It can take values from the set \(\{\) “NN” \(\}\). Default value is “NN”.

Input:
  • rxGrid ((4, 240), np.complex) – Defines the received SSB Grid.

  • pilots ((144,), np.complex) – Defines the dmrs sequence transmitted for channel estimation

  • pilotLocation ((2,), Tuple of 2 NumPy arrays each of size 144.) – Defines the time-frequency (n,k)s locations where DMRS-PBCH are transmitted.

    • pilotLocation[0] contains time indices.

    • pilotLocation[1] contains frequency/subcarrier indices.

  • dataLocations ((2,), Tuple of 2 NumPy arrays each of size 432.) – Defines the time-frequency (n,k)s locations where PBCH symbols are transmitted.

    • dataLocations[0] contains time indices.

    • dataLocations[1] contains frequency/subcarrier indices.

  • snr (number) – Defines the signal to noise ratio. This parameter is relevant only when estimatorType is “MMSE”.

Output:

(432,), np.complex – Returns the equalized PBCH symbols.

Raises:
  • ValueError – [Error-ChannelEstimationAndEqualization]: Invalid choice of channel estimation type!

  • ValueError – [Error-ChannelEstimationAndEqualization]: Invalid choice of interpolatorType type!