我有两点意见。每个点都有一个航向(度)和一个速度(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
答案 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倍,而只是测量误差。