## 3 Massive-MIMO Sparse Uplink Channel Estimation Using a First-Order Statistics Based Approach
### Proposed SiT Based Massive-MIMO Sparse Uplink Channel Estimation Techniques
#### 3.2.1 SiT Based Stage-Wise Orthogonal Matching Pursuit (SiT-StOMP)  
In [34], StOMP was proposed with an objective of performance enhancement in the reconstruction of sparse signals for large-scale CS problems while keeping the computational cost low. This performance enhancement in StOMP is achieved by allowing for selecting multiple columns per iteration as opposed to single column selection based strategy of MP and OMP algorithms. It has been established in [34] that for the reconstruction of large-scale sparse signals, StOMP performs faster than MP and OMP.  
At each iteration of the StOMP algorithm, several columns from the measurement matrix are added to the active set as compared to the single column selection of the OMP algorithm. In StOMP, the selection of columns takes place according to a certain pre-determined threshold value. Only those columns are selected whose absolute correlations with the current residual exceed the threshold value. After selection of columns, StOMP then solves for a least squares problem to update the residual vector. Thus, StOMP converges faster than OMP since it requires less number of iterations to reconstruct the sparse solution.  
Due to faster convergence and better performance for large-scale systems, StOMP has been considered as a viable solution for the estimation of massive-MIMO sparse uplink channels. Therefore, in order to reconstruct the sparse channel vector \(\mathbf{h}_{n_{t},n_{t}}\) from the model presented in Equation (14), we incorporate the StOMP algorithm. The proposed SiT-StOMP algorithm for the estimation of channel vector between \(n_{t}\)-th receiver and \(n_{t}\)-th transmitter is outlined as below:  
**Input**: Matrix \(\mathbf{C}_{n_{t}}\), vector \(\mathbf{\hat{d}}_{n_{t}n_{t}}\), and threshold \(\epsilon_{i}\).
**Output**: Channel estimate vector \(\mathbf{\hat{h}}_{n_{t}n_{t}}^{\text{StOMP}}\).  
1. Initialize residual \(\mathbf{r}_{0}=\mathbf{\hat{d}}_{n_{t}n_{t}}\), index set \(\Phi_{0}=\emptyset\), and iteration counter \(i=1\).
2. Create a set \(\mathbf{\Omega}_{i}\) consisting of the indices of all elements in the vector, \(\boldsymbol{\psi}_{i}=\mathbf{C}_{n_{t}}^{H}\mathbf{r}_{i-1}\), which are above the threshold \(\epsilon_{i}\) \[\mathbf{\Omega}_{i}=\{j:\boldsymbol{\psi}_{i}(j)\geq\epsilon_{i}\}.\]
3. Update the index set by \(\Phi_{i}=\Phi_{i-1}\cup\Omega_{i}\) and residual by \[\mathbf{\hat{h}}_{n_{t}n_{t}}=\arg\min_{\mathbf{\hat{h}}_{n_{t}n_{t}}\in \mathbb{R}^{\Phi_{i}}}\|\mathbf{\hat{d}}_{n_{t}n_{t}}-\mathbf{C}_{n_{t}} \mathbf{\hat{h}}_{n_{t}n_{t}}\|_{2}^{2},\] \[\mathbf{r}_{i}=\mathbf{\hat{d}}_{n_{t}n_{t}}-\mathbf{C}_{n_{t}}\mathbf{\hat{h }}_{n_{t}n_{t}}.\]
4. Check stopping criteria; if it is not met then update index \(i=i+1\), and go to step 2; if stopping criteria is met, set the final output vector as \(\mathbf{\hat{h}}_{n_{t}n_{t}}^{\text{StOMP}}=\mathbf{\hat{h}}_{n_{t}n_{t}}\).  
The stopping criteria in this case is a fixed number of maximum iterations, \(\Lambda\). In order to avoid false alarms and missed detection, as proposed in [34], the threshold is set as \(\epsilon_{i}=t_{i}\|\mathbf{r}_{i}\|_{2}/\sqrt{P}\), where \(2\leq t_{i}\leq 3\). When the channel is sufficiently sparse, after the algorithm exits, \(\Phi_{i}\) is expected to have no more than \(P\) entries and all the non-zeros in \(\mathbf{\hat{h}}_{n_{t}n_{t}}^{\text{StOMP}}\) are selected in \(\Phi_{i}\).