Abstract

This article is about a new way of communication for edge IoT devices. Aims at transmitting information of sensors without consuming energy or even store energy for sensing environment.

It is a great method to deal with situation which may encounter some problems like short-energy.

We realise this method based on 802.11.ac frame structure, using a mcu controling RFID switch to change the resist value, which cause the changing in phase of the Wi-Fi packets.

The 180 degrees inversion in phase of Wi-Fi packets will destroy the mac frame of signal transmitted in Los(Line of sight) as superimposed by the inversed Wi-Fi packets, which cause the 0 bits in ACK block.

So we can get the information that we modulated onto the Wi-Fi packets without transmitting it by decoding the ACK blocks. That is the main concept of what we do.

什么是WiFi反向散射系统(WiFi BackScatter Communication System)

直观点说,Backscatter 通信是一种极低功耗通信方式,设备不用主动“发射信号”,而是通过反射已有的无线信号(比如WiFi)来传递数据。基本原理是假设空气中已经存在一个无线信号(比如 WiFi 路由器发出的信号),背散射设备(比如标签)不自己发射信号,而是通过调节天线的阻抗,选择性地反射或不反射这些信号。接收端设备(比如智能手机)检测这些变化,从中恢复出数据。

可以理解为有人一直在用手电筒(WiFi 信号)照一个镜子,这个镜子(WiFi Tag)可以控制自己是反光还是吸光(反射或不反射信号),你站在另一边看,就能根据“亮”或“不亮”来解码信息。这样的通信方式可以实现超低功耗(甚至可以完全无电池),完全适配物联网(IoT)设备、RFID 标签等。

如何理解WiFi Backscatter所谓的破坏

  1. 理解WiFi Tag的工作方式我们就需要先知道WiFi是怎么传输数据的。我们都知道数据在电脑中是呈现为0101这样的二进制比特流的,每8个bit构成一个字节。而WiFi将至少一个字节包装成一个子帧(subFrame),Tag就是以子帧为基本单位实现破坏的功能的(也就是说破坏很多个bit)。已知我们手机(UE)向路由器发送数据,如果路由器成功接收了那么就会回应UE一个BA(Block ACK)。如果接收到了,在BA对应的帧位置上会显示为1.假设我们原本要传输一共10个子帧,如果AP(例如路由器)全部都接收到了,那么在Wireshark(一个抓包软件)上就会显示BA对应位置有10个1(1表示成功接收)。

  2. 有的人想你把用户发出的数据破坏了,那用户不就丢包了吗?这时候,我们就要理解多径。信号在空气中不是只沿一条直线传播的,而是在一定范围的角度范围内都有的,这也导致了多径的产生。假设我们现在发出的信号只有两条路径

Multiple Path

其中从Helper到Reader的路径是最短的直线(称为LOS)。另一条路径的信号可能由于外界环境的反射(跟声波一样),路径长度更长,使得信号到达Reader时相比于LOS有一个时延,而这个时延就会导致信号的相位发生改变(改变180°就相当于反向)。

  1. 那么我们如何实现这个相位反向呢,靠运气等环境自己使信号相位改变吗?下面我们就要讲硬件实现思路。我们都知道信号波长与频率之间的关系:

Multiple Path

一般频率我们已知,那么我们也就能够算出来信号的波长。一个波长从公式的角度等价于一个完整周期,等价于一个360°的相位偏移,那么我们可以设计一个标签我们的Tag在信号的传输路径中间,用一个开关切换路径,一共两条,一条路径长度是一个完整波长,那么信号通过Tag的天线进入标签再出来经过了一个完整的周期,可以认为相位不变;另一条路径的长度是半个波长,同理信号进入Tag再出来相位改变了180°,与原来的信号反向。相当于我们人为的将多径的长度差变成了一个波长。

WiFi Tag调制的具体实现流程

假设我们的手机和WiFi路由器在进行数据交换,在一种理想的情况下我们的信号质量很好,没有丢包的情况。我们在中间加入WiFi Backscatter Tag,并且以10KHz的频率去切换开关。假设我们手机网卡发送子帧的速率也是10K个子帧每秒,那么我们可以假设在LOS(即前面说的直射路径)中传输的信号(调制了10K个子帧)的相位都是0°(相对的)。然后在有WiFi Tag的另一条路径,信号调制的10K个子帧有5K个相位为360°,有5K个相位为180°。相位为360°的跟LOS的信号叠加在一起由于同相,对原来的信号起到增强的作用,接收端全是1(参考基础知识1)而相位为180°的跟LOS的信号反向,叠加到一起刚好相互抵消了,那么接收端就是全0(理想情况)。那么我们就可以通过这个0、1之间的交替得出我们WiFi Tag要调制的信号,如下:

Multiple Path


以下是,我们如何通过软件实现对上述流程的仿真以及体现。

Introduction of environment

In this section I will briefly give a introduction of the hardware requirement, software requirement and the system environment which we based on.

  • Firstly, we setup ubuntu 22.04 version in real PC because one of the software we used requires real NIC(Network Interface Card).
  • Secondly, we need a low-speed, high-frequency RFID switch which also required low power consuming. Together with a mini-mcu to control it, which means you need a energy provided method.
  • thirdly, you may need wireshark to get packets info at initial, then you need PicoScenes as CSI Tool to get ACK block. Also you need pktgen which is provided by Linux kernel.

Process of experiment

Let’s start from equiping your computer with necessary software. First thing is that you need an PC with a Ubuntu system at version 22.04. Then after your configuration of basic settings, you can start from ‘Pktgen’ which is already in your system software and all you need to do is activate it using your root privacy. The detail of the overall process please follow the blog: How to use Pktgen-powerful Wlan test tools. Notice: once you reboot your system, you need to activate the Pktgen using root privacy again.

Pktgen, used as packet genration and transmission tool, you can send packet which you configure. You then need a software to receive packet and evaluate the infomation of signal-channel through the packet you received. Here I recommend using wireshark to capture packet, and using PicoScenes to get CSI. The installation steps as followed.
For Wireshark, you can visit its github repository and paste the command at your terminal. The second one PicoScenes, you can download it following this blog, or visit the official docs to get to know how to install, how to use it and what is the meaning of CSI values.