计算角加速度c#

时间:2015-06-14 10:16:25

标签: c# math

我有两点意见。每个点都有一个航向(度)和一个速度(m / s)。

这些点来自GPS文件,其中有数千个。

我正在尝试消除文件中的毛刺,这些令人难以置信的糟糕数据。这样做的一种方法是计算两点之间的速度和路线变化的角加速度,如果它超过某种阈值,你可以将该点中的点作为一个坏数据消除(一个尖峰)在gps中。)

当我的分数相差1秒时,这很好用,但现在我处理的间隔小于1秒(通常为0.2秒),更多有效数据被标记为虚假。我想知道我是否做错了什么?

以下是我使用的代码:

  double radCourse2 = p1.Course*Math.PI/180;
  double radCourse1 = p2.Course*Math.PI/180;
  double vel1X = Math.Abs(p1.Speed*Math.Cos(radCourse1));
  double vel1Y = p1.Speed*Math.Sin(radCourse1);
  double vel2X = Math.Abs(p2.Speed*Math.Cos(radCourse2));
  double vel2Y = p2.Speed*Math.Sin(radCourse2);
  // secs is normally -1, but now sometimes -.2
  double secs = p1.CreationTime.Subtract(p2.CreationTime).TotalSeconds;

  double accX = (vel2X - vel1X)/secs;
  double accY = (vel2Y - vel1Y)/secs;

  // If p2.Acceleration is above about 5.5, then it is too fast.
  p2.Acceleration = Math.Sqrt(accX*accX + accY*accY);

  // Adjusting for deceleration vs acceleration
  if (p1.Speed > p2.Speed)
    p2.Acceleration *= -1;

示例数据。根据上面的代码,目前三条标记的线条已经超出界限。

Speed   course
12.06999973 135.459997
12.27999973 138.9399969
12.63999972 141.7999968
12.53999972 142.9699968
12.50999972 146.1299967
12.79999971 149.9399966
12.91999971 154.9699965 <--
12.95999971 157.0699965
13.11999971 163.3799963 <--
13.2399997  167.6799963
13.13999971 172.3599961
13.14999971 178.019996 <--
13.3799997  181.6499959
13.2799997  183.9299959
12.51999972 188.0699958
12.42999972 191.0599957
11.95999973 196.1499956
11.71999974 200.5499955
11.16999975 204.7399954
10.74999976 210.3599953
10.19999977 215.2699952

1 个答案:

答案 0 :(得分:0)

您不是在计算角度加速度,而只是计算加速度。更准确地说,您正在估计它的大小。最初,您使用dt == 1秒估算d 2 s / dt 2 。现在,您使用dt == 0.2秒估算相同的数量。

如果使用两个时间步输出计算的中间值,则可以更频繁地查看超出阈值的原因。我已经完成了以下工作:

t       Speed      course     Estimated  Estimated  Estimated acc   Estimated acc
                              velx       vely       (dt == 0.2)     (dt == 1)

0.000   12.070     135.460    8.466      -8.603
0.200   12.280     138.940    8.066      -9.259     3.843
0.400   12.640     141.800    7.817      -9.933     3.593
0.600   12.540     142.970    7.552      -10.011    1.379
0.800   12.510     146.130    6.972      -10.387    3.457
1.000   12.800     149.940    6.412      -11.078    4.449            5.092
1.200   12.920     154.970    5.466      -11.707    5.675
1.400   12.960     157.070    5.049      -11.936    2.380
1.600   13.120     163.380    3.753      -12.572    7.221
1.800   13.240     167.680    2.825      -12.935    4.981
2.000   13.140     172.360    1.747      -13.023    5.409            2.169
2.200   13.150     178.020    0.454      -13.142    6.490
2.400   13.380     181.650    -0.385     -13.374    4.356
2.600   13.280     183.930    -0.910     -13.249    2.699
2.800   12.520     188.070    -1.758     -12.396    6.011
3.000   12.430     191.060    -2.385     -12.199    3.286            2.277
3.200   11.960     196.150    -3.327     -11.488    5.902
3.400   11.720     200.550    -4.114     -10.974    4.701
3.600   11.170     204.740    -4.675     -10.145    5.006
3.800   10.750     210.360    -5.433     -9.276     5.768
4.000   10.200     215.270    -5.890     -8.328     5.261            4.346

这会显示您突出显示的值超过任意5.5阈值,但在时间步长较长的计算中,将忽略所有中间值。因此,例如,在t == 1.0和t == 2.0之间的第二个时刻,在0.2秒的时间步长有两个超过阈值的值。但是,在1秒的时间步长内,估计值远低于该时间步长的阈值。

如果每次测量的噪声是随机的并且其幅度与测量间隔(dt)无关,那么dt越小,估计加速度的预期误差就越大,因为你正在划分通过一个小得多的数字,所以如果你将dt减少五分之一,那么你的错误要大5倍。注意 - 这并不意味着您希望加速度的绝对值大5倍,而只是测量误差。