智能车制作

标题: 关于卡尔曼滤波时间的问题,求教~~~ [打印本页]

作者: 残爱冰    时间: 2013-4-20 23:42
标题: 关于卡尔曼滤波时间的问题,求教~~~
本帖最后由 残爱冰 于 2013-4-20 23:44 编辑

我的卡尔曼滤波要花费3ms的时间,总线频率48M,我查了下,主要是acc_th = asin(acc_z)*57.296;这条语句
要2.8ms的时间!!如果我去掉ad_read();的话,相当于acc_th = asin(acc_z)*57.296;中的acc_z为常数,那么这条语句花费的时间就是30us。可是我保留ad_read();,直接令acc_th = asin(acc_z)*57.296;中的acc_z为常数,那么这条语句花费的时间就又是2.8ms,到底怎么回事啊??我看有人用的是反正切函数求的角度,我的acc_z计算值没有超出-1~1,这个asin()函数是double类型的形参,这个有问题吗?是不是建立工程的时候要勾选什么?可为什么去掉ad_read();的时候不会 啊?去掉ad_read();的话acc_z的值就超出-1~1了啊,结果直接就错了啊,所以它花费的时间才短??我想这个asin函数本身不要这么长的执行时间吧?建立工程的时候我只勾选了“float use 32,double use 64”,还要勾选什么吗?求救~~~~~~~~~~~~~~~
ad_read();    //采集ad值

voltage = ad_value[2]*1.2207;    //Voltage = ad_value/4096*5*1000 mV
  gyr_xw = (voltage-1690)/0.67/5.1; //灵敏度0.67,放大5.1倍     
  
voltage = ad_value[0]*1.2207;
  acc_z = (voltage-1477)/800.0;    //灵敏度为800mv/g
  acc_th = asin(acc_z)*57.296;


作者: 残爱冰    时间: 2013-4-20 23:43
忘了附上程序了
ad_read();    //采集ad值

        voltage = ad_value[2]*1.2207;    //Voltage = ad_value[i]/4096*5*1000 mV
  gyr_xw = (voltage-1690)/0.67/5.1; //灵敏度0.67,放大5.1倍     
  
        voltage = ad_value[0]*1.2207;
  acc_z = (voltage-1477)/800.0;    //灵敏度为800mv/g
  acc_th = asin(acc_z)*57.296;
作者: seakid    时间: 2013-4-20 23:52
用这么多浮点数。。还三角函数。一大堆double才不到3ms。
庆幸吧,兄弟。
作者: 残爱冰    时间: 2013-4-21 09:40
seakid 发表于 2013-4-20 23:52
用这么多浮点数。。还三角函数。一大堆double才不到3ms。
庆幸吧,兄弟。

可以不用float么?怎么弄啊?
作者: wen123    时间: 2013-4-21 11:10
残爱冰 发表于 2013-4-21 09:40
可以不用float么?怎么弄啊?

先放大再用位运算缩小就可以了
作者: 残爱冰    时间: 2013-4-21 13:40
seakid 发表于 2013-4-20 23:52
用这么多浮点数。。还三角函数。一大堆double才不到3ms。
庆幸吧,兄弟。

问题已经解决了,不是浮点数的问题,因为我前面也用到好多浮点数,总的时间才几十us,但asin()一条语句就是几ms,说明浮点数的时间不至于消耗ms以上,还是谢谢你,你们站起来没?
作者: 残爱冰    时间: 2013-4-21 13:41
wen123 发表于 2013-4-21 11:10
先放大再用位运算缩小就可以了

谢谢,问题已解决,是工程问题
作者: zhangguanghui    时间: 2013-4-27 13:21
残爱冰 发表于 2013-4-21 13:41
谢谢,问题已解决,是工程问题

楼主你是怎么解决的求指导?

作者: 残爱冰    时间: 2013-4-27 18:55
zhangguanghui 发表于 2013-4-27 13:21
楼主你是怎么解决的求指导?

建立工程时要勾选“use float....”
作者: zhangguanghui    时间: 2013-4-27 20:08
残爱冰 发表于 2013-4-27 18:55
建立工程时要勾选“use float....”

float use 32,double use 64这个?





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2