R Roam 取得 Roam

GPS 爬升為什麼算不準,氣壓計又補上了什麼

垂直方向是衛星接收器最弱的一項,而爬升的加總方式,會把這個弱點放大成一個很大、而且永遠往上的誤差。為什麼氣壓感測器是更適合的儀器,以及它自己會在哪裡失手。

你沿著河堤騎了一圈平路。App 告訴你,你爬升了四百公尺。你這趟路沒有任何問題,是那個數字的組裝方式,保證了它一定會偏高。

垂直方向是最弱的那一軸

衛星接收器是靠它聽得到的那些衛星的幾何分布,解出你的位置,而這個幾何分布天生就是偏的。水平方向上,衛星從四面八方圍著你,來自相反方向的誤差會互相抵消掉一部分。垂直方向上,每一顆衛星都在你頭頂——本來會在你腳下的那些,被地球擋住了——另一邊沒有東西可以拿來抵消。結果就是一條幾十年來都成立的經驗法則:垂直誤差大約是水平誤差的兩到三倍。

還有第二個、性質完全不同的問題。GNSS 原生輸出的是相對於一個數學橢球體的高度,不是海拔,而這兩者的差在全球各地可以差到幾十公尺。接收器會套用大地水準面修正,而各家用的模型不一樣,這也是為什麼站在同一座山頭上的兩台裝置,對這座山有多高會給出不同的答案。

加總為什麼會讓它更糟,而且只往一邊糟

爬升不是一個量測值,它是一個加總:把高度樣本從頭走一遍,把每一次上升都加起來。這個運算有一個很不幸的性質——雜訊會貢獻進去,而且永遠只往正的方向貢獻。

假設真實高度是徹底平的,而你的樣本上下各抖幾公尺。每一次往上抖都被算成爬升。每一次往下抖都被算成零,因為下降不會從爬升裡扣掉。用一秒一筆的頻率取樣兩個小時,一顆只是有點吵的感測器,就能在一條完全平坦的河堤上,憑空生出好幾百公尺的爬升。

這就是為什麼 App 會設一個門檻值,把小於某個公尺數的變化直接忽略。這有幫助,同時也帶進它自己的誤差:門檻拉高到足以壓掉雜訊,你也同時不再計入那些真實存在、組成一條起伏路面的小上坡。

氣壓計的做法不一樣在哪裡

近年的每一支 iPhone 裡面都有一顆氣壓感測器。氣壓隨高度下降的方式,是研究得很透徹的——在接近海平面的高度,非常粗略地說是每八到九公尺掉一百帕——而感測器的靈敏度,足以解析遠小於一公尺的變化。

更關鍵的是,它是一個完全獨立的儀器。它的誤差跟衛星幾何分布、都市峽谷、樹冠遮蔽或大地水準面模型都沒有關係,而它的短期雜訊,遠小於 GNSS 的垂直雜訊。對於「我現在是不是正在往上走」這個很具體的工作——而這其實就是爬升唯一在問的問題——它是好上一大截的感測器。

Roam 會讀這顆氣壓感測器,在每一個點上把氣壓高度和 GPS 高度並排存下來,只要有氣壓值就用氣壓值。兩個欄位都留著,所以沒有任何東西被丟掉。

氣壓計會在哪裡失手

它量的是壓力,不是高度,而壓力會因為跟你完全無關的理由改變。

合理的做法是:爬升用氣壓計,而任何單一的絕對高度都當成概略值看待。在 iOS 上,這顆感測器同樣被「動作與健身」權限管著,也就是說,App 有可能在畫面上什麼都沒壞的情況下,就失去了對它的存取。

沒有人會注意到的那種故障

真正麻煩的臭蟲不是一個錯的數字,而是一個看起來很正常的缺席。如果整趟路的氣壓高度欄位都是空的,一個直接退回去用 GPS 高度的 App,會報出一個看起來很合理的數字,而畫面上不會有任何地方告訴你,那顆好的感測器從頭到尾根本沒有參與。

這件事在這個 App 自己的歷史上發生過:某一趟路的九千多個點,氣壓高度全部是空值,而當時完全沒辦法判斷五個可能的原因裡究竟是哪一個——那顆感測器其實根本沒有被建立起來,而一顆不存在的感測器,和一顆安靜的感測器,看起來一模一樣。修法是給每一個原因一個名字,並且在走到那個分支的當下就把它記下來:這台裝置沒有這個硬體、權限從來沒有請求過、權限被拒絕、被裝置管理設定檔或家長監護限制、在 App 自己的設定裡被關掉、以及啟動之後失敗。這幾種的處理方式各不相同,而其中兩種,開關就在騎車的人自己手上。

你自己的數字該怎麼看

  1. 騎一趟平路,看它報出來的爬升。在真正平坦的地面上,一個小時跑出幾十公尺以上,那就是雜訊被加起來了。
  2. 同一趟路上帶兩台裝置比一比。總數一定會不一樣;而氣壓的那一台通常會比較低,也比較穩。
  3. 不要把不同 App 之間的爬升拿來對比,好像它是一個量測值一樣。門檻值不同、平滑化不同,同一份資料就會得出不同的答案。
  4. 把絕對高度當成粗略數字,把爬升當成可信的那一個——這跟多數人的直覺剛好相反。

常見問題

我的 GPS 爬升為什麼那麼高?

因為爬升是所有上升量的加總,而 GPS 的垂直雜訊只會往上貢獻。每一次往上抖都算成爬升,每一次往下抖都算成零,所以一個小時的吵雜樣本,就能在平地上製造出爬升。

氣壓高度比 GPS 準嗎?

就爬升而言,準很多——它能解析小於一公尺的變化,而且誤差跟衛星幾何無關。就絕對高度而言,它只能跟它的校正一樣準,因為天氣會推動它量的那個壓力。

天氣會影響氣壓高度嗎?

會。一道鋒面過境,可以在一天之內把海平面氣壓推到讀起來像一百公尺以上的變化。短程出門,這個漂移無關緊要;好幾天的行程就有差,這也是為什麼這顆感測器被信任的是相對變化,而不是絕對高度。

同一趟路,兩個 App 為什麼報出不同的爬升?

感測器不同、雜訊門檻不同、平滑化不同。爬升不是一個量測值,而是一套演算法的輸出,所以同一份原始資料本來就會產生不同的總數,跨 App 比較它意義非常有限。

一個不會把這趟弄丟的記錄 App

Roam 每收到一個定位點就立刻寫進手機,和當下的累計數字在同一個交易裡落地;訊號斷掉的那一段就標成斷的,不拿一條直線糊過去;爬升讀的是氣壓計,不是 GPS 高度。沒有帳號、不用登入、不做同步。完整記錄一趟、看它、回放它,都是免費的。

在 App Store 下載

相關文章

全部文章