首页 > 其他分享 >Hampel滤波器

Hampel滤波器

时间:2024-02-16 16:55:34浏览次数:22  
标签:滤波器 Hampel MAD vals 中值 outliers data

Hampel滤波器是一种基于中值和中值绝对偏差(MAD)的滤波器,旨在识别和去除时间序列数据中的异常值。相对于传统均值和标准差方法,Hampel滤波器对异常值更具鲁棒性

Hampel滤波器的核心在于中值的计算和MAD的求解。中值代表数据的中间值,而MAD度量了数据点与中值之间的离散程度

中值:

对于包含\(N\)个数据点的数据集\(X\),中值计算公式如下:

  • 如果\(N\)为奇数:中值=\(X_{\frac{N+1}{2}}\)

  • 如果\(N\)为偶数:中值=\(\frac{1}{2}(X_{\frac{N}{2}}+X_{\frac{N}{2}+1})\)

中值绝对偏差(MAD):

MAD是每个数据点\(X_i\)与数据集\(X\)的中值之间绝对差的中值:

MAD=中值(|\(X_i\)-中值(\(X\))|)

其中,\(X_i\)表示每一个数据点

Hampel滤波器异常值判定标准:

如果数据点\(X_i\)被认定为异常值(即其绝对偏差除以MAD超过阈值),那么将其替换为数据集\(X\)的中值;否则,保持数据点的原始值

\[X_i= \begin{cases} 中值(X) \quad \rm{if} \frac{|X_i-中值(X)|}{MAD}>阈值\\ X_i \quad \quad \quad \text{otherwise} \end{cases} \]

# 生成包含异常值的正弦波数据
def generate_data_with_outliers():
    time = np.linspace(0, 10, 100)
    signal = np.sin(time) + np.random.normal(0, 0.1, 100)
    # 添加异常值
    outliers_indices = [20, 40, 60, 80]
    outliers_values = [2.0, -1.9, 2.1, -0.5]
    
    for index, value in zip(outliers_indices, outliers_values):
        signal[index] = value
    return time, signal
def hampel(vals_orig, k=5, v=3):
    """
    使用Hampel滤波器去除时间序列中的异常值。
    参数:
        - vals_orig: numpy数组,原始时间序列数据
        - k: 整数,滤波器窗口的大小(半窗口大小为k/2)
        - v: 浮点数,用于异常值检测的阈值
    返回:
        - vals_filt: numpy数组,经过滤波的时间序列数据
        - outliers_indices: list,异常值的索引列表
    """
    # 创建输入数据的副本
    vals_filt = np.copy(vals_orig)
    outliers_indices = []
    # 定义Hampel滤波器函数
    n = len(vals_orig)
    for i in range(k, n - k):
        # 提取窗口
        window = vals_orig[i - k:i + k + 1]
        # 计算中值和中值绝对偏差(MAD)
        median = np.median(window)
        mad = np.median(np.abs(window - median))
        # 检查当前值是否为异常值
        if np.abs(vals_orig[i] - median) > v * mad:
            # 用中值替换异常值
            vals_filt[i] = median
            # 记录异常值的索引
            outliers_indices.append(i)
    return vals_filt, outliers_indices
    # 生成包含异常值的数据
    time, data = generate_data_with_outliers()    
    # 对数据应用Hampel滤波器
    filtered_data, outliers_indices = hampel(data)
    # 绘制原始数据和滤波后的数据
    plt.figure(figsize=(10, 6))
    plt.plot(time, data, label='origenal data')
    plt.scatter(time[outliers_indices], data[outliers_indices], c='red', 
    	marker='o', label='outliers', s=50)
    plt.plot(time, filtered_data, label='data filtered', linestyle='--', color='red')
    plt.fill_between(time, filtered_data, data, color='red', alpha=0.2, label='outliers region')
    plt.title('outliers removal using hampel identifier')
    plt.grid(True)
    plt.legend()
    plt.show()

标签:滤波器,Hampel,MAD,vals,中值,outliers,data
From: https://www.cnblogs.com/conpi/p/18017280

