首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ADC移动平均

ADC移动平均
EN

Stack Overflow用户
提问于 2015-10-26 18:35:37
回答 1查看 2.3K关注 0票数 0

嗨,我正在做一个项目,我要计算ADC读数的移动平均值。ADC输出的数据代表正弦波。

这是我用来获取给定信号的移动平均值的代码。

代码语言:javascript
复制
longNew = (8 bit data from ADC);
longNew = longNew << 8;
//Division
longNew = longNew >> 8;    //255 Samples
longTemp = avgALong >> 8;

avgALong -= longTemp;// Old data 
avgALong += longNew;// New Data

avgA = avgALong >> 8;//256 Point Average

参考图像

请参考此图像作为相对于参考(或avgA)的上限和下限。

目前,我正在使用一个常量值来为我的应用程序获得电压的上限和下限,我正在计算以下内容

upper_limit = avgA + Delta(x);lower_limit = avgA - Delta(x);

在我的例子中,我取Delta(x) = 15。

我想根据信号强度计算这个常数表达式或Delta(x)。信号的最大电压电平为255伏特或5伏特。信号的最小电压电平经常变化,因为一个恒定的值对我的应用没有帮助,因为它决定了下限和上限。

请帮帮忙

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-28 13:33:41

现在描述一下正在发生的事情,我认为您需要三个运行平均值:

  1. 输入信号。轻轻平均它,以帮助压制噪音。
  2. upper_limit当您确定局部最大值时,将它们推入这个平均值。
  3. lower_limit当您确定局部最小值时,将它们推到这个平均值中。

您的增量将是(upper_limit-lower_limit)/8 (或4,或其他什么)。你的迟滞点是upper_limit - deltalower_limit + delta

每次转换到“1”时,将当前的局部最小值推入lower_limit移动平均线,然后开始搜索新的局部最大值。当您转换到“0”时,将局部最大值推入upper_limit移动平均线,并开始搜索新的局部最小值。

如果你的信号强度变化很大,就会有一个问题(你的信号会突然下降到磁滞带,再也不会有任何转变了)。你可以用几种方法解决这个问题:

  1. 数一数你花在迟滞带上的时间,如果你花费太多的时间,就重新设置所有的时间。

  1. 对于滞后带中的每一个样本,将upper_limitlower_limit稍微靠近一点。最终,它们会崩溃到你再次开始检测过渡的程度。

吃点盐吧。如果你这样做是为了一个学校的项目,它几乎肯定不会匹配任何学术方法,您的教授正在寻找。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33353160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档