## 2 Beamforming Algorithm Used in the Software Receiver  
The primary goal of CRPA is to enhance the carrier-to-noise ratio (C/N\({}_{0}\)) of desired signal and reject the interferers. Digital beamforming approaches are used to implement CRPA by combining the signals of an antenna array. Various signal combination approaches are well documented in the literature, which include frequency-processing, spatial-processing, STAP [13] and Space-Frequency Adaptive Processing (SFAP) [17]. Frequency-processing is primarily against narrowband interference. Spatial-processing is efficient against both broadband and narrowband interferers, but it can cancel only _N_-1 interferers, where \(N\) is the number of elements in the antenna array. STAP or SFAP places nulls both in the frequency and spatial domain and can cancel more than _N_-1 interferers if some interferers are narrowband. Despite their benefit, the computational complexity of STAP or SFAP is high, so implementing them in a real-time software receiver is challenging. Several algorithms have been proposed to calculate weights for STAP or SFAP. Some algorithms optimize certain conditions with known signal structure of the desired signal such as maximum signal-to-interference ratio, minimum mean square error and minimum output power. Other algorithms do not need prior knowledge of signal structure but minimize output power to certain constraints such as MVDR [12] and Constrained Least Mean-Squares [18]. The constraints can be set to form a beam in the direction of satellite or steer a null in the direction of interference. The steering vector associated with the direction of satellite can be obtained from either satellite ephemeris and array calibration information or even carrier phase differences between elements of an antenna array can be leveraged as a simplified model. In order to be able to reject multiple interferers with different bandwidths, we adopt the STAP with adaptive MVDR beamforming algorithm [19] to implement CRPA shown in Figure 1. After down-conversion to zero IF and digitization, the IF signal of each antenna is complex and denoted as \(S_{n}[k]\). Each signal is then multiplied by complex weights \(w_{n}\) and summed over all antennas to make a composite signal as follows:\[y[k]=\sum_{n=1}^{N}\sum_{m=0}^{M-1}w_{nm}s_{n}[k-m]=W^{\,H}S[k] \tag{1}\] \[W=\left[w_{10}\quad w_{20}\quad\cdots\quad w_{N0}\quad w_{11} \quad\cdots\quad w_{N1}\quad\cdots\quad w_{N0}\quad\cdots\quad w_{N(M-1)}\right]\] \[S[k]=\left[\underline{s}[k]\quad\underline{s}[k-1]\quad\cdots \quad\underline{s}[k-(M-1)]\right]^{T}\] \[\underline{s}[k]=\left[s_{1}[k]\quad s_{2}[k]\quad\cdots\quad s_{ N}[k]\right]\]  
where \(N\) is the number of elements in the antenna array. \(M\) is the number of time taps. \(s_{n}[k-m]\) is the signal from \(n^{\text{th}}\) antenna element and \(m^{\text{th}}\) time tap. \(w_{nm}\) is the weight associated to the \(n^{\text{th}}\) antenna and \(m^{\text{th}}\) tap. The MVDR algorithm minimizes the output power and constraints the gain of the direction of desired signal to unity as follows [18]:  
\[ \begin{split}\text{minimize}\left|y\right|^{2}=W^{\,H}RW\\ \text{subject to}\,\,\,\,W^{\,H}\,C=1\end{split}  \tag{2}\]  
where \(R\) is the covariance matrix of input signals and \(C\) is the constraint vector toward the target satellite. The covariance matrix \(R\) is estimated by computing sample covariance matrix with assuming the sample mean is zero as follows:  
Figure 1: Architecture of STAP with adaptive MVDR beamforming algorithm. \[R[k]=\left[ \begin{array}{ccccccccc}r_{i_{0}u_{0}}&r_{i_{0}l_{1}}&\cdots&r_{i_{0}l _{N_{s}-1}}&r_{i_{0}2_{0}}&\cdots&r_{i_{0}N_{s+1}}\\ r_{i_{0}u_{0}}&r_{i_{1}h_{1}}&&&\\ \vdots&\ddots&&&\\ r_{i_{u}\cdots l_{a}}&&&r_{i_{u}\cdots l_{u-1}}&&&\vdots\\ r_{2_{l_{a}}}&&&r_{2_{0}2_{0}}&&&\\ &&&&r_{3_{u-1}l_{a}}&\cdots&&&r_{N_{s}l_{u-1}}\\ \end{array} \right] \tag{3}\]  
where \(N_{s}\) is the number of samples to compute the covariance matrix. The overline sign is defined as complex conjugation.