發表文章

目前顯示的是 12月, 2025的文章

文章總列表

解析Garmin FIT file,計算累計里程和累計高度

圖片
緣起 以 東三塔規劃表 為例,大會有檢錄點,我們有休息點,把他們全部塞入試算表。要估算時間,得猜 平均速度 , 我的方法 簡述如下 距離 :絕對里程相減,簡單 爬升量 :累積爬升量相減, 麻煩 坡度 : 爬升量 / 距離 平均速度 : 平地速度 - 坡度 * K ,騎一趟觀霧可以估算 這篇要解決 累計爬升量 ,我想要有一份軌跡檔(FIT),計算出每公里的資訊 預期的產出 假如弄得到軌跡檔(比如我自己的FIT檔),我就能算出下表,這樣規劃路線就是查表而已 累積里程 海拔高度 累計爬升 經緯度 上表做圖,看得出蘇花公路120~200,爬升1000,可以用來分配體力,安排休息點 解析FIT檔案 Garmin FIT檔可以用 fitfileviewer 閱讀,“record”是單車碼表運作的依據,每一秒的經緯度,心律,功率,踏頻,高度,左右腳平衡,blah blah。這裡只需要 時間 經緯度 高度 不同廠商的碼表,紀錄邏輯也不同,寫軟體處理相容性問題,也是非常有趣 Garmin/ Wahoo:每秒紀錄 Bryton/ iGPSport:有變化才紀錄 假如上面的資訊完全沒誤差,計算每秒之間的移動距離,和爬升量,得到 delta_distance[n] delta_altitude[n] 累加上述參數,就有每秒鐘的絕對里程,累積爬升量。最後再查表,問題就解完了 累計距離=1km,經緯度,累計高度,海拔高度 累計距離=2km,經緯度,累計高度,海拔高度 處理誤差 真實世界感應器都有誤差, GPSVisualizer 提供兩個完美教學,解釋如何修正誤差 修正水平誤差 (Smoothing & Simplifying Tracks) 修正高度誤差 (Calculating elevation gains) 核心概念很簡單,水平和垂直處理的手法,基本上是一樣的 假設第0點是有效參考點pt[0] 計算distance(pt[1], pt[0]),小於5公尺,pt[1]當成雜訊丟掉 計算distance(pt[2], pt[0]),超過5公尺,pt[2]有效並當成新的參考點 計算distance(pt[3], pt[2]),... 得到里程表 所以FIT檔照以下順序處理,就有里程表 水平過濾 垂直過濾 剩下的點,計算累積距離,累計爬升,得到表格 {時間,里程,高度,累計爬升,經緯...

EXCEL好用的函數:LET,在公式裡宣告local variable

圖片
緣起 我覺得EXCEL大概有兩個使用情境,我的體感大概比例約99%:1% 用過即丟,隨便做一做 嚴肅的使用,算的結果得超級可靠 我的同溫層(工程師)普遍不信任EXCEL,需要可靠的情境,大家會問:為什麼不用Python。這代表現代工程師普遍會寫Python;在15年前可能有人想用Perl,當年我自學Python2,現在已經是Python3了 扯遠了,既然EXCEL就裝在那裡,如果稍微 多做一點 ,免費提高可靠度,不香嗎? (正在努力學習的貓吉) EXCEL二維查找 我解過兩次EXCEL二維查找,我們用這個來討論EXCEL維護問題 2021年 2025年 2025年版的最後公式如下,裡面的LET函數只要多做一點,就能大幅提升EXCEL可讀性 第一個版本 二維查找得呼叫5次EXCEL公式才能實作,寫成下面那樣,三個月就沒辦法維護了 INDEX()呼叫3次 XMATCH()呼叫2次 第二個版本 儲存格裡按ALT+ENTER適當把公式排版一下,分得出INDEX()幾個參數就能大幅提高可讀性。過了三個月也許得查一下INDEX()定義,不過這個版本我有信心維護 第三個版本 EXCEL如果能在公式裡加入註解,比如第二版改成下面這樣,可讀性就好很多;像EXCEL這種有悠久歷史(包袱重)的軟體,機率不高啊 INDEX(     /*tbl*/ C17:E19,     /*row_idx*/ XMATCH(...),     /*col_idx*/ XMATCH(...) ) 雖然不能加註解,微軟團隊還是提供了LET()函數,能用容易理解的方式編寫函數!我們能宣告區域變數row_idx/ col_idx,然後在最後的運算,用有意義的方式讓人理解。這樣閱讀時,能一個一個區塊研究,也能在隔壁儲存格實驗每個變數的意義 為了半年後我還記得,我寫這篇BLOG讓我記得LET()做什麼 第四個版本 最後一個版本就是 2025年的二維查找 ,公式放到NAME MANAGER,避免複製貼上 情境是這樣的 整欄儲存格,都要第三版公式,EXCEL拖一下就複製完公式 也許某次改了公式,公式一拉,某個儲存格漏掉了 有些儲存格是舊公式,有些是新公式,然後查問題找得懷疑人生 寫軟體有所謂的DRY原則(Don't Repeat Yourself),避免把某個...

EXCEL表格二維陣列查詢 2025

圖片
緣起 最近又要用 EXCEL表格做二維陣列存取 ,之前用VBA搭建,想試著不要寫CODE。在2025年問問AI有沒有更好的做法 GROK AI給我的回應 GROK AI回答唬爛的傾象嚴重,不過我猜,微軟應該是有收過這個抱怨(起碼我很不爽) GROK回答的第一句我完全認同。我很確定網路上的EXCEL教學都比我聰明,這些範例他們扛得住,我卻受不了... 受不了的人自己找出路 GROK AI給的解法 GROK雖然很會唬爛,但是下面步驟是真的可靠,確實可以用 這段code要貼在NAME MANAGER,我留著當筆記 =LAMBDA(tbl, row_key, col_key,     LET(         row_idx, XMATCH(row_key, INDEX(tbl,,1), 0),         col_idx, XMATCH(col_key, INDEX(tbl,1,), 0),         INDEX(tbl, row_idx, col_idx)     ) ) 測 試看看 先展示結果 用Get2D台積電股價,這個複雜度我受得了 用組合技查中華電信的資本額,嗯... 結語 2025年版比2021年舒服多了,以後我用EXCEL,都會先開這篇文章,加一下公式 這個解法比 2021年 使用VBA更好,開啟VBA經常會遇到安全性問題,這招不會