基于Wi-Fi CSI的摔倒检测(一):CSI数据的导入

技术凯 2020-12-18 00:01:24 30472
一、问题背景

  随着我国人口老龄化问题的日益加重以及独居老人数量的日益增加,无人监管情况下老人摔倒导致的死亡案例也在日益增加,一款非可穿戴被动式的摔倒检测工具成为必要以保证老人的安全。随着Wi-Fi设备的日益普及,使用Wi-Fi来进行摔倒检测可以大大地降低我们的研制成本,而且相比于其他相应的可穿戴设备,不会对老人的生活便利性产生任何影响,而且老人们不用刻意地穿戴专门的设备,实现随时随地的摔倒检测。此外,相比于基于摄像头的视觉摔倒检测,不会侵犯老人的隐私,而且可以实现无盲区监测。

二、什么是CSI

  在介绍如何通过Wi-Fi检测摔倒之前,首先我们需要明白,什么是CSI?它的全称是Channel State Information,即信道状态信息。因为人体的运动会影响空间电磁场的分布,导致信号的传播路径和相位时延发生改变,因此我们可以通过分析信道状态信息来提取动作的变化情况,从而分析出是否有摔倒事件的发生,若检测到相应情况,则联系紧急联系人进行报警。

二、数据的导入

  使用CSI工具来获取Intel5300网卡上各种动作的CSI数据。每个动作的样本数据是一个999x3x30矩阵。990表示它在10秒内接收到990个数据包。每个包有一个struct,它包含三个链路中30个子载波的幅度和相位信息(发射天线的数目乘以接收天线的数目),它是一个3×30矩阵。各结构信息如下图所示:

Intel5300网卡获取的数据会存储到.data文件中,我们通过编写相应的Matlab代码进行数据的导入,代码如下:

clc
clear all;
csi_trace = read_bf_file('sample_data/logfallr111.dat');
for j=1:3
  for i=1:990%这里是取的数据包的个数
    csi_entry = csi_trace{i};
    csi = get_scaled_csi(csi_entry); %提取csi矩阵    
    csi =csi(1,:,:);
    csi1=abs(squeeze(csi).');          

    %天线选择

    ant_csi(:,i)=csi1(:,j);             

  end
  figure(j);
  plot(ant_csi.');
  hold on
end

这样,收集了摔倒CSI的原始数据集。
导入MATLAB后,比较了三种不同天线在摔倒的变化。可见,第二天线在摔倒时间上有明显的波动,即它能更好地反映摔倒,并呈现出明显的多普勒频移。



如果我们要对比三根天线某个序号的子载波,可以这样做:

clc
clear all;
csi_trace = read_bf_file('sample_data/logfallr111.dat');
sub_case=zeros(3,990);
j=2;%子载波序号选择
for k=1:3
  for i=1:990;
    csi_entry=csi_trace{i};
    csi=get_scaled_csi(csi_entry);
    csi1=squeeze(csi(1,:,:)).';% 30*3 complex

    csiabs=db(abs(csi1));

    csiabs=csiabs(:,k);
    csi1=csi1(:,k);
    subcarrier(i)=csiabs(j);%10子载波幅度

    if(subcarrier(i)>=25)
       subcarrier(i)=25;
    else if(subcarrier(i)<=1) %若采集的数据产生了无穷值或者异常值可用该语句限幅
       subcarrier(i)=1;
    end
  end

end
sub_case(k,:)=subcarrier;

figure(1)

plot(sub_case(k,:));

hold on
xlabel('time(s)');
ylabel('Amplitude(dB)')
title('fall-signal');

axis([0 1000 0 35]);
end
legend('sub_case(1,:)','sub_case(2,:)','sub_case(3,:)');

效果如下:

如果要单独选择某根天线某个子载波进行观察,可以这样做:

clc
clear all;
csi_trace = read_bf_file('sample_data/logfallr111.dat');
j=2;
   for i=1:990;
     csi_entry=csi_trace{i};
     csi=get_scaled_csi(csi_entry);
     csi1=squeeze(csi(1,:,:)).';% 30*3 complex

     csiabs=db(abs(csi1));

     csiabs=csiabs(:,2);
     csi1=csi1(:,2);
     subcarrier(i)=csiabs(j);%10子载波幅度

     if(subcarrier(i)>=25)
        subcarrier(i)=25;
     else if(subcarrier(i)<=1) %若采集的数据产生了无穷值或者异常值可用该语句限幅
        subcarrier(i)=1;
     end
  end

end

figure(1)

plot(subcarrier);
hold on
xlabel('time(s)');
ylabel('Amplitude(dB)');
title('fall-signal');
axis([0 1000 0 35]);

效果如下:

接下来,我们将在之后的文章中介绍如何进行天线和子载波的选择以及初始信号处理。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 93 20 评论 打赏
评论
7个
内容存在敏感词
手气红包
  • 嘀嘀嘀 2022-11-26 11:54:49
    回复
    加不上您qq,能给个别的联系方式吗
  • 并不是过客 2022-03-30 10:10:42
    回复
    read_bf_file未定义的函数变量,那是需要自己写吗
  • M. 2021-06-16 16:30:42
    回复

    您好,想问您一些csi的问题 可否给个联系方式呀

  • 二仙桥 2021-05-19 20:56:53
    回复

    大神您好,请问您真实名字是啥

  • 变有钱变好看 2021-05-14 16:40:39
    回复

    加您了,但是有验证问题,加不上,请问您可以加一下我吗?qq:2794946763

  • 技术凯 2021-05-10 15:46:38
    回复

    @我の名字:qq:1411489005

  • 我の名字 2021-04-11 19:56:14
    回复

    请问能留联系方式嘛?

相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
技术凯
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区