目的:基于WiFi信号的呼吸和心率检测


说明:

1、自己的一点实践记录,可能有很多地方写的不好或者不对,望指正

2、获取到的CSI数据处理过程:https://blog.csdn.net/qq_20386411/article/details/83384614


CSI

是衡量信道情况的信道状态信息(Channel State Information),属于PHY层,来自OFDM系统下解码的子载波。CSI是细粒度的物理信息,对环境更加敏感,所以应用于动作识别,手势识别,击键识别,跟踪等领域

CSI由无线信号传播过程中的动态成分和静态成分组成,静态成分包括LOS和静止的物体,动态成分就是人的呼吸

RSS(接收信号强度)采用OFMD(正交频分复用)得到56个子载波(CSI数据为56个子载波的数据)

CSI相位差数据是和呼吸频率相同的周期信号

每一组CSI值描述了子载波的振幅和相位以及其它一些关于子信道的信息,若环境中存在人活着人的运动,这会影响到WIFI信号的传播路径,所有子载波的CSI值都会被影响。CSI揭示了信道接收信号所经历的特征,例如多径效应,阴影衰落和失真

频域下的信道模型

求信道状态信息就是求信道矩阵H

无线信道一般用信道的冲击响应(Channel Impulse Response,CIR)来对信道的多径效应进行描述,在线性时不变的假设条件下,信道冲击响应可用下式表示:

专业术语

MIMO(Multiple-Input Multiple-Output,多输入多输出)技术:指在发射端和接收端分别使用多个发射天线和接收天线,使信号通过发射端与接收端的多个天线传送和接收,从而改善通信质量(MIMO technology is utilized toextend the complementarity property to commodity WiFi.两个主机非同步问题导致接收主机接收的信号产生相位偏移,最直观的 就是是幅度和相位图像不能互补)

NIC:网络接口卡(5300网卡),Intel 5300 NIC只能反映出CSI56个子载波中的30个

OFDM(orthogonal frequency division modulation):总频谱被划分为多个正交的子载波,无线数据使用相同的调制和编码方法在子载波上传输(OFDM splits its spectrum band (20 MHz) into multiple (56) frequency sub-bands,called subcarriers, and sends the digital bits through these subcarriers in parallel)

CFR:信道频率响应,The CSI represents the Channel Frequency Response (CFR) for each subcarrier between transmit-receive antenna pairs

实验工具:

主机2台,intel 5300网卡

两台主机均安装12.04Ubantu系统

简化版的CIS Tool安装包:intel-5300-csi-github-master

UltralSO软件:用于制作ubantu的U盘

Sublime text压缩包:利用其全局搜索功能检索connector_log.再利用gedit修改其值(其实可以手动找到对应位置修改)

安装ubantu系统:

清华PDF上指定的11.04ubantu系统,用U盘无法安装

改为12.04的ubantu系统后,用U盘可以安装

ubantu12.04系统下载链接:http://releases.ubuntu.com/12.04/

1、12.04ubantu U盘制作方法:

参考链接:https://jingyan.baidu.com/article/a3761b2b66fe141577f9aa51.html

PC上安装UltralSO软件,插入格式化后的U盘

打开ubantu的ISO文件,启动-写入硬盘映像-便捷启动-选择sylinux

这样含有ubantu系统的U盘制作完成,接下来就需要把系统装在主机上

U盘插入主机,通过U盘来启动:

主机插入U盘,打开主机,在出现界面前按下F12,直接选择U盘那个选项,然后再选择install ubantu(当时安装时,前面还有一个选项install ubantu without....,自己选的第二个选项install ubantu)

2、安装ubantu:参考链接https://blog.csdn.net/baolibin528/article/details/43061983

注意:进入语言选择界面,先把无线网连上

安装CSI Tool集成包:intel-5300-csi-github-master(简化版的集成包)

参考链接:https://blog.csdn.net/u014645508/article/details/81359409(很详细,谢谢博主的填坑)

注意:

