首页 > 技术知识 > 正文

一、问题背景

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

二、什么是CSI

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

二、数据的导入

  使用CSI工具来获取Intel5300网卡上各种动作的CSI数据。每个动作的样本数据是一个999x3x30矩阵。990表示它在10秒内接收到990个数据包。每个包有一个struct,它包含三个链路中30个子载波的幅度和相位信息(发射天线的数目乘以接收天线的数目),它是一个3×30矩阵。各结构信息如下图所示: 基于Wi-Fi CSI的摔倒检测(一):CSI数据的导入 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后,比较了三种不同天线在摔倒的变化。可见,第二天线在摔倒时间上有明显的波动,即它能更好地反映摔倒,并呈现出明显的多普勒频移。 基于Wi-Fi CSI的摔倒检测(一):CSI数据的导入1 基于Wi-Fi CSI的摔倒检测(一):CSI数据的导入2 基于Wi-Fi CSI的摔倒检测(一):CSI数据的导入3 如果我们要对比三根天线某个序号的子载波,可以这样做:

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,:));
<

效果如下: 基于Wi-Fi CSI的摔倒检测(一):CSI数据的导入4 如果要单独选择某根天线某个子载波进行观察,可以这样做:

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]);
<

效果如下: 基于Wi-Fi CSI的摔倒检测(一):CSI数据的导入5 接下来,我们将在之后的文章中介绍如何进行天线和子载波的选择以及初始信号处理。

猜你喜欢