计算角加速度 c#

本文关键字:角加速度 计算 | 更新日期: 2023-09-27 17:55:59

我有两点。每个点都有一个航向(度)和一个速度(米/秒)。

这些点来自GPS文件,并且有数千个。

我正在尝试消除文件中的故障,令人难以置信的不良数据。一种方法是计算出两点之间速度和航向变化的角加速度,如果超过某种阈值,则可以将该点从集合中消除为一段不良数据(GPS 中的峰值)。

当我的点相隔 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

计算角加速度 c#

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

如果同时输出两个时间步长的计算中间值,则可以看到更频繁地超过阈值的原因。 我在下面做了:

t 速度课程 估计估计 估计 估计 累积 估计 累积                              Velx vely (dt == 0.2) (dt == 1)0.000   12.070     135.460    8.466      -8.6030.200   12.280     138.940    8.066      -9.259     3.8430.400   12.640     141.800    7.817      -9.933     3.5930.600   12.540     142.970    7.552      -10.011    1.3790.800   12.510     146.130    6.972      -10.387    3.4571.000   12.800     149.940    6.412      -11.078    4.449            5.0921.200   12.920     154.970    5.466      -11.707    5.6751.400   12.960     157.070    5.049      -11.936    2.3801.600   13.120     163.380    3.753      -12.572    7.2211.800   13.240     167.680    2.825      -12.935    4.9812.000   13.140     172.360    1.747      -13.023    5.409            2.1692.200   13.150     178.020    0.454      -13.142    6.4902.400   13.380     181.650    -0.385     -13.374    4.3562.600   13.280     183.930    -0.910     -13.249    2.6992.800   12.520     188.070    -1.758     -12.396    6.0113.000   12.430     191.060    -2.385     -12.199    3.286            2.2773.200   11.960     196.150    -3.327     -11.488    5.9023.400   11.720     200.550    -4.114     -10.974    4.7013.600   11.170     204.740    -4.675     -10.145    5.0063.800   10.750     210.360    -5.433     -9.276     5.7684.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 倍,只是它的测量误差。