CSI数据预处理之卡尔曼滤波、高斯滤波、简单平均

简介: CSI数据预处理之卡尔曼滤波、高斯滤波、简单平均

一、前言

由于WiFi信号强度受多径效应和噪声的影响会导致定位精度低和性能不稳定等的问题。与RSSI相比,信道状态信息(channel status information,CSI)能有效避免多径效应给定位结果带来的不良影响,因此,采用CSI的值作为定位的特征值,建立Radio Map的位置指纹数据库,通过加权邻近算法匹配k组最近的指纹库数据可以估计出待测点的位置。

a76830916620af271d8e75a78949a51d_b7742026b51b438fbdaa3560f83c9923.png

二、数据采集

这个阶段不做过多说明,怎么样采集及读取采集的csi数据也是一个难点。基于信道状态信息(channel status information,CSI)的室内定位法,其采用了正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)技术将通信信道分为多个不同频率的独立子信道,在每个子信道物理层收集CSI值作为指纹测量值。本文利用了配备Intel5300NIC网卡的台式机进行实验,设置若干个样本点,每个样本点采集若干个数据包,每个数据包有2*3*30条数据(2个发送天线,3个接收天线)。

三、卡尔曼滤波算法

1、什么是卡尔曼算法

卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。卡尔曼滤波算法在估计值和观测值之间做了一个修正。


2、卡尔曼的大致实现过程

卡尔曼的实现过程:使用上一次的最优结果预测当前的值,同时使用观测值修正当前值,得到最优结果。


3、卡尔曼滤波算法的核心计算式

本文就是根据以下公式,利用MATLAB进行数据处理

18213baea370d80690f724d5f011e26c_9994a4e1a5fc42169f2a0d3d9565db08.png

4、进行数据处理

每个点位采集的CSI数据有2*3*30*1500个幅度信息,我们采用第一根发射天线第一根接收天线的1500个单维幅度值进行卡尔曼滤波,MATLAB代码如下:

close all
clc
r1=xlsread('1.xlsx',1,'A1:A1500' ); %读取采集的csi值
csi_length = length(r1);%获取数据的长度
Z=r1; %获取观测量 
A=1; %状态转移矩阵
X(1)=15; %目标状态向量
H=1; %观测矩阵
P(1)=100;   %第一步预测的状态协方差矩阵
R=10e-4; %观测噪声方差
Q=10e-4; %噪声协方差
%有些变量会随迭代次数发生改变,所以给这些变量预先分配内存
X_=zeros(1,csi_length);
P_=zeros(1,csi_length);
K=zeros(1,csi_length);
 for t=2:csi_length
   %预测
    X_(t)=A*X(t-1);   %状态方程
    P_(t)=A*P(t-1)*A'+Q; %预测的协方差
    %更新校准
    K(t)=P_(t)*H'/(H*P_(t)*H'+R); %卡尔曼增益
    X(t)=X_(t)+K(t)*(Z(t)-H*X_(t)); %状态更新方程
    P(t)=(1-K(t)*H)*P_(t); %协方差更新方程
end
%绘图
x1=1:csi_length;
hold on
plot(x1,Z,'b-',x1,X,'r-');    % 红色线最优化估算结果滤波后的值,%蓝色线表示观测值
legend('观测值','滤波后的值','Location','northwest');
xlabel('数据包序列');ylabel('幅值(dB)');
title('卡尔曼滤波');
set(gca,'Ylim',[5,25]);
hold off

单维度卡尔曼滤波效果如下图:

四、高斯滤波

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,我们可以利用高斯低通滤波算法对高频噪声进行处理。高斯滤波处理效果如下图所示:

五、简单平均

我们知道FIFS系统将多个天线上测得的幅值简单平均得到指纹,所以我们也可以使用这种方法去进行数据预处理。

创作不易,尊重原创,因为存在博主直接剽窃,所以很多文章进行了删减,希望大家谅解。



相关文章
|
机器学习/深度学习 计算机视觉 网络架构
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
1112 0
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
|
11月前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
1304 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
缓存 Linux Docker
【最新版正确姿势】Docker安装教程(简单几步即可完成)
之前的老版本Docker安装教程已经发生了变化,本文分享了Docker最新版安装教程,其他操作系统版本也可以参考官 方的其他安装版本文档。
11222 3
【最新版正确姿势】Docker安装教程(简单几步即可完成)
|
调度 索引
传输块大小(TBS)的确定 | 带你读《5G-NR信道编码》之十六
物理块上行和下行数据共享通道是以传输块(TB,Transport Block)为基本单位进行传输数据的。在LTE中,TBS可以用给定的物理资源块(PRB,Physical Resource Block)的数目 NPRB 以及 TBS 的索引 ITBS 通过查表的方式得到。在 5G-NR 标准化过程中,有的公司提出采用公式计算和查表分别量化 不同大小区间的 TBS 的方式来确定 TBS,以实现更大的调度灵活性。
18445 0
传输块大小(TBS)的确定 | 带你读《5G-NR信道编码》之十六
|
安全
[MoeCTF 2022]babyfmt-入土为安的第十九天
[MoeCTF 2022]babyfmt-入土为安的第十九天
178 0
|
机器学习/深度学习 存储 算法
目标跟踪入门:使用OpenCV实现质心跟踪
**目标跟踪的过程**: 1、获取对象检测的初始集 2、为每个初始检测创建唯一的ID 3、然后在视频帧中跟踪每个对象的移动,保持唯一ID的分配 本文使用OpenCV实现质心跟踪,这是一种易于理解但高效的跟踪算法。
655 1
目标跟踪入门:使用OpenCV实现质心跟踪
|
机器学习/深度学习 数据采集 存储
室内定位之CSI指纹定位
室内定位之CSI指纹定位
1382 0
|
机器学习/深度学习 人工智能 自然语言处理
PyTorch搭建图卷积神经网络(GCN)完成对论文分类及预测实战(附源码和数据集)
PyTorch搭建图卷积神经网络(GCN)完成对论文分类及预测实战(附源码和数据集)
656 1
|
机器学习/深度学习 PyTorch 算法框架/工具
pytorch中非标量调用backward()的时候为什么要先进行sum操作
在《动手学深度学习》第二版教程中,当y为非标量的时候,调用backward()函数时,为什么先要求和呢(即y.sum().backward()),估计很多读者有点懵,今天小编给大家说说我的理解。
1035 3
|
Ubuntu Python 定位技术
CSI室内指纹定位——CSI数据说明
CSI室内指纹定位——CSI数据说明
778 0