第1步:安装完成后,需要登录用户名输入密码,否则执行第一步执行后没有权限

第2步:这一步不知道在哪里修改(没有进行)

第4步:-y前有个空格

第7步:注意是下载精简版的 intel-5300-csi-github-master.tar.gz,进行安装

第10步:一路按回车,按住回车不动半分钟

第11步:弹出的窗口先save再exit

第12步:直接用的make -j5来运行的(j5要快一些)

第16步:注意执行结果

第17.18步好像没有任何提示

第22、23、24没有任何提示

第30步:修改log_to_file,能获取以时间戳命名csi的dat文件

修改驱动:必须修改,否则之后的脚本要多写几行命令设置参数,不修改也可能影响到数据的接收

打开sublime text用于搜索关键字,where选择路径时,点击最右边的add florder

修改驱动执行priv->connector_log=1;这个保存时怎么保存的?装第二个系统cd到mian.c时发现无法找到,直接手动打开main.c修改的

cd intel-5300-csi-github这里必须先到cd intel-5300-csi-github-master文件夹(安装在那个文件夹就先cd到那个文件夹)

获取CSI数据

主机获取CSI数据的两种方法:AP模式和Monitor模式。CSI支持的四种工作模式

AP模式获取CSI数据:

1、工具

一台主机

一个没有设置密码的路由器(手机开热点是收不到数据的/连接实验室无线网一样收不到数据)

2、AP模式下主机接收数据包,参考链接https://blog.csdn.net/u014645508/article/details/81359409

sudo ping 192.168.1.1 -i 0.05

ping后面接的是路由器的IP地址,i后面的参数是ping时间间隔,单位是秒。间隔小于0.2s需要root权限。

在主机中开启另一个终端,运行log_to_file记录CSI

3、实验结果:

主机连接没有密码的路由器

主机ping路由器的IP后,能看到如下界面:

打开新的终端,cd到netlink文件夹,保存数据,能看到如下界面:

monitor模式获取CSI数据

1、monitor优点:

使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式比ap模式更加稳定,可以发送指定数量的包,可以设置发送包之间的间隔,以及信道和带宽

2、工具:

2台安装Intel 5300网卡的电脑

两台主机均需安装lorcon:在终端中通过指令安装lorcon,参考链接:

3、实现方法:https://blog.csdn.net/u014645508/article/details/82993718?utm_source=blogxgwz1(同样感谢博主的填坑)

注:按照博客的方法

运行脚本可能会出现权限不够的问题

解决方法:sudo sh setup_inject.sh wlan0 64 HT20(当时用的64信道,HT20这两个是参数,参数会被传入setup_inject文件)

4、实验结果:

发送数据包的主机显示界面如下,这里只发送了100k的数据包:

接收数据包的从机界面如下:

注:和博客的执行顺序相同,先运行的从机程序,从机脚本运行后会一直等待准备接收数据,直到主机开始发送数据

接收不到的可能原因:

1、安装完ubantu系统后,进入错误的内核导致无法收到数据。(安装完系统,开机会有多个选项(这里必须注释掉对应处的一行指令开机才会出现多个选项),选择4.2.0版本进入。之前就是因为没有注意这一点,走了2天的弯路)

2、

  • 也是设置的monitor模式,可为什么receiver接收不到任何数据呢

  • 接不到数据一般都是模式没设置好的原因,iwconfig看一下是否配好了。sudo echo 0x4101 |sudo tee /sys/kernel/debug/ieee80211/phy0/iwlwifi/iwldvm/debug/monitor_tx_rate 这步的参数不对也接不了

3、除了我们刚装好的电脑A作为client之外,我们需要另一台电脑B来开软AP,该电脑需装有可开启AP功能及支持80211n的网卡,5300网卡貌似不行,因为理论上它已经被阉割了开启AP的功能(这个是用另一个主机开的软AP,这个方法自己没有实现过)

4、安装很顺利:最终还是没有在终端看到打印的收到数据的提示

尝试过主机连接实验室的WiFi,无法收到数据

