1、语法
说明:对输入向量x应用Hampel滤波器来检测和去除异常值。
1)y = hampel(x) 参数:x:输入信号 y:预处理的输出信号
对于x的每个样本,函数计算由样本及其周围的六个样本组成的窗口的中位数,每边三个。它还使用中位数绝对偏差估计每个样本关于其窗口中位数的标准偏差。如果样本与中位数相差超过三个标准差,则将其替换为中位数。如果x是一个矩阵,那么该函数将x的每一列视为一个独立的通道。
2)[y,j] = hampel(x) 参数:x:输入信号 y:预处理的输出信号 j:离群指数(0/1表示,1离群)
返回一个逻辑矩阵,该矩阵在标识为离群值的所有点的位置为真
3)[y,j,xmedian,xsigma] = hampel(x)
参数: x:输入信号 y:预处理的输出信号 j:离群指数(0/1表示,1离群) xmedian:中位数 xsigma:估计标准差
返回x的每个元素的局部中位数和估计标准差。
4)y = hampel(x,k) 参数:x:输入信号 y:预处理的输出信号 k:样本两侧数据数
指定测量窗口中x的每个样本两侧的邻居k的数量。K默认为3。
5)y = hampel(x,k,nsigma)
指定若干个标准差,x的样本必须与局部中位数不同,才能被替换为中位数。sigma默认为3。
2、单通道信号生成与预处理
1)单通道信号生成
代码
Matlab
x = sin(4*pi*(0:199)/200);%输入值
x(6) = 2.5;%异常点1
x(20) = -3;%异常点2
x(120) = 2.5;%异常点3
x(180) = -3;%异常点4
n = 1:length(x);
figure(1)
plot(n,x,'color','r')%加入异常数据
视图效果

2)单通道信号处理:hampel()函数
代码
Matlab
x = sin(4*pi*(0:199)/200);%输入值
x(6) = 2.5;%异常点1
x(20) = -3;%异常点2
x(120) = 2.5;%异常点3
x(180) = -3;%异常点4
n = 1:length(x);
figure(1)
plot(n,x,'color','r')%加入异常数据
hold on;
[y,j,xmedian,xsigma] = hampel(x,4);
plot(n,y,'^','color','g')%预处理数据
plot(n,xmedian,'^','color','b')%中位数
plot(n,xsigma,'*','color','y')%标准差
a=find(j);%find()函数:返回非零元素 索引
plot(a,x(j),'s','color','k')
legend('异常','预处理','中位数','估计标准差','离群点')
视图效果

3)单通道信号处理参数调整
代码
Matlab
hampel(x,2)%调整k参数
k=2/4/6/8效果图
3、双通道信号生成与预处理
1)双通道信号生成
代码
Matlab
rng('default')%控制随机函数生成
n = 100;
x = sin(pi./[10 20]'*(1:n)+pi/6)';%双通道信号生成
figure(1)
plot(x)
sy= randi(100,9,1);%添加异常参数的索引//100以内,9行1列的矩阵
x(sy) = x(sy)*2.2;%添加异常参数
x(randi(100,6,1)) = NaN;%添加异常 缺失参数
figure(2)
plot(x)
视图效果


2)双通道信号处理(处理异常点和数据缺失)
代码:
Matlab
figure(3)
y = hampel(x,4);
plot(y)
figure(4)
[y,j,xmedian,xsigma] = hampel(x,4,2);
plot(y)
hold on
plot(xmedian,'^')
试图效果

