前言
因为设备、温度和实验室物品摆设等因素的影响,未经处理的CSI数据不能直接使用,需要对数据进行异常值处理以保证数据的稳定性,同时减少环境中人的活动、突发性干扰对CSI的影响,下面将简单探讨MATLAB自带的几种滤波器对CSI幅值数据的处理,一些升级版的滤波程序由你们自主思考。
1、箱线法
箱线法主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较,我们可以先使用箱线法可视化异常值,下面给出了箱线法可视化异常值及箱线法对照图,感兴趣的可以自己去了解一下。
图1 箱线法可视化异常值
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('幅值');
中值滤波处理前后的幅值图像:
图3 中值滤波处理前
图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('幅值');
均值滤波处理前后的幅值图像:
图5 均值滤波处理前
图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滤波处理前后的幅值图像:
图7 Hampel滤波处理前
图8 Hampel滤波处理后