计算角加速度c#

计算角加速度c#,c#,math,C#,Math,我有两点。每个点都有一个航向(度)和一个速度(米/秒) 这些点来自GPS文件,有数千个 我试图消除文件中的小故障,令人难以置信的坏数据。一种方法是计算两点之间速度和航向变化的角加速度,如果超过某种阈值,可以将该点作为一个坏数据(gps中的峰值)从集合中删除 当我的点之间相隔1秒时,这种方法效果很好,但现在我处理的点之间相隔不到1秒(通常为0.2秒),更有效的数据被标记为伪数据。我想知道我是否做错了什么 以下是我正在使用的代码: double radCourse2 = p1.Course*Ma

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

这些点来自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
速度路线
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.9199971154.9699965你不是在计算角加速度,而是在计算加速度。更准确地说,你是在估计它的大小。最初,您使用
dt==1
second来估计d2s/dt2。现在,您使用
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 t速度航向预估acc预估acc 水平(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倍,只是测量误差而已。

你也可以尝试使用
数学计算角度。Atan2
函数如果没有看到航向/速度数据的典型图,就无法给出任何有意义的建议。速度和航向变化的角加速度“:哼哼,你是什么意思?如果有人在直线上行驶,他们的速度从10米/秒跳到30米/秒,然后在3秒钟内又回到10米/秒,这将是一个不合理的加速,然后是一个不合理的减速。很容易在一条直线上锻炼。但是,如果有人以恒定速度行驶,但改变行驶角度(路线),这也会产生不合理的加速度。如果以10米/秒的速度飞行,你不能很快改变航向,从120度到190度再回到115度。我写这段代码已经很久了,我想知道是否缺少时间因素。以前,当它是基于通常相隔1秒的数据,这不是问题,但现在每秒5点,我得到更多的误报。我通过比较同一次旅行中的文件,以1s和.2s为间隔,检查了数据,结果并没有数量级的差异。(使用1s排列,我可能会得到5.5m/s2的计算加速度,使用.2s排列,我可能会在同一弯道中得到6.5m/s2的加速度),因此我怀疑我需要调整阈值而不是算法,但是…@DylanT这是否回答了问题?如果是的话,如果你愿意,我将不胜感激。如果没有-请留下评论,我将尝试解决。我只是在长时间休息后才回到这个问题。当我找到这个答案时,我正准备重新发表这个问题。谢谢你的明确解释,我很抱歉这么久才回复!如果我在分析中所关心的只是我的误差边界是否被跨越,那么在这种情况下,将计算出的数字除以5就足够了?@dylanT您的点越近,您期望的噪声(大致)就越大。实际上,1秒间隔的点是对噪声随时间的平均值,而不是0.2秒的平均值。你可以