ADC的计算策略.针对ADC值经常跳变的电路获取正确结果
一、问题描述
-有多台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值经常跳变的电路获取正确结果相关推荐
- STM8读取AD值偶尔跳变出错的问题
在调试STM8S103K3T6的AD功能时,发现当温度快速变化时(吹风机模拟),读取到的AD值会偶尔出现跳变,出现的位置相对固定:AD时钟设为2Mhz,每100ms采集一次,单次单路采集,通道无切换, ...
- NTC负温度系数的热敏电阻——通过ADC检测计算出相应温度值
NTC作为一种负温度系数热敏电阻,其阻值随温度升高而降低.利用热敏电阻的特性可以做温度传感器检测温度应用在单片机中.下面简单介绍下,在单片机中AD检测热敏电阻电压值,然后转换成电阻值,求出当前的实际温 ...
- NXP KV30 ADC转换时间计算及高速ADC采样配置
项目中需要高频16位采样,研究了下芯片ADC的配置 芯片转换时间取决于: 采样时间 转换速度 转换时钟的频率fADCK 采样时间配置表 转换时间 转换时间 = 首次采样额外周期 + 硬件平均 * (基 ...
- adc量化单位_高速ADC的关键指标:量化误差、offset/gain error、DNL、INL、ENO...
(一)一个基本概念 分贝(dB):按照对数定义的一个幅度单位.对于电压值,dB以20log(VA/VB)给出:对于功率值,以10log(PA/PB)给出.dBc是相对于一个载波信号的dB值:dBm是相 ...
- 服务器散列值与文件,服务器计算的散列值和客户端安全
服务器计算的散列值和客户端安全 内容精选 换一换 执行adc命令,系统内部通过ADC与运行环境上的ADA的交互,实现文件传输.设置日志级别.心跳检测等功能,在ADC与ADA交互时,涉及使用密钥证书实现 ...
- S.M.A.R.T. 参数(smartctl)计算硬盘精确健康值
参考:Acronis Drive Monitor: Disk Health Calculation 文章目录 1.背景 2.smartctl -a /dev/sda 3.计算健康值 3.1 关键参数 ...
- 策略迭代与值迭代的区别
策略迭代与值迭代都属于强化学习里面策略求解中的动态规划方法.其区别是什么呢? 首先看一张图片: 首先看策略迭代: 1.initialization 初始化所有状态的v(s)以及π(s)(初始化为随机策 ...
- 基于STM32F407 ADC双通道 PS2游戏机摇杆ADC采集
基于STM32F407 ADC双通道 PS2游戏机摇杆ADC采集 一.PS2游戏机摇杆概述 1.1PS2游戏机摇杆概述 1.2PS2游戏机摇杆图解 二.硬件连接分析 三.代码实现 3.1 ADC代码 ...
- matlab编写正整数阶乘函数,用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值....
点击查看用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值.具体信息 答:编写一个matlab文件,求1到n的阶乘之和.其代码编写的目的,就是学会自定义 ...
- 存储 dict 的元素前是计算 key 的 hash 值?
dict 的高性能与其存储方式是分不开的,我们知道 dict 的存储是基于哈希表(又称散列表),需要计算 hash 值,那么是计算谁的 hash 值呢?是像别人说的:存储 dict 元素前计算 key ...
最新文章
- 【链接转载保存】Collections.singletonList方法的使用
- 提升研发效率 保障数据安全——阿里云宣布数据管理DMS企业版正式商业化
- Golang AES 加解密
- Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖?
- webpack最佳入门实践系列(08)
- 左对齐 latex_初学者关于Latex的一些总结(持续更新中...)
- C++算法之遗传算法及实现
- Excel学习笔记:P1-Excel入门
- OpenLayers坐标转换
- LaMDA 不可能觉醒吗?
- 关于将txt文件中的数据批量添加到excel中,显示不全的问题
- Professional Microsoft Office SharePoint Designer 2007
- canal使用指南(一)
- js原生ajax写法
- MFC多线程 信号量CSemaphore 临界区与互斥 事件
- elo算法c语言,王者荣耀Elo机制?你中招了吗?
- 给linux(centos)操作系统设置主机名的几种方式
- vue 在线生成二维码 二维码生成背景下载
- 美赛数据(各国统计数据网站大全)
- lamp+cakephp下配置fckeditor详解 --by heng
热门文章
- tcp wireshark 过滤syn_抓包工具Wireshark常用过滤使用方法
- 惠普服务器装centos 系统安装,hp 服务器安装linux系统安装
- 知道python网课答案_分析最近的一个网课答案查询2.0
- 8.0系统手机无需Root激活XPOSED框架经验
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- 外贸开发信各国发送的最佳时间
- 如何在同一台电脑上打开多个iPhone模拟器
- Unity【Live Capture】- 关于人脸捕捉的解决方案(一)
- 从0开始的网游ARPG实战案例:暗黑战神(第五六章:主城角色控制和任务引导系统)
- 非平衡电桥电阻计算_非平衡电桥的原理和应用 - 范文中心