打印

自创滤波,希望能免费收拾些砖头~哈哈

[复制链接]
3841|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jtgetja|  楼主 | 2007-1-6 10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自创滤波,希望能免费收拾些砖头~哈哈

#define COUN   50
static struct AccountVar{



  uint16 MeanCount; //平均值
  uint16 CountMax;//最大值
  uint16 CountOut;//数值输出

uint16 CountSimilar[10];//近似数值BUF

uint16 ADCCount[COUN];//读取AD值BUF
};


static struct AccountVar StAcVar;


/**********************
函数名称:ADC_CountAnalyse()
函数功能:平稳滤波
输入量:
输出量:
创建人:jtgetja
建立日期:2006-12-30
修改日期:2007-01-01
函数说明:由于湿敏电容在直流电下显电容特性,在交流电下主显电阻特性.
如果采用正弦波电路较为复杂成本高,因此采用方波测量但其电阻又显特性
因此设计了此法.估且称为"近拟值平均算法"
***********************/

uint16 ADC_CountAnalyse(void)
{
//#define ADC_Count_ERROR 30
//#define COUN   50

//typedef  StAcVar  ADCAn;
uint16 ADC_Count_ERROR; //声明误差值

uint8 Cou=0,Cou1=0,Cou2=0;//声明循环计数器
//uint16 TCount=0;


StAcVar.CountMax=0;
    
  for(Cou=0;Cou<COUN;Cou++)   
     {
     StAcVar.ADCCount[Cou]=ReadData_ADC();//读取50个AD值
     delay1N(10);                    //延时读取方波脉冲间隙
     if(StAcVar.CountMax < StAcVar.ADCCount[Cou]) StAcVar.CountMax=StAcVar.ADCCount[Cou];//选取最大值
     
     }    
    
    ADC_Count_ERROR=StAcVar.CountMax*0.05;//计出允许偏移量
    
  for(Cou=0,Cou1=0;Cou<COUN;Cou++)
     {
     if(((StAcVar.CountMax - StAcVar.ADCCount[Cou])<ADC_Count_ERROR))//先取偏移量内的近拟值
       {
        StAcVar.CountSimilar[Cou1]=StAcVar.ADCCount[Cou];//
        Cou1++;
        if(Cou1>10)//近拟值个数
        {
        //Serial_Transmit('A');
        break;
        //Cou1=0;
        
         
        }
       }
     }
  
  for(Cou2=0,StAcVar.MeanCount=0;Cou2<Cou1;Cou2++)
  {
  StAcVar.MeanCount=(StAcVar.MeanCount+StAcVar.CountSimilar[Cou2]);//总和近拟值
  }
  StAcVar.MeanCount=(StAcVar.MeanCount/Cou1);//近拟值平均
  if(Cou1>=4)StAcVar.CountOut=StAcVar.MeanCount;//选取近拟值多的平均值输出
  Serial_Transmit(Cou1);
  return (StAcVar.CountOut);//返回输出数

}

此法创立了该湿敏电阻测量(稳定,精确度上的)的新历史.该法只适合对数据连续性\和速度不高的场合
希望能给有需要的朋友有所帮助.
同时发现不足之恳请给予批正谢谢!
欢迎交流,讨论:
powqeras620@21cn.com

相关帖子

沙发
gtw| | 2007-1-6 12:25 | 只看该作者

看起来比较又创意

但能不能说说大体的原理或思想?
电路是什么样的?

使用特权

评论回复
板凳
jtgetja|  楼主 | 2007-1-27 21:05 | 只看该作者

对不起一直没时间上网~~原理:平稳滤波


 1、先读取30个不为零的BUF,滤出最大值。
 2、计算出最大值与最允许误差值。
 3、取10个近拟值。
 4、平均近拟值。
 5、先取近拟值多的作为输出。

   如果图红色部分。当采拾到电容作用部分时显然近拟值的个数就少。反而然之越多就说明越采拾越好。滤去了不想要的那一部分。

使用特权