尝试过主机连接没密码的手机热点,无法收到数据

连接没有密码的路由器,就可以收到数据了

出现过的问题:

1、提示操作不允许时,加上sudo

2、使用tx.sh中设置速率时,出现权限不够的问题,su解决

su也无法解决时使用chmod 777 后面应该加上文件名(这种情况只适合打开脚本文件)

可以加上sudo sh -c ‘ ’来解决权限问题
sudo sh -c 'echo "This is testPage." >/usr/local/nginx/html/index.html'

注:sudo:echo命令是属于root用户的权限,但是我之前一直以为加个sudo就能够获取到root的全部权限,现在才发现这是不对的。使用sudo命令后,获取到的只是root的一部分权限。

3、设置信道的时候出现invalid argument

原始是:主机开机后能直接连接实验室的无线网,通过ifconfig可以看到发送和接收包的个数(原始模式为managed模式)

设置为mon0后能发包,但是发送数据包处显示0

执行shell脚本后,主机被设置为monitor模式

这里是0的原因可能是因为:不是无限连接模式,不会有发包的显示(?)

Ubantu系统中的指令操作

参考链接:https://www.cnblogs.com/nucdy/p/5251659.html

1、打开文件夹

打开某个文件:cd /文件名/

若是文件夹下的某个文件,cd /home/t2/.../injection/,最后一定要加上/

2、执行文件sh脚本(shell脚本)

sh 文件名.sh或者./脚本名

3、直接输入首字母按下tal键会自动补全,重复上一步操作,直接按下向上的箭头

4、ctr+c结束操作

5、ctr+alt+T打开一个新终端(终端可以同时打开多个)

6、sudo:echo命令是属于root用户的权限,但是我之前一直以为加个sudo就能够获取到root的全部权限,现在才发现这是不对的。使用sudo命令后,获取到的只是root的一部分权限。

7、cd ~回到根目录下

8、echo的作用就是print的作用,用于将内容打印在终端界面上

9、iwconfig查看无线网卡设置的名称(如wlan0)    ifconfig查看发包收包的具体信息

这里删除了wlan0,添加了mon0

脚本指令含义

sleep 10暂停10s

/home/wifi/csi/linux-80211n-csitool-supplementary/injection/random_packets 10000000000 100 1 1000 &

第三个命令为发送包,第一个参数为包的数量,第二个参数为包的大小,第三个参数为模式选择,设为1即可,还可设置第四个参数:发送时间间隔,单位为us

发送脚本:

#!/usr/bin/sudo /bin/bash
service network-manager stop #停止network-manager服务 WLAN_INTERFACE=$1 #$1第一个输入参数
SLEEP_TIME=2modprobe iwlwifi debug=0x40000 #modprobe载入指定模块if [ "$#" -ne 3 ];  # $#传递给脚本的参数个数 -ne不等于
thenecho "Going to use default settings!"chn=64bw=HT20
elsechn=$2bw=$3
fi
#决定参数sleep $SLEEP_TIME
ifconfig $WLAN_INTERFACE 2>/dev/null 1>/dev/null #查看网络设备配置 重新定向标准错误输出while [ $? -ne 0 ] # $?上个命令的退出状态,或函数的返回值,大部分命令执行成功会返回 0,失败返回 1
doifconfig $WLAN_INTERFACE 2>/dev/null 1>/dev/null
donesleep $SLEEP_TIME
echo "Add monitor mon0....."
iw dev $WLAN_INTERFACE interface add mon0 type monitor #添加监听模式的接口sleep $SLEEP_TIME
echo "Bringing $WLAN_INTERFACE down....."
ifconfig $WLAN_INTERFACE down #关闭指定网络设备/网卡while [ $? -ne 0 ]
doifconfig $WLAN_INTERFACE down
done
#确保关闭指定网络设备/网卡sleep $SLEEP_TIME
echo "Bringing mon0 up....."
ifconfig mon0 up #启动mon0while [ $? -ne 0 ]
doifconfig mon0 up
done
#确保mon0启动sleep $SLEEP_TIME
echo "Set channel $chn $bw....."
iw mon0 set channel $chn $bw #指定信道替换频率

