搜索
bottom↓
回复: 18

[共享]C语言代码模板_实现滑动窗口滤波

[复制链接]

出0入296汤圆

发表于 2008-1-26 02:35:46 | 显示全部楼层 |阅读模式
RD_TPL_Avr_Window.h
--------------------------------------------------------------------

#ifndef _USE_TPL_AVRAGE_WINDOW_H_
#define _USE_TPL_AVRAGE_WINDOW_H_
/***********************************************************
*   模板库说明:滑动均值滤波窗口代码模板                   *
*   版本:      v1.00                                      *
*   作者:      王卓然                                     *
*   创建日期:  2007年12月4日                              *
* -------------------------------------------------------- *
*  [支 持 库]                                              *
*   支持库名称:RD_MacroAndConst.h                         *
*   需要版本:  v0.04 &abv                                 *
*   支持库说明:系统常用宏定义库                           *
* -------------------------------------------------------- *
*  [版本更新]                                              *
*   修改:                                                 *
*   修改日期:                                             *
*   版本:                                                 *
* -------------------------------------------------------- *
*  [版本历史]                                              *
* -------------------------------------------------------- *
*  [使用说明]                                              *
***********************************************************/

/********************
* 头 文 件 配 置 区 *
********************/
# include "RD_MacroAndConst.h"

/********************
*   系 统 宏 定 义  *
********************/

/*------------------*
*   常 数 宏 定 义  *
*------------------*/
# define START_DEFINE_WINDOW(Name,__SIZE_BIT,__TYPE,__PosTYPE,__TotalTYPE)    \
            __TYPE ADTW_##Name##_Buffer[BIT(__SIZE_BIT)] = {0};\
            __PosTYPE ADTW_##Name##_Position = 0;\
            __TotalTYPE ADTW_##Name##_Total = 0;\
            __TYPE ADTW_##Name##_Value = 0;\
            __TYPE ADTW_##Name##_Process(__TYPE Data)\
            {\
                __TYPE TempData = ADTW_##Name##_Buffer[ADTW_##Name##_Position];\
                ADTW_##Name##_Total += Data;\
                ADTW_##Name##_Total -= TempData;\
                ADTW_##Name##_Buffer[ADTW_##Name##_Position] = Data;\
                \
                ADTW_##Name##_Position++;\
                ADTW_##Name##_Position &= BIT(__SIZE_BIT)-1;\
                ADTW_##Name##_Value = ADTW_##Name##_Total >> (__SIZE_BIT);\
                return TempData;\
            }
# define END_DEFINE_WINDOW

# define EXCHANGE_DATA_WITH_ADT_WINDOW(Name,Data)  ADTW_##Name##_Process(Data)
# define EXTERN_REFERENCE_ADT_WINDOW(_NAME,__TYPE)    __TYPE ADTW_##_Name##_Process(__TYPE Data);
# define GET_WINDOW_AVERAGE(__NAME)    __TYPE ADTW_##Name##_Value


/*------------------*
*   动 作 宏 定 义  *
*------------------*/

/********************
*  用户变量类型定义 *
********************/

/********************
*    结构体定义区   *
********************/

/********************
*   函 数 引 用 区  *
********************/


/********************
*   全局变量引用区  *
********************/

#endif

出0入296汤圆

 楼主| 发表于 2008-1-26 02:46:37 | 显示全部楼层
假设我们需要使用滑动窗口来实现AD滤波,首先应该声明一个窗口,名叫OurWindow,大小为BIT(4)即16。因为AD最大值为1023,所以16个1023不会超过65535,我们可以用一个UINT16型变量来存储总合,用一个UINT8型的变量来记录窗口指针,于是有以下的声明:

START_DEFINE_WINDOW(OurWindow,4,UINT16,UINT8,UINT16)
END_DEFINE_WINDOW

使用的时候,利用宏EXCHANGE_DATA_WITH_ADT_WINDOW来存储新数据,返回旧数据

EXCHANGE_DATA_WITH_ADT_WINDOW(OurWindow,ADC);

用宏GET_WINDOW_AVERAGE来获取平均值
GET_WINDOW_AVERAGE(OurWindow)

如果想在模块外部使用该结构,需要在.h文件中放置以下的内容
EXTERN_REFERENCE_ADT_WINDOW(OurWindow,UINT16)

希望大家喜欢

出0入0汤圆

发表于 2008-1-26 08:38:14 | 显示全部楼层
这不会是VC吧……这些是不是用在AVR里的吧,“滑动窗口来实现AD滤波”,感觉有些怪

出0入0汤圆

发表于 2008-1-26 09:26:36 | 显示全部楼层
好东西!

出0入0汤圆

发表于 2008-1-26 11:41:50 | 显示全部楼层
看不懂,最好能详细解释,配例子讲解

出0入296汤圆

 楼主| 发表于 2008-1-26 14:17:51 | 显示全部楼层
这些都是C代码,用在AVR开发中,以代码效率为设计目标。详细的讲解在楼顶的DEMO中有(第二篇 第四章电量低 中偏后的位置)

出0入0汤圆

发表于 2008-1-27 00:31:55 | 显示全部楼层
最喜欢傻孩子的东东啦,谢谢~~

出0入0汤圆

发表于 2008-1-29 08:36:53 | 显示全部楼层
感觉挺好

出0入296汤圆

 楼主| 发表于 2008-2-21 14:35:44 | 显示全部楼层
以下蓝色文字由版主:Gorgon Meducer 于:2008-02-21,14:35:44 加入。
<font color=black>请发贴人注意:
本贴放在这分区不合适,即将移走
原来分区:[1000]AVR (原ourAVR.com) 技术论坛
即将移去的分区:[1038]傻孩子(Gorgon Meducer)专栏
移动执行时间:自本贴发表0小时后

任何的疑问或咨询,请可随时联系站长。谢谢你的支持!
</font>

出0入0汤圆

发表于 2009-3-8 00:54:17 | 显示全部楼层
学习中~~

出0入0汤圆

发表于 2009-3-8 08:20:37 | 显示全部楼层
jh

出0入0汤圆

发表于 2010-11-28 18:41:39 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-11-28 19:03:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-28 19:05:31 | 显示全部楼层
标记

出0入0汤圆

发表于 2010-11-28 19:27:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-26 12:06:24 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-10-26 13:07:34 | 显示全部楼层
mark

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-1 11:56

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

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