題:
為什麼自行車計算機會準確地計算出距離,但平均速度卻不正確?
amcnabb
2013-08-07 04:30:58 UTC
view on stackexchange narkive permalink

我本來可靠的非GPS自行車計算機計算出我的上下班時間的平均速度極其不准確。今天早上騎完車後,我從顯示屏上讀取了以下值(單位為英里和每小時的英里數):

  • 行程距離:1.70
  • 行程時間:00 :06:29
  • 平均速度:16.47
  • 最大速度:23.86

但是,實際平均速度為:1.7 /(6 / 60 + 29/3600)= 15.73。報告的值下降了近5%。這讓我感到困擾,因為我喜歡設定目標來提高平均速度(對於我的由交通信號燈強制執行的“間隔訓練”),但是這種不准確性高於我達到的0.5 mph增量。會假設自行車計算機將簡單地通過將“行程距離”除以“行程時間”來計算平均速度嗎?

(略有相關:為什麼不按距離計算平均速度?

您的計算機會停止計數嗎?即:“旅行時間”是總時間,而“乘車時間”是否位於其他地方?平均速度和平均移動速度之間存在差異。
它確實停止了停止時的累積時間,但是也停止了停止時更新平均速度。因此,據我所知,“行程時間”和“平均速度”應該是移動時間和平均移動速度。
我說,如果它想告訴我我的工作速度快於我的實際速度,那麼我就不會對此爭論。
這是什麼類型的計算機? GPS,GPS +傳感器還是只是好的舊計算機?也許可以幫助找到差異的根源。我認為GPS +傳感器是最精確的傳感器,它可以校準車輪尺寸。 GPS僅可能會像在隧道內一樣容易丟失信號。這總是會提高我的平均速度,因為它以為我在隧道的起點停了下來,而以光速到達終點。
我編輯過的@imel96提到這是一台非GPS自行車電腦。
決定停止移動需要多長時間?一秒?五?僅此一項就會帶來5%的誤差。
@CareyGregory,但是如果由於這個原因,它將使平均速度降低到比您預期的低,而不是更高。
@amcnabb我不認為製造商有論壇嗎?你可能會有些高興地問。我從Garmin自己的論壇中找到了很多有關Garmin的工作方式的信息
三 答案:
user36129
2013-08-07 17:35:31 UTC
view on stackexchange narkive permalink

好的,這實際上需要一些有關這些小型計算機內部工作方式的知識。自行車計算機需要非常低的功率,因此最簡單的方法就是使其變得非常簡單。普通計算機可以使用非整數。整數是1,2,3,4等,非整數表示例如1 / 2、0.5762或pi。計算機使用所謂的浮點數表示非整數。

但是,與整數相比,這些小型計算機很難使用浮點數。所以,他們沒有!它們僅使用整數來進行所有必要的計算,並且幾乎沒有例外,它們都限於8位整數。 8位整數可以存儲0-255的值。因此,任何計算都將(a)不比整數更精確(例如:將8除以5將得到1而不是1.6,因為您不能表示小數點後的數字),並且(b)不能超過0的範圍-255。

更糟糕的是:大多數自行車計算機甚至無法進行數學運算。好吧,它們通常可以相加和相乘,但不能相除或相減。它們真的是超級裸露的東西,因為它們必須在單個鈕扣電池中的果汁中存活幾年。

那麼,這如何影響距離,速度以及最終平均速度的計算?好的,一台自行車計算機只有2個輸入:一個非常精確的計時器(通常每秒輸出1024至32768個脈衝)和一個來自車輪上磁鐵的脈衝輸入。它還知道您的車輪圓周多長。因此,為了計算您的當前速度,它會執行以下操作:

  • 等待車輪上的脈衝
  • 啟動計時器
  • 下一個車輪脈衝到來時,停止計時器
  • 將您的車輪周長除以時間,並使用查找表將其轉換為人類可讀的內容。

因此,假設計時器運行在1024Hz,並且您的自行車車輪以每秒大約5轉的速度旋轉(36 km / h或22mph)。這意味著您將計算地板(1024/5)= 204每轉一圈的計時器滴答數。在小型處理器中,是一個查找表,該表將這204個滴答聲與您的特定車輪尺寸(您在其中編程)相關聯,然後查找需要在屏幕上顯示的速度。它實際上並沒有計算出來,因為該處理器很難做到這一點。此外,該表僅需是一對車輪尺寸的幾十個或100個不同的時間值。例如5x100的表格,從計算機角度來說很小。

距離很容易計算:只需將輪周長乘以轉數即可。然後,使用另一個查找表將其與可顯示的內容相關聯。這也只需要一個小的查詢表。

但是,平均速度並不是可以放入合理大小的查詢表中的。可能發生的跳閘距離和跳閘時間值太多。因此,這些計算機必須以某種方式作弊:要么需要使用非常有限的數學功能,要么需要四捨五入或尋找最接近的平均值。這正是您的自行車計算機正在做的事情。

尤其是在當今,有更先進的自行車計算機。使用較舊的設計時,您確實可以看到此操作的查詢表性質:例如,它可以顯示22.3 km / h和22.5,但不顯示22.4。為什麼?它不在查找表中。無論您多麼努力地以22.4 km / h的速度精確行駛,它都不會真正顯示該值。同樣,較舊的設計將只允許您輸入輪胎的英寸尺寸,而不是實際的精確周長(mm)。

如今,實際上有一些自行車計算機可以處理更多的“複雜”數學運算,並使用更好的數字表示形式(16位整數或浮點數)來更好地估算速度和平均值。

這個答案在解釋自行車計算機中處理的局限性方面做得非常出色。但是我認為平均水平可能還需要更多,因為自行車計算機顯示平均速度以0.1 mph的速度變化,但誤差遠高於此。是否有某種方式可以使用查找表來查找離散時間間隔中的平均速度,然後通過某種“欺騙”方式將它們組合起來?
當然,這些計算技巧可能會有數以千計的排列,可能會計算平均值。我寫了這個答案來傳達這些計算機是如何“作弊”的,但是這種計算的具體作弊手段並不是一成不變的。
我不確定我是否喜歡您關於使用查找表進行除法的假設。進行必要的簡單除法以將平均速度計算為3位數字是完全在簡單微處理器的能力範圍內的。在這種情況下,很有可能是草率的編程,或者正在使用某種“運行平均”方法。
我應該進一步闡明(並隨時以某種有意義的方式對其進行編輯):我只是試圖傳達這些處理器為達到絕對最低功耗所做的“作弊”類型。查找表比ALU的能效要高得多。尤其是在較早的設計中,這些東西甚至都沒有任何計算方法,它們只有計數器和查找表-用非常少的晶體管實現。我並不是在說所有自行車計算機現在都是這樣工作的,而是在試圖讓人們了解這些設備的思維方式。
@user26129您說它不能做減法。我什至不確定較大的cpus是否具有硬件減法,因為您可以通過將數字的二進制補碼相加來減去。而且,即使高端risc cpus也沒有(不?)具有除法運算。我看不到如何看到“操作的查詢表性質”。如果模擬了浮點數(使用8位整數),它仍然會顯示您所描述的行為,這就是浮點數的本質。即使在較大的cpu中,它的行為也是如此,只是不太明顯。
這確實是一個完全不同的主題的問題,但是我不能減法的具體含義是,這些計算機甚至沒有正確意義上的算術單元。對他們來說,做一次增量就足夠了,就像最基本的ALU通過重複加法進行乘法一樣。因此,從技術上講,它們不能進行加法運算,並且不能進行減法運算。但是,您不能使用整數進行浮點運算,這與任何類型的整數算術運算都有很大不同。
實際上,幾種有限的指令集計算機設計只能相減,不能相加。
@DanielRHicks嗯...這完全取決於您在做什麼。從晶體管級的角度來看,遞減計數器和遞增計數器(這就是我們所說的)同樣複雜。
dbr
2013-08-08 15:20:56 UTC
view on stackexchange narkive permalink

我會懷疑平均速度計算的數值精度不足,原因是其他答案中有詳細說明的所有原因(本質上是使電池持續使用很長時間)

例如,可以說距離以米為單位存儲,時間以秒為單位,例如:

  distance = int(1.7 * 1000)#in metrestime = int(6 * 60 + 29)#以秒為單位 

如果我想在不使用浮點計算的情況下計算平均速度,我的第一次嘗試可能是:

 (distance * 10 // time * 10 * 36)/(10 * 10 * 10)#結果:15.48#`36`是(60sec * 60sec)* 1000m以轉換為m / s至km / h,乘以10  

..這將導致值為15.48 km / h。嵌入式設備可能會以完全不同的方式執行計算並具有不同的局限性,但這表明了普遍的問題

將其與等效的浮點數進行了比較:

  float(distance) / float(time)* 3.6#結果:〜15.732  

(注意:以上計算是在Python 3中完成的, / 是float除法, // 是整數除法。)

但這是錯誤的方向:@amcnabb根據測得的距離和時間計算出的平均速度為15.73。平均為16.47。計算機計算的速度,該速度大於平均速度。計算“手工”。在您的示例中,整數計算會使情況更糟。
@BenediktBauer糟糕,感謝您發現我的,錯誤的數字閱讀障礙。編輯問題以澄清這一點
Benedikt Bauer
2013-08-08 15:15:32 UTC
view on stackexchange narkive permalink

我認為線索在於您騎行的短距離,因為如果距離短但長距離或多或少會消失,則計算機工作方式中會有兩個不確定性點,它們會產生很大的影響。

如果您現在停下自行車,計算機可能會有些尷尬因為它等待著經過的磁鐵發出的下一個脈衝,由於車輪不再旋轉,它永遠不會出現。您可以在計算機的跳閘計時器上觀看此刻,因為秒錶的秒數仍在計時約3-5秒,儘管您已經站立了。這是計算機等待下一個衝動到來而沒有得到的時候。

在這裡它有點投機性:我想您的計算機基本上有兩個計數器,一個用於車輪旋轉數和一個旋轉所需的時間,而跳閘時間在單獨的計數器上運行,該計數器僅用於輸出時間,但未計入計算。旋轉時間計數器(RTC)和秒錶計數器(SWC)之間的區別在於,RTC僅包含計算機可以確定車輪正在轉動的時間,而SWC還包含計算機正在等待的時間如果車輪仍在轉動。由於自行車計算機主要是為更長的行程而設計的(通常您不會每五分鐘停車一次),因此這種差異不會對您造成太大的影響,但是對於您來說,測量時間非常短,可能會產生很大的影響。 / p>

如果從計算機的平均使用時間恢復到應該使用的時間,則將獲得6分12秒,這與計算機的運行時間相差17秒。您寫了一些有關“交通輕度間歇訓練”的文章,所以我想您必須停止其中的一些。現在,如果您假設您的旅行時間每停一站大約要多花費3到5秒鐘,那麼只需要3到5停就可以得到時差。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...