jasonli 发表于 2010-8-23 14:36:59

问傻孩子,关于《深入浅出avr单片机》书中ad的滑动窗口均值滤波法

问题如下:
假设上述程序第一次运行,s_wADCBuffer数组中只有s_wADCBuffer有数值,其他都为0(或者s_wADCBuffer数组中至少有一个为0),那么计算总和后,再右移ADC_BUFF_SIZE_BIT_COUNT位之后,结果不是就不对了吗?

下面为源程序:

//全局变量声明
unsigned int g_wADValue;       //用于保存结果的变量
void Insert_ADC_Isr_Code(unsigned int ADCValue)
{
static unsigned int s_wADCBuffer;
static unsigned char s_cBufferCounter = 0;
unsigned long s_dTotal;            //注意这里,不再需要静态类型了
unsigned char n = 0;

//将A/D采样值加入到数组中
s_wADCBuffer = ADCValue;

//计算总和
s_dTotal = 0;
for (n = 0;n < ADC_BUFF_SIZE;n++)
   {
    s_dTotal += s_wADCBuffer;
   }
//计算平均值,并输出到一个固定的变量中
g_wADValue = (unsigned long)s_dTotal >>ADC_BUFF_SIZE_BIT_COUNT;

s_cBufferCounter++;
//判断队列指针是否达到边界
if (s_cBufferCounter == ADC_BUFF_SIZE)
   {
   //队列指针到达边界,清零
    s_cBufferCounter = 0;
   }
} //End Of Insert_ADC_Isr_Code

Gorgon_Meducer 发表于 2010-8-25 11:02:08

前面几次数据都是无效的

jasonli 发表于 2010-8-26 08:47:50

回复【1楼】Gorgon Meducer 傻孩子
前面几次数据都是无效的
-----------------------------------------------------------------------

可是你的程序中并没有体现出来吧?

Gorgon_Meducer 发表于 2010-8-26 09:38:16

不好意思哈……不过我当时认为这是显而易见的……下次我加一个旁批。谢谢您的反馈。

jasonli 发表于 2010-8-27 14:32:20

回复【3楼】Gorgon Meducer 傻孩子
不好意思哈……不过我当时认为这是显而易见的……下次我加一个旁批。谢谢您的反馈。
-----------------------------------------------------------------------

不好意思,我脑子愚笨,我不明白你说的“前面几次数据都是无效的 ”,到底你的程序是如何实现“前面几次数据都是无效的 ”?能给我讲解一下吗?

Gorgon_Meducer 发表于 2010-8-27 15:16:01

所谓前几次数据无效意思就是,你直接丢弃前几次数据就可以了。

jasonli 发表于 2010-8-27 15:21:30

回复【5楼】Gorgon Meducer 傻孩子
所谓前几次数据无效意思就是,你直接丢弃前几次数据就可以了。
-----------------------------------------------------------------------

哦,那就是这个缓冲区不存满的话,算出来的数据无效,那最好还是加一个存满标志,当存满时才允许读数据,不知道我的理解对不对?

Gorgon_Meducer 发表于 2010-8-27 15:56:56

呵呵,别太较真,实际使用的时候往往不在乎前面的几个数据。

jasonli 发表于 2010-8-30 10:47:20

回复【7楼】Gorgon Meducer 傻孩子
呵呵,别太较真,实际使用的时候往往不在乎前面的几个数据。
-----------------------------------------------------------------------

哦,呵呵,领悟了!

Notting_Hill 发表于 2010-8-30 10:55:20

滑动窗口均值滤波法要求被采集对象变化不是很快;若主程序中还有其他任务需要占用较多的时间,则用查询方式并不适合,会出现“反应迟钝”现象,而中断方式相对来说要好些~~^_^

Gorgon_Meducer 发表于 2010-9-1 10:04:45

to 【9楼】 Notting_Hill 半壶水
    您说的对的,不过这个帖子没有讨论使用查询还是中断,而且原书的例子用的就是中断。
                                                                  ——特此吐槽

Chester 发表于 2011-6-16 12:25:41

mark

yikuang 发表于 2012-12-16 15:11:40

做下笔记!
页: [1]
查看完整版本: 问傻孩子,关于《深入浅出avr单片机》书中ad的滑动窗口均值滤波法