首页专栏详情
打赏
基于Wi-Fi CSI的摔倒检测(一):CSI数据的导入
易百纳技术社区 技术凯 2020-12-18 00:01:24

一、问题背景

  随着我国人口老龄化问题的日益加重以及独居老人数量的日益增加,无人监管情况下老人摔倒导致的死亡案例也在日益增加,一款非可穿戴被动式的摔倒检测工具成为必要以保证老人的安全。随着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]);

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


声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。

打赏
共1人已赏
评论
7个
内容存在敏感词
  • 易百纳技术社区

    请问能留联系方式嘛?

  • 易百纳技术社区

    @我の名字:qq:1411489005

  • 易百纳技术社区

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

  • 易百纳技术社区

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

  • 易百纳技术社区

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

  • 易百纳技术社区
    read_bf_file未定义的函数变量,那是需要自己写吗
  • 易百纳技术社区
    加不上您qq,能给个别的联系方式吗
相关专栏
打赏作者
易百纳技术社区
技术凯
您的支持将鼓励我继续创作!
打赏金额:
¥1 易百纳技术社区
¥5 易百纳技术社区
¥10 易百纳技术社区
¥50 易百纳技术社区
¥100 易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区 微信支付
易百纳技术社区
打赏成功!

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

审核成功

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

审核失败

失败原因
备注
Loading...
易百纳技术社区
确定要删除此文章、专栏、评论吗?
确定
取消
易百纳技术社区
易百纳技术社区
在专栏模块发布专栏,可获得其他E友的打赏
易百纳技术社区
回答悬赏问答,被题主采纳后即可获得悬赏金
易百纳技术社区
在上传资料时,有价值的资料可设置为付费资源
易百纳技术社区
达到一定金额,收益即可提现~
收益也可用来充值ebc,下载资料、兑换礼品更容易
易百纳技术社区
活动规则
  • 1.周任务为周期性任务,每周周一00:00刷新,上周完成的任务不会累计到本周,本周需要从头开始任务,当前任务完成后才可以完成下一个任务
  • 2.发布的专栏与资料需要与平台的板块有相关性,禁止注水,专栏/资料任务以审核通过的篇数为准
  • 3.任务完成后,现金奖励直接打款到微信账户;EBC/收益将自动发放到个人账户,可前往“我的钱包”查看;其他奖励请联系客服兑换
  • 4.每周最后三个任务将会有以下奖品掉落:社区热卖开发板、小米音响、视频年度会员、京东卡、华为手机等等
易百纳技术社区
升级提醒
易百纳技术社区

恭喜您由入门

社区送出礼品一份

请填写您的收件地址,礼品将在3个工作日寄出

易百纳技术社区