阻力函數到底在做什麼
一發彈丸的完整外彈道行為,可以用一條「距離對時間」曲線完整描述。曲線起點的斜率就是初速 (muzzle velocity),任一點的斜率就是該時刻的速度,而曲線的二階導數代表阻力,也就是隨時間變化的減速度。換句話說,只要能取到這條曲線上足夠多的點,彈丸在飛什麼就已經被記錄下來了。
問題是實務上不可能連續量測整條曲線,只能在有限幾個位置設靶。G1、G2、G7 這類既有阻力函數 (legacy drag functions) 的角色,就是在這些實測點之間做內插——它們提供一條事先定義好的阻力對速度形狀,再用一個彈道係數 (ballistic coefficient, BC) 把它縮放到你這顆彈頭上。
Oehler System 88 量的正是這條曲線上的點。它求出的是一個「有效」彈道係數:讓解算出來的長距離飛行時間 (time-of-flight),等於同一距離上實測到的飛行時間。Oehler 觀察到,只要這個飛行時間相等的條件成立,各種合理的阻力函數搭配各自適當的彈道係數,在槍口到測試靶之間所預測的中間彈道參數(下墜量、風偏)都會非常接近,幾乎相等。
也因此,收集距離—時間資料點時,最有價值的位置是阻力性質開始明顯改變的地方。
超過測試靶之後,賭的是阻力函數合不合
一旦超出實測靶的距離,預測與實際的吻合程度就完全取決於假設的阻力函數與這顆彈頭真實表現之間的契合度。如果彈頭飛起來像理論上的 G7 標準彈,G7 在遠距離就會給出正確預測,而 G1 的預測會偏掉;如果它飛起來像理論 G1 標準彈,情況就反過來。
若 G1 與 G7 都不合用怎麼辦?傳統做法是在不同速度區間使用不同的彈道係數。Sierra 多年來提供的「分段」彈道係數 (stepped ballistic coefficients) 就是這個概念,它並不是新東西。
真正的困難一直被藏著:你要怎麼「量」出某一顆彈頭、從某一支槍射出、在某一個速度層級下該用哪個彈道係數?阻力函數的選擇充其量只是有根據的猜測,而彈道係數本身還會隨膛線纏距 (barrel twist rate) 等參數改變——其中有些參數甚至還沒被辨識出來。當彈道係數是在 300 碼以內的距離量出來時,這個問題只會更嚴重。
三個速度區間:彈丸實際經歷的阻力世界
把同一顆彈頭用三種常見阻力函數描述,並把各自的彈道係數調到讓三者在 2600 fps 初速處具有相同阻力,會看到一個關鍵現象:在大約馬赫 1.2 (Mach 1.2,約 1350 fps) 以上,三條阻力曲線都相對平直。大多數長距離射擊就發生在這個速度範圍內。
這個區間內各常見阻力函數彼此相似,通常可以用「阻力係數 (drag coefficient) 與速度平方根成反比」來近似,因此只要配上適當的彈道係數,任何一個都能給出準確可用的結果。System 88 主要就是為了求出這一段——從槍口到速度衰減至約馬赫 1.2 / 1350 fps 的距離——能準確描述彈頭表現的彈道係數。
從馬赫 1.2 掉到馬赫 0.9(1350 fps 降到 1000 fps)的穿音速區間則完全不同:各常見阻力函數在這裡差異顯著,光看曲線圖穿過這一段的走勢就看得出來。Oehler 對此的態度很坦白——彈道學家為這個區間爭論多年,他不假裝理解、也不去量測 1350 到 1000 fps 之間的阻力,因為實務上並不需要;需要的是量出彈頭「穿過」這個過渡區之後,阻力所造成的累積效果,那會成為距離—時間曲線上第二個可靠的資料點。
1000 fps 以下,阻力係數重新變得規矩,接近牛頓數百年前提出的定常阻力係數。此時再取第三個資料點,求出第三個彈道係數,讓預測與實驗在 1000 fps 以下也能吻合。
延伸做法:用飛行時間把區間縫起來
這套程序真正獨特的地方,是把「在接近彈道係數分段點的實測距離上收集到的累積飛行時間」當作資料點來用。分段之間的行為仍然交給既有阻力函數去預測,但有一個關鍵條件:前一段的預測必須結束在距離—時間曲線上的某個特定點,而下一段的預測必須從同一個點開始。整條曲線因此是被一段一段接起來的,而不是各算各的。
具體步驟為:(1) 選定一個阻力函數,用 System 88 量出從槍口到速度約 1350 fps 之處的彈道係數;這組參數適用於槍口到略超過量測距離的範圍,並已正規化到標準大氣。(2) 在速度約 1000 fps 對應的距離設次音速靶,量測彈道係數並記下飛行時間;在 Ballistic Explorer 中把分段點設在 1350 fps,上段沿用先前量到的值,然後以逐次逼近 (successive approximations) 只調整 1350 fps 以下所用的彈道係數,直到解算飛行時間與實測相符,預測即可有效到 1000 fps 略下。(3) 把靶再往外推到速度遠低於 1000 fps 之處,保留前兩個彈道係數,加設第二個分段點於 1000 fps,求出第三個彈道係數,就能一路預測到深入次音速。
1350 fps 與 1000 fps 這兩個數字並不神聖,只是具代表性的選擇,分段點數量可以增加。舉例來說,曳光彈的阻力通常會在曳光劑燒完之後改變,在那個點加一個彈道係數分段是合理的。多數彈道解算程式要求分段點以 fps 表示;在標準大氣條件下,fps 值可直接換算為對應的馬赫數。
同樣的程序也適用於自訂阻力函數 (custom drag function),或改用遠距離的實測下墜資料取代飛行時間。反過來,也可以用一個常見阻力函數去做出自訂阻力函數的分段彈道係數近似——包括都卜勒雷達導出的阻力函數(例如 Lapua 公布的那種)——讓只支援常見阻力函數的軟體,也能實際用上這些資料。
實例:用 G1 與 G6 去追一顆服從 G7 的彈頭
Oehler 以一個常見裝彈(Federal .308 Winchester 配 175 grain Sierra 彈頭)示範。他沒有用 System 88 的實射資料,而是把 G7 的預測值當成「真值」,再試著用 G1 與 G6 去逼近它。Ballistic Explorer 可同時處理三條軌跡:Trace 1 用 G7(輸入/真值)、Trace 2 用 G1、Trace 3 用 G6,三者其餘條件相同。
Trace 1 顯示彈頭在 800 碼時速度為 1376 fps,於是取 800 碼作為第一個測試距離。調整 Trace 2、3 的彈道係數,直到 800 碼的飛行時間與 Trace 1 相同:G1 由 0.483 微調到 0.477,G6 由 0.269 調到 0.286。經此一步,三條軌跡從槍口到 1000 碼以上的歸零修正量(holdover)差異都小於 0.1 密位。
第二步取 1200 碼(對應約 1000 fps),Trace 1 的飛行時間為 2.3157 秒。加上分段點後,只調整 1350 fps 以下使用的彈道係數:G1 由 0.477 大幅改為 0.326,G6 由 0.286 改為 0.277。G1 需要這麼大的改動並不意外,因為三種阻力函數在穿音速區差異極大;但調整後,歸零修正量在 1400 碼內仍吻合於 0.1 密位以內。
第三步把靶推到約 1800 碼,保留前兩段係數,調整第三段直到飛行時間為 4.278 秒。最終三條軌跡在 800、1200、1800 碼的飛行時間都密合,而歸零修正量的最大差異:用 G1 是 1800 碼處 0.12 密位,用 G6 僅 0.05 密位。
最值得記住的是這一點:這些分段彈道係數之所以變動幅度很大,是因為在用 G1 與 G6 去描述一顆實際上服從 G7 的彈頭。如果一開始就用 G7 來擬合輸入資料,各速度段算出來的彈道係數會全部維持在輸入值 0.242 不變。換句話說,分段彈道係數偏離初始值的幅度,本身就是「假設的阻力函數與實際彈頭有多不合」的量化指標——分段值變動越小,代表阻力函數選得越好,結果也越穩定精確。若第一個假設的阻力函數效果不佳,換一個重做分析即可。
要建出來,你必須量到什麼
這套方法對量測的要求很明確,而且和直覺相反:靶要擺在哪裡並不關鍵,預測中馬赫 1.2 或馬赫 0.9 究竟落在幾碼也不是關鍵參數;真正關鍵的是槍口到靶的距離必須被精確量出來。除此之外,還需要每一發的精確大氣條件、初速與飛行時間。
相對於用遠距離實際彈著下墜反推,這個做法不需要估測遠距離的下墜量,因而消除了瞄準誤差與發與發之間初速離散所帶來的誤差;System 88 也讓你能較快累積到具統計意義的樣本數。實驗部分可以在未整備的場地以可攜式儀器完成,真正的限制是找得到夠長、能讓存速掉到深入次音速的試射場地。
程序可以在任何一步停下來:第一步本身就是 System 88 的一般用法,第二步與第三步則是把 System 88(或其他量測方式)的有效範圍往外延伸。當一顆彈頭根本沒有公開的阻力資料時,這也提供了自行建立其特性描述的途徑。所需軟體隨 System 88 與 Ballistic Explorer 提供。
兩個必須誠實說明的限制:Oehler 在文中指出,這套程序當時尚未以實際試射驗證,示範用的是由 G7 產生的模擬資料;而逐段以逐次逼近法求彈道係數的步驟相當繁瑣,他自己也認為這一步應該由程式自動化來完成。