一、问题描述

-有多台adc检测不稳定的设备,每一台设备计算出来的adc最大值不等、最小值不等,相差在-3到3之间。设置200个格子,计算当前adc值落在那个格子里以用来控制另一个功能。

二、解决思路

-策略1:设置adc采样的最小值否则一律看作0,设置adc采样的最大值否则一律设置为最大。格子中设置有效触发区间,若落入有效触发区间则直接出结果,若落在无效区域就要分情况讨论-----adc值就在格子的临界处、adc值不在格子的临界处。

-adc值就在格子的临界处:跳变的adc值随时在两个格子a、b的无效触发区间跳动,若只是简单的设置为:触发在格子a的临界处就直接认为格子a有效,触发在格子b的临界处就直接认为格子a有效,这会导致每一次计算结果时哪怕不扭动旋钮等器件控制adc值改变,单单adc值的跳变以及不稳定就概率让计算的结果为:落在格子a、落在格子b,但这是显然没有扭动器件。而且这种情况下使用平均值的方式消抖不总是有用的,平均值消抖的本质是:采样一周期的周期变化的adc值,让波峰掩盖波谷。但是这平均值方式在面对周期长的是需要长时间采样,在实时性要求比较高的应用,这简直是灾难,可以想象每次扭动旋钮结果要采样几秒种才能出结果,这很离谱。当然也可以说直接保存之前记录的值就好了,新得出的校验值与之前的做平均就能保证实时性,这也是一个好办法。但值得一提,设置过长的记录数据长度其实是带来一种延迟响应的问题,人去扭动旋钮但经过平均值一计算的值与所想要的值相比总会滞后,这是平均所带来的。设置过短的长度又会直接没效果。实在是太难了。

-正确方式:

.当adc值落在临界段,计算第一次落入临界段的值是更偏向格子a还是格子b,记录该值,但下一次adc值继续落入临界段,无论更偏向格子a还是格子b一律以记录的值为准并将当前结果设置为记录的值,并与之前保存的adc采样值做平均以得出结果。当然值得指出,这种方式不是万能的,临界段的设置利用了adc值的概率变化更多落在设置的临界段这个规律。当临界段选取得不好,那么adc值有可能直接在临界段以及无效区间徘徊,而由此计算的结果就仍有可能在格子a以及b跳动。

-adc值不在格子的临界处

-adc值落在无效段:直接记录当前adc值,与之前记录的adc值做平均得出结果,平均的结果不讨论如果继续落入临界区的情况,直接得结果。

-adc值落入有效段:直接记录当前adc值,不参与平均值计算,直接更新记录的adc值全部设置为该值。

-策略2:策略1也太tm麻烦了,为难程序员写这玩意?我只想说:艹,我搬砖的。策略1是仅仅考虑值本身,每一个记录的值当成独立的。但想想都不可能,相邻的值怎么可能没有相关性。将采样adc的值丢经保存的数组里,计算这次采样值与之前的采样值的微分,观察微分值起伏从大到小就有足够的理由认为:旋钮扭动停止了,这次采样的值不是更改输出结果的理由,选定相邻的最小值作为结果输出,若观察到微分值一直都很小,那么应当认为:没有扭动旋钮,不输出结果。这个所谓的“观察”在数学上就是算方差。

见上图所示,快速变化的切线最终平缓,这是旋钮的随时间微分变化图。

-策略3:参考策略1,但是不再存在临界区,当adc值落入有效区间直接出结果,当落入无效区间输出上一次输出的结果。例如上一次输出的结果为格子a,但之后落入了格子b的无效区间,那么仍旧输出结果为a,若之后由于adc的采样不稳落入了格子b的有效区间,输出结果为b,哪怕之后采样的值落入了格子a的无效区间,仍旧输出为结果为b。这种方式下,扭动旋钮不一定是实际上最靠近的结果,但肯定是很好写代码的策略。