接收脚本:

#!/usr/bin/sudo /bin/bash
service network-manager stop #停止network-manager服务 SLEEP_TIME=2WLAN_INTERFACE=$1  #$1第一个输入参数if [ "$#" -ne 3 ]; # $#传递给脚本的参数个数 -ne不等于
then echo "Going to use default settings!" #显示字符串chn=64bw=HT20
elsechn=$2bw=$3
fi
#决定参数echo "Bringing $WLAN_INTERFACE down....."
ifconfig $WLAN_INTERFACE down #关闭指定网络设备/网卡 由参数1决定while [ $? -ne 0 ] # $?上个命令的退出状态,或函数的返回值,大部分命令执行成功会返回 0,失败返回 1
doifconfig $WLAN_INTERFACE down
done
#确保关闭指定网络设备/网卡sleep $SLEEP_TIME
echo "Set $WLAN_INTERFACE into monitor mode....."
iwconfig $WLAN_INTERFACE mode monitor #设置指定无线网卡的工作模式为监听while [ $? -ne 0 ]
doiwconfig $WLAN_INTERFACE mode monitor
done
#确保指定无线网卡的工作模式为监听sleep $SLEEP_TIME
echo "Bringing $WLAN_INTERFACE up....."
ifconfig $WLAN_INTERFACE up  #启动指定网络设备/网卡while [ $? -ne 0 ]
doifconfig $WLAN_INTERFACE up
done
#确保启动指定网络设备/网卡sleep $SLEEP_TIME
echo "Set channel $chn $bw....."iw $WLAN_INTERFACE set channel $chn $bw #指定信道替换频率

已有ubantu系统情况下,基本尝试完所有脚本还是无法接收到数据。最终决定重装系统,按照几位博主方法,最终实现monitor下接收CSI数据

下面记录自己当时尝试不同脚本时遇到的一些问题:

1、两台主机,均设置为monitor模式

一台主机用于发送数据,发送数据包界面如下

问题:虽然上面显示一直在发数据,怎么确定主机确实发出了数据?

另一台从机用于接收数据,在生成的log.dat中没有任何数据,从机界面如下:

我按照另一篇博客的方法进行了如下操作,依然没有接受到任何数据,生成的log.dat中没有数据

①主从机的脚本都能正常运行,为什么log.dat中没有存入数据

②主机ifconfig查看发送数据包发送情况:显示发送数据为0

2、执行iw dev wlan0 interface add mon0 type monitor,提示命令错误没有这样的设备(重启设备好像能解决问题)

3、iw mon0 set channel 64 HT20提示command failed:Device or resource busy(-16)

解决方法:

其实解决这个问题很简单。如果对于kali linux系统熟悉的人一看提示就知道 原因。根本原因就是网卡没有开启监听模式(但是用iwconfig显示网卡模式为监听模式,不过用下面的方法后再执行上面的指令就没有问题了)。只要我们开启了监听模式就解决的问题。只要输入以下几条指令开启监听模式就行了。

ifconfig wlan2mon(网卡名)  down  (先关闭网卡)

iwconfig wlan2mon mode monitor  (把网卡的模式设为监听)

ifconfig wlan2mon up    (开启网卡)

iwconfig wlan2mon (查看网卡信息。有没有看到 Mode :Monitor,有就OK了)

