寻找一数字脉冲滤波程序.

[复制链接]
4831|14
 楼主| qianlong30 发表于 2007-8-12 08:23 | 显示全部楼层 |阅读模式
我用PIC12F675,模拟采集数据,想加一滤波程序,AD四次后,去掉最大和最小值,中间两个数再取平均值,我的模数转换是10位的.<br />在内存中连续存放着4个10位的AD数值,滤波后把结果放在另一寄存器中.(用汇编不能用C)<br />我用汇编试了一下,感觉算法很乱,不清晰.<br />拜托谁能给个子程序或算法.&nbsp;&nbsp;&nbsp;&nbsp;<br />惭愧!&nbsp;&nbsp;(^_^)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
xieyuanbin 发表于 2007-8-12 12:13 | 显示全部楼层

滤波的建议

1.将AD结果设置为左对齐,比较时先比较高8位,这样在运行中可更快一点.<br />2.在取AD结果出来时就进行排序,排序方法,由于数据少,使用插入法即可.
hotpower 发表于 2007-8-12 13:22 | 显示全部楼层

没必要排序~~~

用4个变量即可.<br />1.求和寄存器,初值设置为0<br />2.最大值寄存器,初值设置为0<br />3.最小值寄存器,初值设置为0xffff.<br />4.滤波结果寄存器.<br /><br />滤波结果寄存器=(求和寄存器-最大值寄存器-最小值寄存器)/(N-2)<br /><br />其中:N为求和次数.
yewuyi 发表于 2007-8-12 20:32 | 显示全部楼层

俺写一个……

https://bbs.21ic.com/club/bbs/showEssence.asp?id=5817<br /><br />你自己看看了……
hotpower 发表于 2007-8-12 20:41 | 显示全部楼层

哈哈~~~再灌一次---排序太累~~~

  
yewuyi 发表于 2007-8-12 21:09 | 显示全部楼层

确实太累,但他喜欢这个搞,怎么办?

排序太浪费宝贵的CPU资源了……
xieyuanbin 发表于 2007-8-13 08:12 | 显示全部楼层

又见非典.

菜农,他只有4个数据,还是排序比较简单吧?<br />你的非典方法,偶也想过,不过对于4个数据来讲,未免有点牛刀的感觉.愿闻其详.
hotpower 发表于 2007-8-13 21:07 | 显示全部楼层

这种算法的优点是点数无限~~~(附"跳水算法")

当然N&gt=3.而且最好N&gt3为好.在N很大时就见其优点了.<br />例如:&nbsp;3中取1,4中取2,5中取3...10中取8...252中取&quot;二百五&quot;~~~<br />全部只用这4个寄存器~~~,当然要考虑累加越界类型选择的问题.<br />注意:&nbsp;N最好取4,&nbsp;6,&nbsp;10,&nbsp;34,&nbsp;66,&nbsp;130等等~~~!!!!!!!!!!!!!!<br /><br /><br />/*-----------------------------------------------------------<br />取ADC转换电压<br />------------------------------------------------------------*/<br />AdcResult&nbsp;=&nbsp;ADC&nbsp;&&nbsp;0x3ff;//取ADC转换电压结果<br />/*-----------------------------------------------------------<br />&nbsp;&nbsp;求累加和<br />------------------------------------------------------------*/<br />AdcSum&nbsp;+=&nbsp;AdcResult;//存累加和<br />/*-----------------------------------------------------------<br />&nbsp;&nbsp;求最大值<br />------------------------------------------------------------*/<br />if&nbsp;(AdcResult&nbsp;&gt&nbsp;AdcMax)<br />{<br />&nbsp;&nbsp;AdcMax&nbsp;=&nbsp;AdcResult;//最大值<br />}<br />/*-----------------------------------------------------------<br />&nbsp;&nbsp;求最小值<br />------------------------------------------------------------*/<br />if&nbsp;(AdcResult&nbsp;&lt&nbsp;AdcMin)//注意:千万不敢写成else&nbsp;if&nbsp;()...<br />{<br />&nbsp;&nbsp;AdcMin&nbsp;=&nbsp;AdcResult;//存最小值<br />}<br />AdcCount&nbsp;++;//计数1次<br />/*-----------------------------------------------------------<br />&nbsp;&nbsp;10中取8(&quot;跳水评分算法---去掉一个最高分,去掉...最后得分...&quot;)<br />------------------------------------------------------------*/<br />if&nbsp;(AdcCount&nbsp;&gt=&nbsp;10)//每次滤波10点<br />{<br />/*-----------------------------------------------------------<br />&nbsp;&nbsp;求平均值<br />------------------------------------------------------------*/<br />&nbsp;&nbsp;val&nbsp;=&nbsp;AdcSum&nbsp;-&nbsp;AdcMax&nbsp;-&nbsp;AdcMin;//自然做到了N-2,以下除法变移位<br />&nbsp;&nbsp;val&nbsp;*=&nbsp;AdcGain;//乘增益(一定要先乘后除!!!否则精度丢失!!!)<br />&nbsp;&nbsp;val&nbsp;&gt&gt=&nbsp;13;//10中取8后除以1024.(直接得到10进制的mV值)<br />&nbsp;&nbsp;AdcVal&nbsp;=&nbsp;val;//得到跳水队员分数~~~<br />/*-----------------------------------------------------------<br />&nbsp;&nbsp;下一轮初始化(也是ADC的初始化,这里原本是调用函数的~~~)<br />------------------------------------------------------------*/<br />&nbsp;&nbsp;AdcSum&nbsp;=&nbsp;0;//一定清0<br />&nbsp;&nbsp;AdcMax&nbsp;=&nbsp;0;//一定取最小值<br />&nbsp;&nbsp;AdcMin&nbsp;=&nbsp;0x3ff;//10位ADC,一定取最大值<br />&nbsp;&nbsp;AdcCount&nbsp;=&nbsp;0;//重新开始<br />}<br /><br />哈哈~~~有时间再灌灌它与排序的不同和优缺点~~~<br /><br />滤波曲线见下图~~~<br /><br /> 相关链接:<a href='http://www.**/blog/hotpower/41054/message.aspx'>http://www.**/blog/hotpower/41054/message.aspx</a>
2008WQZ 发表于 2007-8-14 08:11 | 显示全部楼层

有道理!!

  
hotpower 发表于 2007-8-14 12:15 | 显示全部楼层

什么道理???

  
xieyuanbin 发表于 2007-8-14 13:18 | 显示全部楼层

显然3个数据的确不好这样用.

3个数据去其2,就没平均的意义了.
hotpower 发表于 2007-8-18 01:39 | 显示全部楼层

哈哈~~~这里太凉快了~~~张教主走后更是如此~~~学学匠人吧~~~

张教主走后更是如此~~~
yewuyi 发表于 2007-8-18 10:29 | 显示全部楼层

凉快也未必不是什么坏事……

PIC的BBS到处都是,资料也都处都是,会用的人也都处都是,当然了,解密好象也到处都是,快有点像当年的89C51了……<br /><br /><br />太普及了,所以凉快点也正常……
dcp 发表于 2007-8-24 12:56 | 显示全部楼层

都忙着赚钱去了...

能不凉快吗?
xy_k8299 发表于 2011-3-13 16:09 | 显示全部楼层
东西便宜又实用,估计台面上凉快,下面热啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

150

主题

353

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部