做过数字滤波的高手请进,急。。。(200分)

  • 主题发起人 主题发起人 nanshan
  • 开始时间 开始时间
N

nanshan

Unregistered / Unconfirmed
GUEST, unregistred user!
我用COM口时时接收一组数字,而这组数字是不稳定的,比如现在是100,那它会输出102、101、100、101、99、98、100,就是输出的数字不是很稳定,但他最大上下浮动不会超过3,我想用程序来稳定它,请问有什么好的办法,请给出个主意。
 
建一个数组,记录接收到的数字,再求其平均值。数组越大,平均数就越稳定。
 
现在就是这样,但数据传输为200MS一次数组10组以上就开始反应慢,太慢了不能接受呀,有没有其他好的办法
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=328598
看看这个,可能对你有帮助
 
这可能是你的算法问题,试一试以下的算法:
Const Max = 100;
List :array [0...Max ] of integer;//数组大小自己定。
NextIndex:integer;
ListCount:integer;
Sum:integer;
//全部变量(包括数组)都要初始化为0;

Function Avg(NewItem:integer):integer
begin
//修改有效数字数量
if ListCount < Max then
Inc(ListCount);
//求数组和
Sum :=Sum+ NewItem -List[NextIndex] ;
//记录新数据
List[NextIndex]:=NewItem ;
//设置下一个读写位置
inc(NextIndex); 
if NextIndex = Max then
NextIndex:=0;
//返回平均值
Result := Round(Sum/ListCount) ;
end;
 
好像也不是一个很好的办法,应该有一个巧妙的办法,想一些仪表开发的时候都能做的很稳定,一定还有好办法。请大家继续讨论。。。
 
个人认为。这种方法是最好的,因为数组的大小与计算量是无关的。如果真有更的好办法,呵呵,那可要认真学习了。
对此问题,关注中。。。。。。。。。。
 
呵呵,我经常干这事,下位机过来的数据不稳定,要在软件上修正,
最简单的方法当然是求平均喽,几组平均的问题,组数越多,数据越一致。
RealData: array[1..10] ofdo
uble;
记录前10组数据,当前数据取前10组数据的平均值。
还有把特殊数据过滤掉,明显不对的数据剔掉。
 
信号线上加个小电容,电子滤波
 
to myhby:
呵呵,兄弟原来是做硬件的吧?这么强。
 
电压取值范围在1微伏到30毫伏就不是用小电容能干的了的呀。我现在是每次至少8组,每秒5次
 
这是采用的COM控件及发送数据设备不稳定,与程序无关。
如果必须用程序来稳定也是一个相对的数据,但这个数据不一定是对的。所以建议你从数据采集上加强。
技术交流QQ:136293586
 
lz数学没学好呀,
既然
但他最大上下浮动不会超过3:
那么这样:
从数组里随机取2个数求平均,做为这组数据的平均值。
微观上会有差错,但是从统计的角度上看,则会符合。
//如果误差允许范围比较大(1.5%-2%以内,),估计甚至直接取出1个数作为平均值也可。
//误差范围的计算方法你找一找吧。商品的合格率的检测就和这个原理差不多,不用
//全部计算的。
//注意计算不要采用浮点数。都用整形。浮点数计算需要的时间是整形的N倍
 
多人接受答案了。
 
后退
顶部