ADC的计算策略.针对ADC值经常跳变的电路获取正确结果相关推荐

  1. STM8读取AD值偶尔跳变出错的问题

    在调试STM8S103K3T6的AD功能时,发现当温度快速变化时(吹风机模拟),读取到的AD值会偶尔出现跳变,出现的位置相对固定:AD时钟设为2Mhz,每100ms采集一次,单次单路采集,通道无切换, ...

  2. NTC负温度系数的热敏电阻——通过ADC检测计算出相应温度值

    NTC作为一种负温度系数热敏电阻,其阻值随温度升高而降低.利用热敏电阻的特性可以做温度传感器检测温度应用在单片机中.下面简单介绍下,在单片机中AD检测热敏电阻电压值,然后转换成电阻值,求出当前的实际温 ...

  3. NXP KV30 ADC转换时间计算及高速ADC采样配置

    项目中需要高频16位采样,研究了下芯片ADC的配置 芯片转换时间取决于: 采样时间 转换速度 转换时钟的频率fADCK 采样时间配置表 转换时间 转换时间 = 首次采样额外周期 + 硬件平均 * (基 ...

  4. adc量化单位_高速ADC的关键指标:量化误差、offset/gain error、DNL、INL、ENO...

    (一)一个基本概念 分贝(dB):按照对数定义的一个幅度单位.对于电压值,dB以20log(VA/VB)给出:对于功率值,以10log(PA/PB)给出.dBc是相对于一个载波信号的dB值:dBm是相 ...

  5. 服务器散列值与文件,服务器计算的散列值和客户端安全

    服务器计算的散列值和客户端安全 内容精选 换一换 执行adc命令,系统内部通过ADC与运行环境上的ADA的交互,实现文件传输.设置日志级别.心跳检测等功能,在ADC与ADA交互时,涉及使用密钥证书实现 ...

  6. S.M.A.R.T. 参数(smartctl)计算硬盘精确健康值

    参考:Acronis Drive Monitor: Disk Health Calculation 文章目录 1.背景 2.smartctl -a /dev/sda 3.计算健康值 3.1 关键参数 ...

  7. 策略迭代与值迭代的区别

    策略迭代与值迭代都属于强化学习里面策略求解中的动态规划方法.其区别是什么呢? 首先看一张图片: 首先看策略迭代: 1.initialization 初始化所有状态的v(s)以及π(s)(初始化为随机策 ...

  8. 基于STM32F407 ADC双通道 PS2游戏机摇杆ADC采集

    基于STM32F407 ADC双通道 PS2游戏机摇杆ADC采集 一.PS2游戏机摇杆概述 1.1PS2游戏机摇杆概述 1.2PS2游戏机摇杆图解 二.硬件连接分析 三.代码实现 3.1 ADC代码 ...

  9. matlab编写正整数阶乘函数,用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值....

    点击查看用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值.具体信息 答:编写一个matlab文件,求1到n的阶乘之和.其代码编写的目的,就是学会自定义 ...

  10. 存储 dict 的元素前是计算 key 的 hash 值?

    dict 的高性能与其存储方式是分不开的,我们知道 dict 的存储是基于哈希表(又称散列表),需要计算 hash 值,那么是计算谁的 hash 值呢?是像别人说的:存储 dict 元素前计算 key ...

最新文章

  1. 【链接转载保存】Collections.singletonList方法的使用
  2. 提升研发效率 保障数据安全——阿里云宣布数据管理DMS企业版正式商业化
  3. Golang AES 加解密
  4. Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖?
  5. webpack最佳入门实践系列(08)
  6. 左对齐 latex_初学者关于Latex的一些总结(持续更新中...)
  7. C++算法之遗传算法及实现
  8. Excel学习笔记:P1-Excel入门
  9. OpenLayers坐标转换
  10. LaMDA 不可能觉醒吗?
  11. 关于将txt文件中的数据批量添加到excel中,显示不全的问题
  12. Professional Microsoft Office SharePoint Designer 2007
  13. canal使用指南(一)
  14. js原生ajax写法
  15. MFC多线程 信号量CSemaphore 临界区与互斥 事件
  16. elo算法c语言,王者荣耀Elo机制?你中招了吗?
  17. 给linux(centos)操作系统设置主机名的几种方式
  18. vue 在线生成二维码 二维码生成背景下载
  19. 美赛数据(各国统计数据网站大全)
  20. lamp+cakephp下配置fckeditor详解 --by heng

热门文章

  1. tcp wireshark 过滤syn_抓包工具Wireshark常用过滤使用方法
  2. 惠普服务器装centos 系统安装,hp 服务器安装linux系统安装
  3. 知道python网课答案_分析最近的一个网课答案查询2.0
  4. 8.0系统手机无需Root激活XPOSED框架经验
  5. Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
  6. 外贸开发信各国发送的最佳时间
  7. 如何在同一台电脑上打开多个iPhone模拟器
  8. Unity【Live Capture】- 关于人脸捕捉的解决方案(一)
  9. 从0开始的网游ARPG实战案例:暗黑战神(第五六章:主城角色控制和任务引导系统)
  10. 非平衡电桥电阻计算_非平衡电桥的原理和应用 - 范文中心