搜索
bottom↓
回复: 12

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

[复制链接]

出0入0汤圆

发表于 2010-8-23 14:36:59 | 显示全部楼层 |阅读模式
问题如下:
假设上述程序第一次运行,s_wADCBuffer数组中只有s_wADCBuffer[0]有数值,其他都为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[ADC_BUFF_SIZE];
  static unsigned char s_cBufferCounter = 0;
  unsigned long s_dTotal;              //注意这里,不再需要静态类型了
  unsigned char n = 0;
  
//将A/D采样值加入到数组中
  s_wADCBuffer[s_cBufferCounter] = ADCValue;
  
//计算总和
  s_dTotal = 0;
  for (n = 0;n < ADC_BUFF_SIZE;n++)
   {
    s_dTotal += s_wADCBuffer[n];
   }
//计算平均值,并输出到一个固定的变量中
  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

出0入296汤圆

发表于 2010-8-25 11:02:08 | 显示全部楼层
前面几次数据都是无效的

出0入0汤圆

 楼主| 发表于 2010-8-26 08:47:50 | 显示全部楼层
回复【1楼】Gorgon Meducer 傻孩子
前面几次数据都是无效的
-----------------------------------------------------------------------

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

出0入296汤圆

发表于 2010-8-26 09:38:16 | 显示全部楼层
不好意思哈……不过我当时认为这是显而易见的……下次我加一个旁批。谢谢您的反馈。

出0入0汤圆

 楼主| 发表于 2010-8-27 14:32:20 | 显示全部楼层
回复【3楼】Gorgon Meducer 傻孩子
不好意思哈……不过我当时认为这是显而易见的……下次我加一个旁批。谢谢您的反馈。
-----------------------------------------------------------------------

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

出0入296汤圆

发表于 2010-8-27 15:16:01 | 显示全部楼层
所谓前几次数据无效意思就是,你直接丢弃前几次数据就可以了。

出0入0汤圆

 楼主| 发表于 2010-8-27 15:21:30 | 显示全部楼层
回复【5楼】Gorgon Meducer 傻孩子
所谓前几次数据无效意思就是,你直接丢弃前几次数据就可以了。
-----------------------------------------------------------------------

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

出0入296汤圆

发表于 2010-8-27 15:56:56 | 显示全部楼层
呵呵,别太较真,实际使用的时候往往不在乎前面的几个数据。

出0入0汤圆

 楼主| 发表于 2010-8-30 10:47:20 | 显示全部楼层
回复【7楼】Gorgon Meducer 傻孩子
呵呵,别太较真,实际使用的时候往往不在乎前面的几个数据。
-----------------------------------------------------------------------

哦,呵呵,领悟了!

出0入0汤圆

发表于 2010-8-30 10:55:20 | 显示全部楼层
滑动窗口均值滤波法要求被采集对象变化不是很快;若主程序中还有其他任务需要占用较多的时间,则用查询方式并不适合,会出现“反应迟钝”现象,而中断方式相对来说要好些~~^_^

出0入296汤圆

发表于 2010-9-1 10:04:45 | 显示全部楼层
to 【9楼】 Notting_Hill 半壶水
    您说的对的,不过这个帖子没有讨论使用查询还是中断,而且原书的例子用的就是中断。
                                                                  ——特此吐槽

出0入0汤圆

发表于 2011-6-16 12:25:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-12-16 15:11:40 | 显示全部楼层
做下笔记!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 08:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表