CSI指纹预处理(中值、均值、Hampel、维纳滤波、状态统计滤波器)

本文主要是介绍CSI指纹预处理(中值、均值、Hampel、维纳滤波、状态统计滤波器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

1、箱线法

2、中值滤波器

3、均值滤波器

4、Hampel滤波器

5、维纳滤波

6、状态统计滤波器


 

前言

因为设备、温度和实验室物品摆设等因素的影响,未经处理的CSI数据不能直接使用,需要对数据进行异常值处理以保证数据的稳定性,同时减少环境中人的活动、突发性干扰对CSI的影响,下面将简单探讨MATLAB自带的几种滤波器对CSI幅值数据的处理,一些升级版的滤波程序由你们自主思考。

1、箱线法

箱线法主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较,我们可以先使用箱线法可视化异常值,下面给出了箱线法可视化异常值及箱线法对照图,感兴趣的可以自己去了解一下。

d96efe3d3e614df38a4b690f4d861078.png

  图1 箱线法可视化异常值

a2f8fbc9da884982b7f32311cdf9b235.jpeg

  图2 箱线法对照图 

2、中值滤波器

中值滤波是一种非线性滤波方法,可以有效去除信号中的噪声,同时保留信号中的边缘信息。中值滤波的基本思想是将信号中每个采样点的值替换为该点周围一定范围内的中值。

MATLAB中可以使用medfilt1函数对信号进行中值滤波。该函数的语法为:

y = medfilt1(x, w)

x表示我们要处理的数据;w表示均值滤波器的窗口大小,y表示滤波后的结果。

load('raw_amp');
best_amp= medfilt1(raw_amp, 5);
figure(1)
plot(raw_amp);
title('原始幅值');
ylabel('幅值');
figure(2)
plot(best_amp);
title('中值滤波');
ylabel('幅值');

中值滤波处理前后的幅值图像:

92c5be73253c40ef8f29eddc27e11371.png

 图3 中值滤波处理前

ad44b4a0e2a248249175c00736501f9f.png

  图4 中值滤波处理后

3、均值滤波器

均值滤波是一种线性滤波方法,可以用于平滑信号,去除噪声。均值滤波的基本思想是将每个采样点的值替换为该点周围一定范围内的平均值。

MATLAB中可以使用smoothdata函数对信号进行均值滤波。该函数的语法为:

y = smoothdata(x, 'movmean', w)

 x表示我们要处理的数据;w表示均值滤波器的窗口大小,y表示滤波后的结果。

best_amp2 = smoothdata(raw_amp, 'movmean', 5);
figure(3)
plot(raw_amp);
title('原始幅值');
ylabel('幅值');
figure(4)
plot(best_amp2);
title('均值滤波');
ylabel('幅值');

 均值滤波处理前后的幅值图像:

fda72cfd2433469fa253be22f91e2985.png

图5 均值滤波处理前 

1b77deb2c67a4c50897c3cdd9f43949f.png

图6 均值滤波处理后

4、Hampel滤波器

Hampel滤波是一种基于中位数的离群点检测和滤波方法。它通过对信号进行中位数滤波,并计算每个数据点与中位数之间的距离来识别离群点。如果距离大于某个阈值,则该数据点被视为离群点,并用中位数替换。该方法具有抗噪声能力和对离群点的较好识别能力。它常用于数据清洗、异常检测和信号预处理。

MATLAB中可以使用hampel函数对信号进行滤波。该函数的语法为: 

y=hampel(x,k,nsigma)

x表示我们要处理的数据;k表示可指定窗口中每个样本周围的样本数,默认为3;nsigma表示指定几倍的标准差;y表示滤波后的结果。 

great_data = hampel(raw_amp,5,2);
figure(5)
plot(1:1:30,raw_amp);
title('原始幅值');
ylabel('幅值');
figure(6)
plot(1:1:30,great_data);
title('Hampel低通滤波');
ylabel('幅值');

 Hampel滤波处理前后的幅值图像:

7938f66a35c54cde96ae5c5e3ab89897.png

图7  Hampel滤波处理前  

78b17f534e484b469d99212a2ec0e271.png

图8  Hampel滤波处理后  

5、维纳滤波

维纳滤波是一种二维自适应除噪滤波器,根据局部方差来调整滤波器效果。对于去除高斯噪声效果明显。

维纳滤波的两个函数wiener2与deconvwnr都能够完成维纳滤波的功能,但两者具有差异性,感兴趣的可以自己去了解,MATLAB中维纳滤波代码如下:

y=wiener2(x,[m,n]);

x指原始CSI的幅值;y指维纳滤波后的幅值;[m,n]指定滤波器窗口大小为m*n,默认值为3*3。

load('raw_amp');
m=5;
n=5;
best_amp3=wiener2(raw_amp,[m,n]);
figure(7)
plot(raw_amp);
title('原始幅值');
ylabel('幅值');
figure(8)
plot(best_amp3);
title('维纳滤波');
ylabel('幅值');

  维纳滤波处理前后的幅值图像:

2e2df11362df42f6b36f2007a5fd1d94.png

 图9 维纳滤波处理前  

51c4c78ef9294780bf1728611c290f1e.png

 图10  维纳滤波处理后  

6、状态统计滤波器

它的滤波概念是中值滤波的推广,中值滤波是对于给定的n个数值{al ,a2,...,an},将它们按大小顺序排列,取中间的那个值作为滤波器的输出。而状态统计滤波器将n个非零数值按小到大排序后处于第k个位置的元素作为滤波器的输出。MATLAB中状态统计滤波器可以用ordfilt2函数表示:

y=ordfilt2(x,order,domain);

x指原始CSI的幅值;y指状态统计滤波后的幅值;order 为滤波器输出的顺序值;domain为滤波窗口;

(1)y=ordfilt2(x,13,ones(5,5)),在模板内的像素值都为非零时,相当于模板为5×5的中值滤波(order=13,刚好为窗口的中间值);

(2)y=ordfilt2(x,1,ones(5,5)),在模板内的像素值都为非零时,相当于5×5的最小值滤波(order=1,刚好为窗口的最小值);

(3)y=ordfilt2(x,25,ones(5,5)),在模板内的像素值都为非零时,相当于5×5的最大值滤波(order=25,刚好为窗口的最大值);

load('raw_amp');
order = 10;
domain = ones(5,5);
best_amp4=ordfilt2(raw_amp,order,domain);
figure(8)
plot(raw_amp);
title('原始幅值');
ylabel('幅值');
figure(9)
plot(best_amp4);
title('状态统计滤波器');
ylabel('幅值');

 状态统计滤波器处理前后的幅值图像:

7a8ca49976bc472492aba0bc67796259.png

  图11  状态统计滤波器处理前

63fc0c4633054268b627c00240f9f7d8.png

图12  状态统计滤波器处理后 

CSI的相关文章请参考:CSI数据预处理之卡尔曼滤波、高斯滤波、简单平均_rssi高斯滤波_数产小黑娃的博客-CSDN博客卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。卡尔曼滤波算法在估计值和观测值之间做了一个修正。........................https://blog.csdn.net/qq_53860947/article/details/126175335

室内定位之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、维纳滤波、状态统计滤波器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/274057

相关文章

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代

Pandas中统计汇总可视化函数plot()的使用

《Pandas中统计汇总可视化函数plot()的使用》Pandas提供了许多强大的数据处理和分析功能,其中plot()函数就是其可视化功能的一个重要组成部分,本文主要介绍了Pandas中统计汇总可视化... 目录一、plot()函数简介二、plot()函数的基本用法三、plot()函数的参数详解四、使用pl

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处