# A Baseband Wireless Spectrum Hypervisor for Multiplexing Concurrent OFDM Signals
## 6 Proof of Concept Prototype
After modulating the data, each vPHY maps, according to the channel configured in the Tx control message, its \(N_{\text{vPHY}}^{\text{U}}\) modulated symbols into a memory buffer, called, _resource grid buffer_, which is a 1 ms (i.e., the duration of a subframe) representation of the frequency-domain spectrum band multiplexed by the PHY prototype. Each vPHY only has to map the \(N_{\text{vPHY}}^{\text{U}}\) data symbols (i.e., useful symbols), while the remaining positions or subcarriers of the buffer have their values already set to zero before every new transmission. In the current implementation of the prototype, \(N_{\text{vPHY}}^{\text{U}}=72\) and \(N_{\text{vPHY}}=128\) subcarriers. The _resource grid buffer_ is a discretized, in number of subcarriers or IFFT points, representation of the spectrum for the duration of 1 ms. In this version of the prototype, we used a 1536-point IFFT. The _resource grid buffer_ is a memory buffer that is shared by all vPHYs. \begin{table}
\begin{tabular}{l l l l l} \hline \hline
**vPHY Message** & **Parameter** & **Type** & **Unit** & **Range** \\ \hline \multirow{8}{*}{**Tx control**} & vPHY ID & uint32 & - & 0–1 \\  & Tx gain & float & \% & 0-100\% \\  & Tx vPHY BW & uint8 & MHz & 1–6 1 \\  & Tx channel & uint32 & - & \(\geq\)0 \\  & Data struct & uchar[] & - & uchar range \\  & MCS & uint8 & - & 0–28 \\  & \# of resource blocks & uint8 & - & 1–100 \\  & User Data length & uint32 & - & \(>\)0 \\  & User data & uchar[] & - & uchar range \\ \hline \multirow{2}{*}{**Rx control**} & vPHY ID & uint32 & - & 0–1 \\  & Rx vPHY BW & uint8 & MHz & 1–6 1 \\  & Rx channel & uint32 & - & \(\geq\)0 \\ \hline \multirow{8}{*}{**Rx statistics**} & vPHY ID & uint32 & - & 0–1 \\  & CQI & uint8 & - & 0–15 \\  & RSSI & float & dBW & float range \\  & Noise & float & dBW & float range \\  & Decoded MCS & uint8 & - & 0–28 \\  & CRC error counter & uint32 & - & \(\geq\)0 \\  & Data length & uint32 & - & \(\geq\)0 \\  & Received data & uchar[] & - & uchar range \\ \hline \hline \end{tabular}
\end{table} 
Table 2: List of messages and their respective parameters. In the demodulation case, the IQ samples that are output by the Hypervisor Rx module are decoded accordingly by the respective vPHY. In the current implementation of the prototype 12 vPHYs can be instantiated and concurrently transmit/receive their data. This number of vPHYs is obtained by dividing the number of IFFT points, \(N=1536\), by the total number of vPHY subcarriers including the null ones, \(N_{\text{vPHY}}=128\). * **Hypervisor Tx**: applies a 1536-point IFFT to the _resource grid buffer_, adds CP and transfers the IQ samples to the USRP for transmission over the air. The internal architecture of the Hypervisor Tx module is depicted in Figure 9. As showed in the figure, the Hypervisor Tx can be seen as an OFDM modulator where each OFDM symbol is created by reading and processing the consecutive 1536 data symbols stored at the _resource grid buffer_. As showed in Figure 9, the _resource grid buffer_ stores data of 12 channels \(\times\) 14 OFDM symbols, totaling 1 ms of data. * **Hypervisor Rx**: applies a FIR polyphase filter-bank channelizer to the IQ samples received from the USRP and outputs the \(M\) down-converted channels to the vPHYs for data demodulation and decoding. The channels output by the channelizer are centered at 0, \(N_{\text{vPHY}}\times\Delta_{f}\), \(2\times N_{\text{vPHY}}\times\Delta_{f}\), \(3\times N_{\text{vPHY}}\times\Delta_{f}\), \(M-1\times N_{\text{vPHY}}\times\Delta_{f}\), respectively, where \(N_{\text{vPHY}}\times\Delta_{f}=1.92\) MHz  
For improved processing performance, each one of the just described modules runs on an exclusive thread.