拉依达法则是基于统计的异常数据剔除方法,实现方法并不复杂。看到自己n年之前写的一个c++的实现,发现c++11之后的新特性可以拿来使用到这个function中去,使得函数本身更加条理,可读性更强。

当然这不是直接应用的版本,直接应用时,将这个filter实现为一个类更加科学实用一些,为了让代码看起来篇幅合适,就做了以下调整。但是以下代码是可以直接编译运行的。

当然,拉依达法则知适合处理数据量比较多的场景,采样点较少时要小心,小于10个点时此方法完全失效,点击这里可查看分析

#include <list>
#include <algorithm>    // for_each
#include <numeric>      // std::accumulate
#include <math.h>       // sqrt
#include <stdio.h>double layida_filter(std::list<double> &values)
{static constexpr int    THRD_THREE_SIGMA = 9;static constexpr double THREE_SIGMA = 3.0;int n = (int)values.size();if (n == 0){return 0.0; // nerver goes here}double dAver = std::accumulate(values.begin(), values.end(), 0.0)/n;if (n <=THRD_THREE_SIGMA){return dAver;}double dSigma(0.0);std::for_each (values.begin(), values.end(), [&](const double d) {dSigma  += (d-dAver)*(d-dAver);});dSigma /= n-1;dSigma = sqrt(dSigma);for (auto it = values.begin();it!=values.end();) {double delta = abs(*it - dAver);if (delta > THREE_SIGMA*dSigma) {it = values.erase(it);} else {it++;}}if ((int)values.size() < n) {return layida_filter(values);}return dAver;
}std::list<double> _values; // used to store the buffer
constexpr static long unsigned int _avg_n = 30;double apply(double data)
{if (_values.size()>=_avg_n) {_values.pop_front();}_values.push_back(data);std::list<double> ls_values(_values);double layida_avg = layida_filter(ls_values);return layida_avg;
}int main()
{for (int i=0;i<20;++i){printf("filter value: [%f]\n", apply(i*1.0));}return 0;
}

拉依达准则的一个c++实现相关推荐

  1. 【数据异常校验】拉依达准则( PauTa Criterion 或 3σ准则) 处理异常数据

    拉依达准则是指先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除. 这种判别处理 ...

  2. C#使用拉依达准则(3σ准则)剔除异常数据(.Net剔除一组数据中的奇异值)

    1.问题的提出: 电池生产中,遇到一批电池的测量结果数据: 电压值 电池个数 电压值 电池个数 电压值 电池个数 电压值 电池个数 0.056 1   4.09 1   4.146 17   4.17 ...

  3. 进阶版拉依达准则(3sigm准则)的提出与应用

    修正版拉依达准则的提出与应用 前言 一:基于实验说明异常点对模型结果的影响 二:异常点的判定 三:修正版拉依达准则(3σ准则) 四:理论验证 五:代码实现 六:总结 前言 在前两次文章中,我们都提到异 ...

  4. matlab拉依达法,基于拉依达准则的奇异数据滤波法.ppt

    基于拉依达准则的奇异数据滤波法 第四章 智能仪器的基本数据处理算法 数据处理能力是智能仪器水平的标志,不能充分发挥软件作用,等同硬件化的数字式仪器. 基本数据处理算法内容提要 克服随机误差的数字滤波算 ...

  5. Matlab读取excel并使用拉依达准则筛选数据

    1.Matlab读取Excel表格 版本:matlab R2020a,Excel2019的xlsx格式文件 1.1 导入数据 1.2 选择并打开要导入的.xlsx文件 1.3 选择数据区域,选择输出到 ...

  6. 拉依达准则——(3σ)

    拉依达准则--(3σ) 引言 有时在数据分析上,需要对某些偏离点进行剔除,我们可以考虑拉依达法则(3σ),以提高数据的准确性. 概念 假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一 ...

  7. 拉依达准则--(3σ准则)Matlab实现

    达依拉准则介绍: 拉依达准则是指先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔 ...

  8. matlab实现拉依达准则,拉依达准则matalb程序

    页数:2 中图分类:O212 正文语种:CHI 关键词:数据分析;甑别值;拉依达准则;肖维勒准则;格拉布斯准则 摘要:对测量数据进行分析,是为了及时发现错误,防止错误,数据...... 原始信号 中值 ...

  9. java中算术异常值_依据拉依达准则来剔除异常值程序

    java源码在下,在main主方法里的data数组里输入要测量的数据(个数长度>=10个),会判断里面有误异常值,如果有则警告 /** * @author 廖启安 * @data 2018年4月 ...

最新文章

  1. 马云打响本地生活消费攻坚战,饿了么获手淘一级入口,美团危险了
  2. 自制Ghost XP SP3 启动光盘(一)
  3. nginx配置参数详解
  4. pyaiml聊天机器人
  5. 31.错误处理.rs
  6. Mac 运行goland出现can‘t load package: package xxxx is not in GOROOT问题排查
  7. openstack 云_使用OpenStack打造云事业
  8. Enterprise Library 4.1 Configuration Sources 图文笔记
  9. matlab 及数字信号实验报告,Matlab数字信号处理实验报告.doc
  10. 脑机接口技术介绍、应用与挑战
  11. glibc 知:手册08:消息翻译
  12. 修改JAVA WEB项目名称
  13. vue3.0的多种写法,你喜欢哪种呢?
  14. C语言编程 5.7 从键盘中输入一个英文字母,如果它是大写则转化为小写。如果它是小写则转化为大写,并将其ASCll码显示到屏幕上。
  15. java opengl 话正方形_OpenGL绘制正方形并让其移动
  16. python 数学公式_python的数学算法函数及公式用法
  17. 交换机开启DHCP Snooping
  18. 论文 | 科研软件 —— Microsoft VisioPro 2019安装及注册教程
  19. 微型计算机接口与技术的交通灯,微机原理与接口技术课程设计——交通灯设计.doc...
  20. 如何确定IP在同一网段

热门文章

  1. 电磁场与电磁波 面电流和体电流磁感应强度的计算
  2. i711370h和i710875h哪个好
  3. 实用技巧——Python实现从Excel读取数据并绘制成图像
  4. 校园IPTV数字电视教学直播系统方案-淮安生态文旅区实验小学
  5. Windows系统MySQL免安装下载配置
  6. 微服务实施笔记(一)
  7. Android 11 自动亮度调试流程
  8. 【华为OD机试模拟题】用 C++ 实现 - 英文输入法单词联想 or 英文输入法(2023.Q1)
  9. 基于SaaS的教务系统平台设计构想
  10. SAP 订单BOM与销售BOM的区别