ADC 的移动平均线
Moving Average for ADC
大家好我正在做一个项目,我必须计算 ADC 读数的移动平均值。来自 ADC 的数据代表正弦波。
这是我用来获取给定信号的移动平均值的代码。
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);
In my case I am taking Delta(x) = 15.
我想根据信号强度计算这个常量表达式或 Delta(x)。
信号的最大电压电平为 255 或 5 伏特。
信号的最小电压电平经常变化,因为恒定值对确定下限和上限的我的应用没有用。
请帮忙
谢谢
现在有了对发生的事情的描述,我想你想要三个 运行 平均值:
- 输入信号。轻轻平均它以帮助抑制噪音。
upper_limit
当您确定局部最大值时,将它们推入此平均值。
lower_limit
当您确定局部最小值时,将它们推入此平均值。
您的增量将是 (upper_limit-lower_limit)/8
(或 4,或其他)。您的滞后点将是 upper_limit - delta
和 lower_limit + delta
.
每次转换到“1”时,将当前局部最小值推入 lower_limit
移动平均线,然后开始搜索新的局部最大值。当您过渡到“0”时,将局部最大值推入 upper_limit
移动平均线并开始搜索新的局部最小值。
如果您的信号强度变化很大(您可能会到达一个点,您的信号突然下降到滞后带并且您再也无法进行任何转换),就会出现问题。您可以通过几种方式解决此问题:
- 计算您在滞后带中花费了多少时间,如果花费太多时间,请重置所有内容。
或
- 对于滞后带中的每个样本,将
upper_limit
和 lower_limit
稍微靠近一点。最终它们会崩溃到您再次开始检测转换的程度。
对此持保留态度。如果你是为学校项目做这件事,它几乎肯定不会符合你的教授正在寻找的任何学术方法。
大家好我正在做一个项目,我必须计算 ADC 读数的移动平均值。来自 ADC 的数据代表正弦波。
这是我用来获取给定信号的移动平均值的代码。
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);
In my case I am taking Delta(x) = 15.
我想根据信号强度计算这个常量表达式或 Delta(x)。 信号的最大电压电平为 255 或 5 伏特。 信号的最小电压电平经常变化,因为恒定值对确定下限和上限的我的应用没有用。
请帮忙
谢谢
现在有了对发生的事情的描述,我想你想要三个 运行 平均值:
- 输入信号。轻轻平均它以帮助抑制噪音。
upper_limit
当您确定局部最大值时,将它们推入此平均值。lower_limit
当您确定局部最小值时,将它们推入此平均值。
您的增量将是 (upper_limit-lower_limit)/8
(或 4,或其他)。您的滞后点将是 upper_limit - delta
和 lower_limit + delta
.
每次转换到“1”时,将当前局部最小值推入 lower_limit
移动平均线,然后开始搜索新的局部最大值。当您过渡到“0”时,将局部最大值推入 upper_limit
移动平均线并开始搜索新的局部最小值。
如果您的信号强度变化很大(您可能会到达一个点,您的信号突然下降到滞后带并且您再也无法进行任何转换),就会出现问题。您可以通过几种方式解决此问题:
- 计算您在滞后带中花费了多少时间,如果花费太多时间,请重置所有内容。
或
- 对于滞后带中的每个样本,将
upper_limit
和lower_limit
稍微靠近一点。最终它们会崩溃到您再次开始检测转换的程度。
对此持保留态度。如果你是为学校项目做这件事,它几乎肯定不会符合你的教授正在寻找的任何学术方法。