计算角加速度 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
您不是在计算角加速度,而只是在计算加速度。 更准确地说,您正在估计它的大小。 最初,您使用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 倍,只是它的测量误差。