## 2 GPS SDR Architecture for CRPA Processing and Computational Challenges
In our GPS SDR for a four-element CRPA, five tracking channels are necessary for each beamsteering channel due to the on-the-fly phase calibration. Thus, the cost of carrier and code wipeoff is \(5\times 216N=1,080N\). For beamforming, input data from four antennas should be combined together with proper weights. Weighting is complex multiplications as in Equation (3), and \(N\) inphase and \(N\) quadrature samples per antenna requires \(6N\) multiplications and additions for weighting. Thus, the weighting of four-antenna data costs \(4\times 6N=24N\). After weighting each antenna data, all weighted data need to be added together, which requires \(3N\) additions for inphase samples and \(3N\) additions for quadrature samples per beamsteering channel. Thus, \(12\times(24N+3N+3N)=360N\). operations are required for 12 beamsteering channels having 12 different weight vectors. The MVDR processing requires signal covariance matrix calculation. The measurement vector \(\mathbf{X}\) in Figure 3 and Equation (4) is a 4-by- \(N\) complex matrix. The calculation of AB\({}^{T}\) in Equation (4) takes approximately \(32N\) multiplications and additions (N multiplications and N-1 additions for each element of AB\({}^{T}\) which has 16 elements), but the calculation of AA\({}^{T}\) or BB\({}^{T}\) takes about a half operations because of its symmetry. Thus, X\({}^{*}\)X\({}^{T}\) costs approximately \(16N+16N+32N\)) = \(64N\). \[\mathbf{X}^{*}\mathbf{X}^{T}=(\mathbf{A}-j\mathbf{B})(\mathbf{A}^{T}+j \mathbf{B}^{T})=(\mathbf{A}\mathbf{A}^{T}+\mathbf{B}\mathbf{B}^{T})+j( \mathbf{A}\mathbf{B}^{T}-\mathbf{A}^{T}\mathbf{B}) \tag{4}\]  
Therefore, the total number of multiplications and addition for the carrier and code wipeoff, data synthesis, and covariance calculation for our GPS SDR for a four-element CRPA is approximately \(1,080N+360N+64N=1,504N\). This required number of operations per millisecond is significantly larger than the number of operations of a conventional 12-channel and single-antenna GPS SDR, which is \(216N\) (Table 2). Since GPS L5-code bandwidth is ten times wider than GPS L1 C/A-code bandwidth, the sampling rate for L5 processing should be ten-times higher and thus the number of digitized samples per millisecond would be ten-times more. Our GPS SDR is designed to process 40 Msps for future L5 processing. Hence, the required computational cost of our SDR for CRPA is about 70-times higher than a 12-channel single-antenna GPS SDR processing 4 Msps L1 C/A signals as shown in Equation (5):  
\[\frac{1504N_{L5}}{216N_{L1}}=\frac{1504\times 10N_{L1}}{216N_{L1}}=69.63 \tag{5}\]  
If a GPS SDR processes only 2-bit resolution data, the bitwise-parallel correlation algorithm in [39] can reduce the computational burden. The bit-wise parallel correlation is known to be about twice as fast as a conventional integer correlation. However, an anti-jam GPS SDR for CRPA requires more dynamic range and our SDR processes 14-bit resolution data. In this case, the bitwise-parallel correlation scheme does not provide any benefit. Although current CPUs in the market are very powerful, it is very unlikely we will have a CPU whose single thread can run 70 GPS L1 SDRs simultaneously in the foreseeable future. Even modern multi-threaded C/C++ codes on a quad-core CPU in [29] could not achieve this much computational power. As a more powerful general-purpose processor specifically designed for parallel processing, a GPU can share significant computational burden as a co-processor. Nevertheless, GPU-based GPS SDRs in the literature (Table 1) do not seem to demonstrate enough computational power for the CRPA processing explained in this section. Although a rigorous comparison between different GPS SDR performances is not possible without profiling the source codes, rough comparisons can still be made. For example, the 8-channel, 40 Msps GPS SDR in [32] is not enough for the CRPA processing of this paper which requires correlation operations of 60 channels with 40 Msps data.