CSI信号的处理 |
您所在的位置:网站首页 › 采样频率一般取多少 › CSI信号的处理 |
说明:自己的一点实践记录,可能有很多地方写的不好或者不对,望指正 matlab处理数据 1、timestamp_low:时间戳,相连两包此值差单位为微秒,通过验证发现100hz的发包频率此差值为10000,20hz的发包频率此差值为50000,此参数可以确定出波形的横轴时间 当发包频率过大会出现接收端停止收数的情况:20Hz正常,200Hz和1000Hz的采样频率,收端最多接收一分多钟的的数据(原因是recv函数接收数据阻塞导致) 1、将包长变小后还是有同样的问题。 2、由数据速率引起的,它太高,程序无法处理(可以尝试设置非阻塞)
2、0x4101决定了主机仅一根天线发送数据,因此此处的Ntx值为1,另外采用的是OFDM模式 如果想要收端接收到发端两根天线的数据(CSI的格式为2×3×30),只需要把第14、15位均设置为1,即在发送端的脚本里面设置为0xC101 注:关于0x4101的具体说明如下 14-16位全设置为1,表示分别打开天线1、2、3 13位:保护间隔,1表示0.4微秒,0表示0.8微秒 12位:duplicate data,重复数据? 11位:WiFi信道的带宽,1表示40MHz,0表示20MHz 10位: 9位:调制类型,CCK-1,OFDM-0 8位:高吞吐率模式速率-1,传统模式速率-0 5-7位:默认3个0 3-4位:单流-0,双流-2,三流-3 0-2位:速率选择位 总共17位 1、数据提取 csi_trace = read_bf_file('sample_data/walk_LoS.dat'); for i=1:200%这里是取的数据包的个数 csi_entry = csi_trace{i}; csi = get_scaled_csi(csi_entry); %提取csi矩阵 csi =csi(1,:,:); csi1=abs(squeeze(csi).'); %提取幅值(降维+转置) %只取一根天线的数据 first_ant_csi(:,i)=csi1(:,1); %直接取第一列数据(不需要for循环取) second_ant_csi(:,i)=csi1(:,2) third_ant_csi(:,i)=csi1(:,3) % for j=1:30 % csi15_end(i,:)=csi1(j,:); %3个信道第j个子载波 % end end %画第一根天线的载波 %plot(first_ant_csi.') plot(second_ant_csi.') %plot(third_ant_csi.') 直接获取CSI数据的幅度,csi1=abs(squeeze(csi).'),csi是1×3×30的复数矩阵,取绝对值后得到CSI的幅度 一个channel中,30个子载波随数据包/时间的的变化波形 到此CSI随时间变化的幅度值获取到(这里横轴的间隔是有发送设备决定的,在发包时第5个参数设置了发包间隔时间) 说明:在网卡上接上外接天线后的原始数据效果非常好,相比于没有加天线的网卡,加天线后原始数据周期性很明显(外接天线是必须的)
2、异常点去除 利用Hampel identifier去除异常点,离开封闭区间 疑问:异常点移除后加入的是什么值(加入的是中位数值) 不选均值和标准差的原因: 3、插值(Interpolation) 不能保证接收端数据包不丢失,因此必须插值(linear interpolation) 通过时间戳的差值计算发现:每次有大概20%左右的包丢失 点数×采样间隔所得时间要小于首尾时间戳的差,因此中间丢失了一些数据包(实际的点数是偏小的,时间戳对应的横轴也就是不是等间隔的) 差值方法:严格按照0.05s一个值来进行补全,通过两点确定出的直线来确定所要插入值的纵坐标 4、卡尔曼平滑滤波 平滑曲线 说明:说明可以尝试用PCA滤波方法,相对保留呼吸和心率的主成分来说,这种方法效果要好得多 参考链接:https://www.bbsmax.com/A/E35pNWXAzv/ 5、去噪:用的小波变换 去燥不一定要用小波变换,可以多尝试一些滤波器,如Savitzky-Golay flter) 小波变换示意图: 加粗曲线是选择出来的最佳子载波 6、最佳载波选择和去除直流分量6.1子载波选择:熵值选取/方差选取 选择更加具有周期性的波形。用递归图来处理 ①画出RP图 数据处理过程参考链接:https://ww2.mathworks.cn/matlabcentral/fileexchange/58246-tool-box-of-recurrence-plot-and-recurrence-quantification-analysis 返回个参数含义:https://en.wikipedia.org/wiki/Recurrence_quantification_analysis#Example
recurrence plot(递归图):对于连续波形,如果两点值的差小于一个固定常数,那么将前一个点的横坐标值作为横轴值,后一个点的横坐标值作为纵轴画在坐标系中 如果信号是周期的,相邻值差基本为0,即每一个点都满足如下条件
6.2去除直流分量:纵轴的相对位置改变,即幅度的相对位置改变 直接用信号减去信号的均值,发现只是相对幅度改变了。但是频谱分析时,蓝色波形频谱只有0处有值,去除直流分量的的红色波形频谱就正常了(未去除直流分量的频谱只有0频率处有幅度) 7、频谱分析和带通滤波 问题:同样的带通程序,用在ppg信号中不能获取很好的结果(没有看频率成分) 带通模型重新设计,使用切比雪夫滤波器 参考链接:https://zhidao.baidu.com/question/423138525.html(滤波模型可以自己调整切比雪夫滤波器的参数) 调整参数后的模型: 对最佳子载波进行FFT变换 带通滤波器保留0.3-0.5Hz的频率成分 带通滤波后与加速计波形对比
8、呼吸频率估计 使用滑动窗口,对窗口中的信号进行频谱变化,每个窗口中信号频谱的最高幅度对应的频率当做呼吸频率 滑动窗口取2048个点(相当于利用4个完整的波形进行估计),窗口每次移动500的步长,从而获取到随时间变化的呼吸速率值 注:呼吸参考指标有下面三项: ①每分钟多少次:The breathing frequency of a normal adult is 12 to 20 times per min in a resting state [5], and the heart rate is 60 to 100 beats per min [6]。 ②频率:breathing from 0.2 Hz to 0.33 Hz [5] and heartbeat cycles from 1 Hz to 1.33 Hz [6](频率已知,可以通过滤波器提取出有用的信号) ③bpm:breathing rate ranges from 10 to 37 bpm [18, 19], and heart rate ranges from 60 to 80 bpm [20]
最主要的问题是模型上升沿和下降沿的问题 呼吸成分占主要部分的问题(带通无法将呼吸成分完全去除) 2、AutoEncode方法 时间对标要求严格的问题 一个ppg波形对应的csi数据波形问题 改进:同时平滑带通 3、主成分分析法
问题: 1、信号的CM能100%的检测呼吸,而单一用幅度或者相位处理可检测率不高 用天线1和2的共轭相乘尝试过,之前没有做过带通 数据实时显示的问题: https://github.com/dhalperi/linux-80211n-csitool-supplementary/issues/90 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |