# Virtual Signal Processing-Based Integrated Multi-User Detection
## 3 Design of VSP-IMUD
### VSP-IMUD-Based Rx Structure  
Based on the designs of IMUD and CAD in the previous two subsections, we now present the VSP-IMUD-based Rx structure. As Figure 3 shows, there are three processing steps in the Rx structure.  
_Step 1_ : At Switch A, we check the relationship between the number of symbols to be decoded, denoted as \(\text{card}(\Omega)\), and the total number of Txs, denoted as \(K\). If \(\text{card}(\Omega)=K\), we switch to A1, and the received mixed signal is fed into the CAD module for ambiguity detection (i.e., proceed to Step 2). If \(\text{card}(\Omega)<K\), we switch A to A2 and continue with ambiguity detection for the remaining mixed signal (i.e., proceed to Step 2).  
_Step 2_: For the mixed signal that has passed through the CAD module, we check \(c_{max}\) at switch B. If \(c_{max}=0\), we switch B to B1, and the mixed signal is fed into the IMUD module. As Figure 3 shows, there are \(M=L^{card(\Omega)}\) filter chains in this structure. Each chain uses a filter vector that matches the spatial feature of a possible equivalent/structured mixed signal.  
We then calculate the modulus of the output from each filter chain and determine the index of the filter chain yielding the largest modulus. Based on this index information, we can obtain two potential desired symbol sets, namely \(\Phi_{C}\) and \(-\Phi_{C}\). To finalize the symbol set, the Rx employs a ZF filter vector \(\mathbf{w}_{\text{ZF}}\) to recover the signal from the Tx with the largest channel gain relative to the Rx, and adopts the decoded data \(x_{B}\) as the referential symbol. If there is an \(x_{B}^{*}\) in \(\Phi_{C}\) such that \(x_{B}=x_{B}^{*}\), we switch C to C1 and output \(\Phi_{C}\) as the final decoded symbol set. Conversely, if \(x_{B}\
eq x_{B}^{*}\), we switch C to C2 and output \(-\Phi_{C}\). In this way, signals from all TXs are detected.  
Figure 3: VSP-IMUD-based Rx structure.  
At switch B, if \(c_{max}\
eq 0\), it indicates that the ambiguity of the mixed signal has not been fully resolved. Therefore, we switch B to B2 to allow the Rx to sort the channels by their ambiguity values in descending order and to detect the signals propagating through these channels. If the number of signals with \(c_{k}\
eq 0\) exceeds \(N_{R}\), the Rx employs ICom/SIC-ZF to detect the signals from the Txs corresponding to the first \(N_{R}-1\) channels with the highest \(c_{k}\) values. This results in obtaining \(N_{R}-1\) data symbols, which we denote as \(\Omega_{ZF1}\). We can then reconstruct the detected signals and utilize SIC to subtract them from the mixed signal. After this, we can update the symbol set \(\Omega\) as \(\Omega\leftarrow\Omega-\Omega_{ZF1}\). Finally, we compare \(\text{card}(\Omega)\) with \(N_{R}\) and proceed to Step 3.  
_Step 3_: At switch D, if \(\text{card}(\Omega)\leq N_{R}\), we switch D to D1 and concurrently switch E to E1. The Rx can then apply the ZF matrix \(\mathbf{W}_{ZF2}\) to directly detect the remaining mixed signals and obtain the detected symbol set \(\Omega_{ZF2}\). This completes the MUD process. If \(\text{card}(\Omega)>N_{R}\), it indicates that the Rx does not have enough antennas to decode \(\text{card}(\Omega)\) data. Moreover, it remains uncertain whether the ambiguity in the symbol set \(\Omega\) has been mitigated. Consequently, we switch D to D2, switch F to F1, and return to Step 1, sending the mixed signal back to switch A. At switch A, since \(\text{card}(\Omega)<K\), we switch A to A2 and perform channel ambiguity detection. Based on the output from the CAD module, we switch B to either B1 or B2 (as discussed in Step 2). These steps are repeated until all \(K\) signals are successfully detected.