请教C:关于滑动平均

[复制链接]
2962|10
 楼主| haysion 发表于 2007-5-14 19:48 | 显示全部楼层 |阅读模式
数据是long型的,想做16次滑动平均,但ram不够,能实现么?
mohanwei 发表于 2007-5-14 20:46 | 显示全部楼层

那就不滑动……累加N,取平均。

滑动滤波就是这么耗RAM的了。<br /><br />用什么滤波方式,得看具体的模型,合适的就是最好的。
lbx_00 发表于 2007-5-14 20:59 | 显示全部楼层

ram不够?

寄存器区的许多地址是空闲的,可以用
computer00 发表于 2007-5-14 21:49 | 显示全部楼层

16*4=64字节也不是很多呀

  
 楼主| haysion 发表于 2007-5-15 10:19 | 显示全部楼层

我将几个long型的全局变量改成局部的,结果data不减,都是108

  
 楼主| haysion 发表于 2007-5-15 10:20 | 显示全部楼层

漏了说谢谢指点

不能读N次再取均值啊,那样程序运行起来就慢了,读的AD值就不够实时了&gt_&lt
computer00 发表于 2007-5-15 12:49 | 显示全部楼层

你的什么AD? 要32位这么高精度?

  
 楼主| haysion 发表于 2007-5-15 16:05 | 显示全部楼层

读到的数据是24位的,所以用了4字节的数据来储存......

  
mohanwei 发表于 2007-5-15 18:57 | 显示全部楼层

24位,3个字节就可以了。单片机,不能当PC来用的

有时候用一些非常规手段也是有必要的。把读取到的数据放到一个Byte数组里,然后取数的时候自己知道偏移量是3……
 楼主| haysion 发表于 2007-5-16 10:02 | 显示全部楼层

谢谢了,我试试改用3字节的联合体

#include&nbsp;&ltreg52.h&gt<br />#include&nbsp;&ltstdio.h&gt<br />#include&nbsp;&ltintrins.h&gt<br />#include&nbsp;&ltmath.h&gt<br /><br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br /><br />……&nbsp;&nbsp;//显示数组定义<br /><br />bit&nbsp;mod;<br /><br />union&nbsp;datam<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;all;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;byte[4];<br />};<br /><br />union&nbsp;datam&nbsp;zreg,&nbsp;freg;&nbsp;&nbsp;//zreg保存零点AD值均值,freg保存标称AD值均值<br />union&nbsp;datam&nbsp;dreg[10];&nbsp;&nbsp;//保存连续10次读取的AD值<br /><br />float&nbsp;slope;&nbsp;&nbsp;//保存AD值-重量函数的斜率<br /><br />……&nbsp;&nbsp;//端口、按键及子程序定义<br /><br />main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;count;&nbsp;&nbsp;//count用于计数<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;r_ad;&nbsp;&nbsp;//保存AD值的均值<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;d_ad;&nbsp;&nbsp;//保存所需显示的AD值均值<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;we;&nbsp;&nbsp;//we保存重量值<br />……&nbsp;//程序<br />……<br />}<br /><br />……&nbsp;//&nbsp;各子程序<br />……<br />……<br /><br />子程序中出现过的数据定义(各子程序用*号隔开表示):<br /><br />uchar&nbsp;i;<br />**************<br />uchar&nbsp;i;<br />uchar&nbsp;rdata&nbsp;=&nbsp;0;<br />**************<br />uchar&nbsp;i;<br />union&nbsp;datam&nbsp;gdata;<br />**************<br />uchar&nbsp;i;<br />unsigned&nbsp;long&nbsp;ave;<br />**************<br />uchar&nbsp;i;<br />**************<br />uchar&nbsp;i,&nbsp;da;<br />**************<br />uchar&nbsp;i;<br />**************<br />uchar&nbsp;i;<br />**************<br />unsigned&nbsp;long&nbsp;f;<br />**************<br />uchar&nbsp;i,j;<br />unsigned&nbsp;long&nbsp;ma;<br />**************<br />unsigned&nbsp;long&nbsp;m;<br />float&nbsp;w;<br />**************<br />uchar&nbsp;i;<br />**************<br />uchar&nbsp;i;<br />**************<br />uchar&nbsp;i;<br />unsigned&nbsp;long&nbsp;avera;<br />**************<br />uchar&nbsp;i,&nbsp;dis;<br />**************<br />uchar&nbsp;i;<br />**************<br />uchar&nbsp;i;<br />**************<br />uchar&nbsp;i;<br />**************<br />int&nbsp;t,&nbsp;h;<br />**************<br /><br />为什么程序的ram用到了108.1那么多?哪位大虾有空看看,或者给点意见^_^
xxdcq 发表于 2007-5-19 11:38 | 显示全部楼层

ram选得只要能装下滑动窗的宽度就可以了

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

25

帖子

0

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