Monitor模式和AP模式下获取WiFi的CSI信号相关推荐

  1. 将WiFi模块的模式从ap模式修改为sta模式

    基于Linux操作系统,瑞芯微rv1108处理器,使用的是ITM-UT15的WiFi模块. 系统上电后初始化的模式是ap模式. 1.需要在代码中找到相关的配置代码注释掉 2.第一步操作后,编译,烧写镜 ...

  2. WIFI模块的STA模式和AP模式有什么区别?

    WIFI模块的STA模式和AP模式有什么区别? 参考链接:https://zhidao.baidu.com/question/409510237.html AP模式: Access Point,提供无 ...

  3. Linux下获取WIFI状态信息(c语言)

    编译时需要 -lwpa_client wifi.h #ifndef __WIFI_H__ #define __WIFI_H__int wifi_run_cmd(char *cmd, char *res ...

  4. ap模式和sta模式共存_WIFI模块的STA模式和AP模式有什么区别

    展开全部 WIFI模块中,AP和STA模式中分别意思是: 1.AP:也就是无线62616964757a686964616fe4b893e5b19e31333431366239接入点,是一个无线网络的创 ...

  5. Wifi关闭状态下获取Wifi列表

    文件修改路径:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiSettingsStore.java private b ...

  6. 12-20210225华为海思Hi3518EV300在鸿蒙系统下测试WIFI(AP+STATION模式)

    12-20210225华为海思Hi3518EV300在鸿蒙系统下测试WIFI(AP+STATION模式) 2021/2/25 10:45 [HarmonyOS HiSpark_IPC_DIY开发套件] ...

  7. WiFi从ap模式修改为sta模式

    WiFi从ap模式修改为sta模式 基于Linux操作系统,瑞芯微rv1108处理器,使用的是ITM-UT15的WiFi模块. 系统上电后初始化的模式是ap模式. 1.需要在代码中找到相关的配置代码注 ...

  8. ESP32-C3入门教程 网络 篇(一、 Wi-Fi 使用入门 — 初始化及STA、AP模式)

    前面的8节基础课算是把 ESP32-C3 的外设和一些基本功能都测试过, 接下来就要进行无线协议 WIFI 和 蓝牙的功能测试. 这节课我们就从 WIFI 开始,了解 ESP32-C3 的WIFI 功 ...

  9. openwrt下无线网桥设置,bridge AP模式

    ** bridged AP vs route 模式 ** bridged AP 模式 相对于上一级路由器的 DHCP server 和 openwrt 无线路由器对下面的接入点是透明的 各个接入点通过 ...

最新文章

  1. swift - idfa(唯一标示/下载量/广告追踪)
  2. 百度15篇论文被AAAI 2019收录
  3. php 操作mssql,php操作mssql
  4. 预售┃连锁反应装置积木好玩到尖叫!
  5. iPhone使用CoreTelephony获得SIM卡网络运营商资讯和通话资料
  6. Exchange Server 2016管理系列课件17.创建和使用会议室邮箱
  7. Git 错误解决和解析 - error: path ‘xxx‘ is unmerged
  8. 操作系统—基本地址变换机构
  9. CodeForces 453A Little Pony and Expected Maximum
  10. STM32CUBEMX(5)--自定义红外NEC解码,定时器TIM捕获方式
  11. FreeSwitch uuid_bridge代码分析
  12. 两个jquery 类似igoogle的portlets插件
  13. DZ先生怪谈国标28181-2016之目录查询
  14. Unity 5如何设置物体透明
  15. 异步传输模式(ATM)
  16. python自制linux桌面,自己动手写Python实现Ubuntu自动切换壁纸
  17. 欧姆龙OMRON PLC之HostLink通讯协议(五)- CP1H以太网FINS/TCP通讯实例
  18. socket.py line224 in meth return getattr(self._sock, name)(*args) error:[Error 2] No such file or di
  19. 前端性能优化常用代码
  20. MySQL数据库5.5卸载

热门文章

  1. 手指检测心跳设计——传感器制作篇
  2. Android 传感器开发详解
  3. Android Studio 修改 Java 语言版本到 1.8
  4. 如何从官网下载JDK安装包?
  5. html5中将图片的绝对路径转换成文件对象
  6. 1931CIE基础知识
  7. 51nod1423 最大二“货”
  8. NCCL下载及安装教程
  9. NCCL (NVIDIA Collective Communications Library)
  10. 如何在 Mac 上录制屏幕?mac录屏教程分享