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

目录

一、前言

二、数据采集

三、卡尔曼滤波算法

1、什么是卡尔曼算法

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

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

4、进行数据处理 

四、高斯滤波 

五、简单平均


一、前言

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

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进行数据处理

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('子载波(f)');ylabel('幅值(dB)');
title('卡尔曼滤波');
set(gca,'Ylim',[5,25]);
hold off

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

c4164fb050114a298085d611387ba3c7.png

四、高斯滤波 

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

五、简单平均

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

创作不易,尊重原创,因为存在博主直接剽窃,所以很多文章进行了删减,希望大家谅解。如有对室内CSI指纹定位感兴趣的可阅读下面的文章:室内定位之csi指纹定位_数产小黑娃的博客-CSDN博客随着WiFi技术的发展,IEEE802.11n系列通信协议及其之后的无线局域网协议应用了多输入多输出(multiple-input multiple-output,MI-MO)和正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)等技术,使得WiFi收发设备之间的信道特征可以在物理层进行估计,并以信道状态信息(channel status information,CSI)的形式存储下来。。...https://blog.csdn.net/qq_53860947/article/details/126180830

CSI指纹预处理(中值、均值、Hampel、小波滤波)_数产小黑娃的博客-CSDN博客因为设备、温度和实验室物品摆设等因素的影响,未经处理的CSI数据不能直接使用,需要对数据进行异常值处理以保证数据的稳定性,同时减少环境中人的活动、突发性干扰对CSI的影响,下面将简单探讨MATLAB自带的几种滤波器对CSI幅值数据的处理,一些升级版的滤波程序由你们自主思考。https://blog.csdn.net/qq_53860947/article/details/130467451
CSI室内指纹定位——CSI数据说明_csi数据集_数产小黑娃的博客-CSDN博客我们通过修改NIC的设备驱动程序,来读取每个数据包接收时以CSI的形式记录在硬件中的CSI值,并生成包含CSI信息的dat文件。,也就是对应的幅度和相位。当然angle函数获得的相位是带误差的相位,需要解卷绕+线性变换才能获取到真实的相位。csi的值是一个n*m*30的复数矩阵,n表示发射天线的个数,m表示接收天线的个数,30是子载波个数。2、使用MATLAB解析dat文件,显示1615*1个元胞数组,这些原胞数组包含了1615个1*1的结构体,每个结构体表示一个数据包的所有信息,包括信道状态信息元。https://blog.csdn.net/qq_53860947/article/details/126449801

CSI室内指纹定位——相关通信名词解释_信道冲击响应_数产小黑娃的博客-CSDN博客OFDM技术的主要思想就是将数据流分成多个子数据流,通过不同频率的多个子信道并行传输,每个子信道使用独立的子载波,且这些子载波是相互正交的。简单来说,就是在发送端发送一个脉冲信号,在接收端进行响应,由于多径时延扩展和多普勒平移的原因,不同接收端会有不同的信道脉冲响应,不同位置也会因为多径的原因会有不同的信道脉冲响应)。通俗的讲,就是数据的传输速度,比如:100M的宽带,带宽就是100Mbps,1字节(byte)对应8个比特位(bit),所以100M的宽带相当于12.5MB/s的网络。https://blog.csdn.net/qq_53860947/article/details/127716277

猜你喜欢

转载自blog.csdn.net/qq_53860947/article/details/126175335