文档

dsp。HampelFilter

使用Hampel标识符过滤异常值

描述

dsp。HampelFilter系统对象™通过使用Hampel标识符检测并移除输入信号的异常值。汉佩尔标识符是统计中三西格玛规则的一种变体,对异常值具有鲁棒性。对于输入信号的每个样本,对象计算由当前样本和组成的窗口的中位数 l e n 1 2 电流样品两侧相邻样品。Len窗口长度是否通过WindowLength财产。该对象还通过使用中值绝对偏差估计每个样本关于其窗口中值的标准偏差。如果样本与中位数的差异大于阈值乘以标准差,则过滤器将样本替换为中位数。有关更多信息,请参见算法

使用Hampel标识符对输入信号进行过滤:

  1. 创建dsp。HampelFilter对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?(MATLAB)。

创建

描述

hampFilt= dsp。HampelFilter返回一个Hampel过滤器对象,hampFilt,使用默认属性。

例子

hampFilt= dsp。HampelFilter (Len设置WindowLength财产Len

hampFilt= dsp。HampelFilter (LenLim设置WindowLength财产Len阈值财产Lim

例子:hampFilt = dsp.HampelFilter(11,2);

hampFilt= dsp。HampelFilter (名称,值使用名称,值对。未指定的属性有默认值。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计(MATLAB)。

如果一个属性被列为可调的,那么即使对象被锁定,您也可以更改它的值。

滑动窗口的长度,指定为正奇数标量整数。有限长度的窗口在数据上滑动,对象计算窗口内数据的中位数和中位数绝对偏差。

数据类型:|

异常值检测的阈值,指定为正实标量。有关如何使用此属性检测异常值的信息,请参见算法

可调:是的

数据类型:|

使用

描述

例子

y= hampFilt (x检测并去除输入信号每个通道的异常值,x,随着时间的推移,使用Hampel过滤器独立。

yisOutlier= hampFilt(x返回一个逻辑数组,isOutlier,其中真正的Element表示输入中的相应元素是异常值。isOutlier与输入和输出向量的大小相同。

输入参数

全部展开

数据输入,指定为向量或矩阵。对象接受多通道输入,即:——- - - - - -n大小输入,其中≥1,且n> 1.每个帧(通道)中的样本数量,和n是通道数。对象还接受可变大小的输入。对象锁定后,您可以更改每个输入通道的大小,但不能更改通道的数量。

数据类型:|

输出参数

全部展开

过滤后的数据,作为向量或矩阵返回。

数据类型:|

一种逻辑数组,其元素指示输入数组中的对应元素是否为离群值。如果一个元素isOutlier真正的,则输入数组中对应的元素为离群值。

数据类型:逻辑

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源并允许更改System对象属性值和输入特征
重置 重置System对象的内部状态

例子

全部展开

使用Hampel滤波器从嘈杂的正弦波信号中过滤高频噪声。比较Hampel滤波器和中值滤波器的性能。

初始化

建立一个dsp。HampelFilter和一个dsp。MedianFilter对象。这些对象使用窗口长度为7的滑动窗口方法。创建用于查看输出的时间范围。

Fs = 1000;hampFilt = dsp.HampelFilter(7);medFilt = dsp.MedianFilter(7);Scope = dsp。TimeScope (“SampleRate”Fs,...“TimeSpanOverrunAction”“滚动”...“时间间隔”,1,“ShowGrid”,真的,...“YLimits”3 [3],...“LayoutDimensions”(3 - 1),...“NumInputPorts”3);范围。ActiveDisplay = 1;范围。Title =“信号+噪音”;范围。ActiveDisplay = 2;范围。Title ='Hampel Filter Output(窗口长度= 7)';范围。ActiveDisplay = 3;范围。Title =中值过滤器输出(窗口长度= 7)

使用长度为7的窗口过滤噪声正弦波

产生频率为10hz的嘈杂正弦波信号。对信号应用Hampel滤波器和中值滤波器对象。在时间范围上查看输出。

framength = 256;sin = dsp。SineWave (“SampleRate”Fs,“频率”10...“SamplesPerFrame”, FrameLength);hfn = 3 * (rand(FrameLength,1) < 0.02);x = sin () + 1e-2 * randn(FrameLength,1) + hfn;y1 = hampFilt(x);y2 = medFilt(x);范围(x, y1, y2);结束

两种滤波器都能去除高频噪声。但是,当您增加窗口长度时,首选使用Hampel过滤器。与中值滤波器不同,Hampel滤波器即使在较大的窗口长度下也能保持正弦波的形状。

使用长度为37的窗口过滤噪声正弦波

将两个过滤器的窗口长度增加到37。过滤有噪声的正弦波,并在时间范围上查看过滤后的输出。若要更改筛选器的窗口长度,必须在处理循环开始时释放筛选器对象。

释放(hampFilt);释放(medFilt);hampFilt。WindowLength = 37;medFilt。WindowLength = 37;范围。ActiveDisplay = 1;范围。Title =“信号+噪音”;范围。ActiveDisplay = 2;范围。Title ='Hampel Filter Output (Window Length = 37)';范围。ActiveDisplay = 3;范围。Title =中值过滤器输出(窗口长度= 37)hfn = 3 * (rand(FrameLength,1) < 0.02);x = sin () + 1e-2 * randn(FrameLength,1) + hfn;y1 = hampFilt(x);y2 = medFilt(x);范围(x, y1, y2);结束

中值滤波器压平了正弦波的波峰和波谷,这是由于在大数据窗口上进行中值操作。Hampel滤波器除了去除异常值外,还保留了信号的形状。

函数从流信号中移除高频异常值dsp。HampelFilter系统对象?。

使用dsp。MatFileReader系统对象来读取陀螺仪MAT文件。该文件包含三列数据,每列包含7140个样本。这三列表示x设在,y设在,z-轴数据来自陀螺仪运动传感器。选择714个样本的帧大小,使数据的每列包含10个帧。的dsp。HampelFilter系统对象使用窗口长度为11。创建一个dsp。TimeScope对象查看筛选后的输出。

Reader = dsp。MatFileReader (“SamplesPerFrame”, 714,“文件名”“LSM9DSHampelgyroData73.mat”...“VariableName”“数据”);hampFilt = dsp.HampelFilter(11);Scope = dsp。TimeScope (“NumInputPorts”,1,“SampleRate”, 119,“YLimits”(-300 300),...“ChannelNames”,{“输入”“过滤输出”},“时间间隔”现年60岁的“ShowLegend”,真正的);

过滤陀螺仪数据使用dsp。HampelFilter系统对象。查看过滤后的z-轴数据在时间范围。

i = 1:10 gyroData = reader();filteredData = hampFilt(gyroData);范围([gyroData (:, 3), filteredData (:, 3)));结束

Hampel滤波器去除所有异常值并保留信号的形状。

更多关于

全部展开

算法

对于给定的数据样本,x年代,算法为:

  • 将奇数长度的窗口置于当前样本的中心。

  • 计算局部中值,,标准差,σ,超过当前窗口的数据。

  • 比较当前样本nσ×σ,在那里nσ为阈值。如果 | x 年代 | > n σ × σ ,滤波器识别当前样本,x年代,作为异常值,并将其替换为中值,

考虑一个传递到Hampel过滤器的数据帧。

在这个例子中,Hampel过滤器滑动一个长度为5 (Len)而不是数据。过滤器的阈值为2 (nσ).为了在帧的开头有一个完整的窗口,过滤器算法在帧的前面加上Len- 1个0。为计算输出的第一个示例,窗口以 l e n 1 2 + 1 th 在附加的坐标系中,这里的第三个零。过滤器计算中位数、中位数绝对偏差和本地窗口中数据的标准偏差。

  • 当前示例:x年代= 0。

  • 数据窗口:赢得=[0 0 0 0 1]。

  • 本地值:= median([0 0 0 0 1]) = 0。

  • 绝对偏差中位数: 一个 d 中位数 | x k | ... | x + k | .对于这个数据窗口, 一个 d 中位数 | 0 0 | ... | 1 0 | 0

  • 标准偏差:σκ×疯了= 0,其中 κ 1 2 误差补函数 1 1 / 2 1.4826

  • 当前的样本,x年代= 0,不符合异常值检测关系。

    | x 年代 | 0 > n σ × σ 0

    因此,Hampel滤波器输出当前输入样本,x年代= 0。

对后续的每个样本重复此过程,直到算法将窗口居中 E n d l e n 1 2 th 样品,标记为结束.因为窗户的中心在最后一个 l e n 1 2 样本不能是满的,这些样本与下一帧输入数据一起处理。

下面是Hampel过滤器生成的第一个输出帧:

附加的输入帧的第七个样本23是一个异常值。Hampel过滤器将该样本替换为局部窗口上的中值[4 9 23 8 12]。

参考文献

[1]波登汉姆,迪恩。流数据的自适应过滤和变化检测博士论文。帝国理工学院,伦敦,2012。

[2]刘汉聪Sirish Shah Wei Jiang。“在线异常值检测和数据清理。”计算机与化学工程.第28卷,2004年3月,第1635-1647页。

[3] Suomela, Jukka。中值滤波等价于排序, 2014年。

扩展功能

在R2017a中引入