2015-06-14 232 views
0

我有兩點。每個點有一個路線(度)和一個速度(米/秒)。計算角加速度c#

這些點來自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

您還可以嘗試使用'Math.Atan2'函數計算角度 – user287107

+0

如果沒有看到您的課程/速度數據的典型繪圖,就不能給出任何有意義的建議。 –

+0

「角速度和航向變化的角加速度」:下襬,你是什麼意思? –

回答

0

您還沒有計算加速,而是簡單地加速。更準確地說,你正在估計它的大小。最初,您估計使用dt == 1秒來估計d s/dt 。現在您使用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倍大,只是測量誤差。

+0

@DylanT這是回答這個問題嗎?如果是這樣,我會很感激,如果你[投票/接受](http://stackoverflow.com/help/someone-answers)。如果沒有 - 請留下評論,我會盡力解決。 –

+0

我只是在長時間休息之後纔回到這個問題。當我找到這個答案時,我正要重新發布這個問題。感謝您的明確解釋,並對我長期以來的迴應表示歉意!如果我在分析中所關心的是我的錯誤界限是否被超越,那麼在這種情況下將計算的數字除以5就足夠了? – dylanT

+0

@dylanT你的觀點越接近,你所期望的(大致)越多的噪音。實際上,在1秒間隔的點將平均隨時間的噪聲與在0.2秒的噪聲平均值。您可以合理地期望在更接近時間的情況下更多點數超過固定閾值。你想要做什麼取決於應用程序。如果您完全相信固定加速度閾值表示數據不正確,請將其丟棄。即使你拋出了0.2秒數據點的50%,即使所有點都是「好的」,你仍然會獲得比1秒數據好得多的數據。否則,玩閾值。 –