相关文章

  • Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、
    全文链接:https://tecdat.cn/?p=33550原文出处:拓端数据部落公众号什么是时间序列?时间序列是一系列按时间顺序排列的观测数据。数据序列可以是等间隔的,具有特定频率,也可以是不规则间隔的,比如电话通话记录。在进行投资和交易研究时,对于时间序列数据及其操作要有专业的理解。本文......
  • 基于CMFB余弦调制滤波器组的频谱响应matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a 3.算法理论概述        CMFB余弦调制滤波器组是一种基于余弦调制技术的滤波器组,它具有频率选择性和可调性,可以广泛应用于信号处理、图像处理、通信等领域。下面将详细介绍其原理、数学公式等。 3.1......
  • 模拟集成电路设计系列博客——5.2.2 二阶开关电容滤波器
    5.2.2二阶开关电容滤波器类似于一阶的情况,二阶开关电容滤波器结构可以通过参考连续时间滤波器结构来实现。然而,和一阶滤波器一样,一旦确定滤波器结构,其精确的频率响应需要通过离散时间分析求得。使用精确的传输函数,或者是几个精确的近似,可以确定设计环节时所需要的电容比例。一......
  • 几种常见的频率域滤波器
    几种常见的频率域滤波器理想低通滤波器在以原点为圆心、以为半径的圆内,无衰减地通过所有频率,而在该圆外所有频率都不可以通过的二维低通滤波器,称为理想低通滤波器(ILPF)其中,在和之间的过渡点称为截止频率,是一个正常数,是频率域中点与频率矩形中心的距离,即但是理想低通滤波......
  • 各种二端口滤波器网络仿真遇到的问题
    各种滤波器网络仿真遇到的问题目录各种滤波器网络仿真遇到的问题1、仿真的前置问题研究2、电路1仿真3、电路2仿真4、电路3仿真使用软件:LTspice(ADI推荐的仿真软件)1、仿真的前置问题研究为什么在LC谐振点会产生大于0的增益?问题比较突兀,以简单的例子来验证:上图添加了一个简......
  • 模拟集成电路设计系列博客——4.3.1 有源RC滤波器
    4.3.1有源RC滤波器除了Gm-C滤波器外,另一种实现模拟集成滤波器的方案是有源RC滤波器或者MOSFET-C滤波器。在这两个技术中,电流的积分都是通过反馈连接在一个高增益放大器的电容上实现的,这与将电流积分电容连接到地的Gm-C滤波器方案不同。有时这种方案被叫做米勒积分,因为就像两级放......
  • 基于卷积ARMA滤波器的图神经网络
    PAMI(IEEETransactionsonPatternAnalysisandMachineIntelligence)模式分析与机器智能-2021IF:17.730FilippoMariaBianchiDanieleGrattarolaLorenzoLiviCesareAlippiAbstract​ 流行的图神经网络基于多项式频谱滤波器在图上实现卷积操作。在本......
  • 【FPGA】FIR数字滤波器设计心得
    【FPGA】FIR数字滤波器设计心得0前言学校的课程设计要求设计FIR滤波器,FPGA芯片是Xilinx的Artix7,板卡是依元素科技有限公司做的拓展板,2017年的,目前搜不到了,估计是被迭代了。本文作为课程设计的复盘和总结。1FIR滤波器设计1.1原理输入输出特性:FIR(FiniteImpulseRespons......
  • 滤波器基础
     常见三种陷波滤波器(NotchFilter)的离散化设计https://blog.csdn.net/qczhao_10/article/details/128073104 双线性变换推导整理https://zhuanlan.zhihu.com/p/518202321 【MATLAB】【数字信号处理】常用函数06https://www.bilibili.com/read/cv4243547/......
  • 模拟集成电路设计系列博客——4.1.4 二阶Gm-C滤波器
    4.1.4二阶Gm-C滤波器下图展示了一个全差分二阶\(G_m-C\)滤波器,其传输函数可以表达为:\[H(s)=\frac{V_{out}(s)}{V_{in}(s)}=\frac{s^2C_X/(C_X+C_B)+sG_{m5}/(C_X+C_B)+G_{m2}G_{m4}/[C_A(C_X+C_B)]}{s^2+sG_{m3}/(C_X+C_B)+G_{m1}G_{m2}/[C_A(C_X+C_B)]}\tag{4.1.23}\]二阶......