SWAN: Stitched Wi-Fi ANtennas

GitHub of SWAN | Atheros CSI Tool | GitHub of Atheros CSI Tool

Overview (Cite SWAN)

SWAN is a general-purpose antenna extension solution with commodity Wi-Fi. SWAN builds an array of stitched antennas extended from the radio chains of commodity Wi-Fi. SWAN has low hardware cost and provides easy-to-use interfaces embedded in the Linux kernel. SWAN provides a set of general user programming interfaces embedded in the Linux kernel of the Wi-Fi AP. SWAN follows the general Wi-Fi transmission and reception procedures in Linux kernel so the users of SWAN can simply use existing socket interfaces. Integrated with our Atheros CSI tool, SWAN can provide detailed information about wireless transmission, including the CSI, the data rate, the RSSI of each antenna, the payload of received packets and so on. Being a general purpose platform, SWAN allows easy scripting to task underlying APIs to support different user applications. We build a virtual phased-array and form a circular array for wireless azimuth estimation and indoor localization. We also build a MIMO communication system with antenna selection that harnesses spatial diversity to improve throughput. The architecture and the prototype we have built is shown in the following figure.



SWAN extends the antenna array of commodity AP by connecting each radio chain to multiple antennas through RF switches, which features a plug-and-play mode. The above figure illustrates the architecture of SWAN based on single pole four throws (SP4T) RF switches as an example. Specifically, each of the three radio chains of the AP is connected to four antennas through SP4T RF switch using coaxial cable (RG50) and a 12-antenna array is thus obtained. SWAN uses an external micro-controller (MCU) that connects to all RF switches and controls the antenna switch through GPIO. Finally, the external MCU is connected to the AP through Ethernet cable which enables the control exchange between the AP and the MCU. For each radio chain, the AP is able to pick up any one out of the four antennas to transmit or receive a Wi-Fi packet, which gives 4 × 4 × 4 possible antenna combinations for configuring the three radio chains. The AP configures the selected antenna combination and signals the MCU to switch the three SP4Ts to connect to the selected antennas for packet transmission and reception.

The system can easily be scaled to a larger array of antennas by applying higher split RF switches (e.g., using SP8T for eight throws, which gives us 8×8×8 antenna combinations), or cascaded connection of multiple RF switches


We build a SWAN prototype with commercialoff-the-shelf (COTS) and low-cost hardware, as shown in above figure. The hardware used can be easily replaced with other general COTS substitutes of similar functionality.

We test with two different AP models - COMPEX WPJ558 and TP-Link WDR4300. The SP4T RF switches used are Peregrine PE42442, which provides fast switch speed, i.e., 225ns, low signal loss, i.e., 0.8 and 1.0 dB in 2.4GHz and 5GHz respectively, and high linearity, i.e., 58dBm IIP3 and 110dBm IIP2. We use an Arduino board to serve as the external MCU with its GPIO to control the PE42442 switches. Specifically,we connect two GPIO pins of the Arduino to a two-pin voltage CMOS control interface of PE42442. Arduino MCU controls PE42442 by changing the voltage state on the two control pins. The Arduino board is powered via USB from the AP and connected through an Ethernet cable to the AP for control exchange. All hardware and interfaces are standard and no hardware modification is required to the AP or Arduino board.


SWAN provides an in-kernel user interface that allows users of SWAN to configure the antenna combinations for transmitting and receiving each individual Wi-Fi packet. Since the Wi-Fi NIC takes time to gain the channel access before transmitting the packet just as the following figure shows, SWAN makes use of that time interval to signal the choice of antenna combination to the Arduino and switch the antenna accordingly before the actual transmission/reception of every packet.

Time stringency. 802.11 Wi-Fi transmission and reception impose stringent time requirement on antenna switching. Wi-Fi adopts CSMA where the shortest time interval from sensing the idle channel to transmitting or receiving the next packet is DIFS = 34 μs (The following figure illustrates a Wi-Fi transmission example). Therefore, SWAN has to signal the Arduino and switch the antenna combination within the 34 μs DIFS duration, to guarantee correct antenna configurations.



Fast control exchange. Maintaining a flow over the Ethernet cable between the AP and the Arduino, e.g., TCP, is a natural choice for conveying those control messages, which, however, is known time consuming (hundreds of microseconds to milliseconds of latency) so that the control exchange cannot be finished within channel accessing time.



To address such a problem, we propose a fast control exchange method which rides on Linux TCP sockets but bypasses all time-consuming operations. Normally, a packet (either the Wi-Fi packet or Ethernet packet) must go through multiple layers before reaching the user in the user space, just as above figure (a) shows. We propose a fast control exchange method that can bypass all the unnecessary operations at all those layers. Specifically, we let the Wi-Fi driver directly talks to the Ethernet driver, just as above figure (b) shows. If the Wi-Fi driver successfully receives/transmits a frame from its Wi-Fi NIC, the Wi-Fi driver informs the Ethernet driver about the status of the Wi-Fi packet. The Ethernet driver then directly sends a command through the Ethernet cable to the Arduino immediately. By doing so, the choice of antenna combination is delivered to the Arduino with minimum delay. To install SWAN on your AP, please check the GitHub of SWAN.


SWAN: Stitched Wi-Fi ANtennas[PDF]
Yaxiong Xie, Yanbo Zhang, Jansen Christian Liando, Mo Li
The 24th Annual International Conference on Mobile Computing and Networking (MobiCom 2018)