评论回复
地板
jtgetja|  楼主 | 2007-1-27 21:18 | 只看该作者

对不起一直没时间上网~~原理:图片

原理:图片
怎么加了IMG 倒发不了呢??不知道能不能看到?[img]C:\waver.JPG[/img]

使用特权

评论回复
5
conwh| | 2007-1-27 22:41 | 只看该作者

图片在你硬盘里C:/waver.JPG

使用特权

评论回复
6
jtgetja|  楼主 | 2007-1-29 08:25 | 只看该作者

一幅都看不到吗?

使用特权

评论回复
7
yewuyi| | 2007-1-29 09:27 | 只看该作者

先坐会儿再看……

使用特权

评论回复
8
emailli| | 2007-1-29 10:20 | 只看该作者

倒!

这个也叫自创啊!

一个极度浪费时间&空间的平均值算法。也可以叫自创啊!

使用特权

评论回复
9
jtgetja|  楼主 | 2007-2-9 16:19 | 只看该作者

emailli : 这个的确是自创的.也的确很浪费空间.

看来emailli 老兄有很好的方法哦!给我学习学习.

减少读取的临时BUF.些来我也改了些先算出相同值再算.M88的AD当取样频高时读到的数据就偏低.

使用特权

评论回复
10
yewuyi| | 2007-2-10 09:03 | 只看该作者

呵呵,我看的有点希里糊涂……

函数说明:由于湿敏电容在直流电下显电容特性,在交流电下主显电阻特性.
如果采用正弦波电路较为复杂成本高,因此采用方波测量但其电阻又显特性
因此设计了此法.






你用PWM驱动,不就已经是交流驱动了吗?

你那兰色的要采样部分,你是通过什么方法确定时间点启动AD?PWM速度很快,MCU带的AD无法采集这么高速的信号把?

使用特权

评论回复
11
emailli| | 2007-2-10 11:33 | 只看该作者

倒!

什么叫自创?

自创,拆开来说,第一要是自己弄出来的,第二是要创造性的。

你这个是自己弄出来的没有错。

但是创造性就不见得有!

另外,我也没有什么好方法,我的方法是学来的,不敢说自己的!

有一本外国佬写的《自适应滤波》一书理论性很强。还在学习消化中。

目前自己编写的滤波程序比你的也不见得好很多!大家都差不多的水平!

使用特权

评论回复
12
SeaSun| | 2009-8-6 19:55 | 只看该作者
好像运算量大了点,MCU一般资源很紧张。

使用特权

评论回复
13
vwwj| | 2009-8-6 23:25 | 只看该作者
湿敏电容一般用555转成频率来测量

使用特权

评论回复
14
sz_kd| | 2009-8-7 14:27 | 只看该作者
就是取30个数据中比较多在相同范围内的数据作平均输出

使用特权

评论回复
15
badbird1234| | 2009-8-7 16:41 | 只看该作者
此法创立了该湿敏电阻测量(稳定,精确度上的)的新历史.该法只适合对数据连续性\和速度不高的场合


兄弟我无语了别膨胀了
看了就是复合滤波吗

使用特权

评论回复
16
mohanwei| | 2009-8-7 16:48 | 只看该作者
其实数据只要稳,任何滤波方法都能得到很好看的读数

使用特权

评论回复
17
yewuyi| | 2009-8-7 17:00 | 只看该作者
TO 老王:
张宾何许人也?做湿敏元件的吗?

使用特权

评论回复
18
程序匠人| | 2009-8-7 17:10 | 只看该作者
大概看明白了。“消抖滤波”+“平均滤波” ,略加变形。

使用特权

评论回复
19
teddeng| | 2009-8-7 21:58 | 只看该作者

使用特权

评论回复
20
zhcj66| | 2014-12-22 16:18 | 只看该作者
王奉瑾 发表于 2009-8-7 16:55
21IC上只有张宾是湿敏器件的专家..

请推荐一下那个是他本人

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

26

帖子

0

粉丝