LMMSEInterpolator1D#
- class sionna.phy.ofdm.LMMSEInterpolator1D(pilot_mask: numpy.ndarray, cov_mat: torch.Tensor, last_step: bool)[source]#
Bases:
sionna.phy.object.ObjectLMMSE interpolation across the inner dimension of the input.
The two inner dimensions of the input
h_hatform a matrix \(\hat{\mathbf{H}} \in \mathbb{C}^{N \times M}\). LMMSE interpolation is performed across the inner dimension as follows:\[\tilde{\mathbf{h}}_n = \mathbf{A}_n \hat{\mathbf{h}}_n\]where \(1 \leq n \leq N\) and \(\hat{\mathbf{h}}_n\) is the \(n^{\text{th}}\) (transposed) row of \(\hat{\mathbf{H}}\). \(\mathbf{A}_n\) is the \(M \times M\) interpolation LMMSE matrix:
\[\mathbf{A}_n = \mathbf{R} \mathbf{\Pi}_n \left( \mathbf{\Pi}_n^\intercal \mathbf{R} \mathbf{\Pi}_n + \tilde{\mathbf{\Sigma}}_n \right)^{-1} \mathbf{\Pi}_n^\intercal.\]where \(\mathbf{R}\) is the \(M \times M\) covariance matrix across the inner dimension of the quantity which is estimated, \(\mathbf{\Pi}_n\) the \(M \times K_n\) matrix that spreads \(K_n\) values to a vector of size \(M\) according to the
pilot_maskfor the \(n^{\text{th}}\) row, and \(\tilde{\mathbf{\Sigma}}_n \in \mathbb{R}^{K_n \times K_n}\) is the regularized channel estimation error covariance. The \(i^{\text{th}}\) diagonal element of \(\tilde{\mathbf{\Sigma}}_n\) is such that:\[\left[ \tilde{\mathbf{\Sigma}}_n \right]_{i,i} = \max \left\{ \left[ \mathbf{\Sigma}_n \right]_{i,i},\; 0 \right\}\]built from
err_varand assumed to be diagonal.The returned channel estimates are
\[\begin{split}\begin{bmatrix} {\tilde{\mathbf{h}}_1}^\intercal\\ \vdots\\ {\tilde{\mathbf{h}}_N}^\intercal \end{bmatrix}.\end{split}\]The returned channel estimation error variances are the diagonal coefficients of
\[\text{diag} \left( \mathbf{R} - \mathbf{A}_n \mathbf{\Xi}_n \mathbf{R} \right), 1 \leq n \leq N\]where \(\mathbf{\Xi}_n\) is the diagonal matrix of size \(M \times M\) that zeros the columns corresponding to rows not carrying any pilots. Note that interpolation is not performed for rows not carrying any pilots.
Remark: The interpolation matrix differs across rows as different rows may carry pilots on different elements and/or have different estimation error variances.
- Parameters:
pilot_mask (numpy.ndarray) – Mask indicating the allocation of resource elements. 0: Data, 1: Pilot, 2: Not used.
cov_mat (torch.Tensor) – Covariance matrix of the channel across the inner dimension
last_step (bool) – Set to True if this is the last interpolation step. Otherwise, set to False. If True, the output is scaled to ensure its variance is as expected by the following interpolation step.
- Inputs:
h_hat – [batch_size, num_rx, num_rx_ant, num_tx, \(N\), \(M\)], torch.complex. Channel estimates.
err_var – [batch_size, num_rx, num_rx_ant, num_tx, \(N\), \(M\)], torch.float. Channel estimation error variances.
- Outputs:
h_hat – [batch_size, num_rx, num_rx_ant, num_tx, num_streams_per_tx, \(N\), \(M\)], torch.complex. Channel estimates interpolated across the inner dimension.
err_var – Same shape as
h_hat, torch.float. The channel estimation error variances of the interpolated channel estimates.