CoursePace 如何工作
CoursePace 会把马拉松赛道转化为可执行的分段目标。我们不会假设每一公里消耗都一样,而是估算爬升和下降如何改变体感强度,再把它转换成稳定的比赛计划。
数据
每场赛事都会从我们能找到的最佳路线文件开始,优先使用主办方官方 GPX。如果没有官方文件,我们会使用经过审核的社区路线,并标注较低的可信等级。
我们会把路线标准化到马拉松距离,并接入可信来源的海拔数据。
预处理
海拔数据通常有噪声,因此在用于配速前需要清理。我们会检查路线中的异常断点,按稳定距离重新采样,修正孤立的单点尖峰,并使用 Savitzky-Golay 滤波进行平滑,避免地图伪影制造假的突变。
我们也会审核地图地形数据可能不符合实际跑步路线的路段。桥梁、隧道、地下通道或高架可能高于或低于海拔服务返回的地表,所以这些路段可以加入人工赛道路面调整,并在平滑过程中保持精确。
算法
赛道模型准备完成后,CoursePace 会把距离转换为等效平路距离。坡度到体感强度系数的曲线参考了 Aaron Schroeder 对 Strava 坡度调整配速模型的反向工程。
阅读反向工程文章g_i = Δh_i / Δd_i对于分段 i,g_i 表示坡度,Δh_i 表示垂直位移,Δd_i 表示赛道距离。
f_i = F(clip(g_i, -45%, 45%))
D_i* = Δd_i · f_iF 将坡度映射为体感强度系数,D_i* 是该分段的等效平路距离。
D* = Σ D_i*
P* = T_goal / D*D* 是总等效平路距离,T_goal 是目标完赛时间,P* 是平路等效配速。
P_j = P* · (D_j* / D_j)
C_j = P* · Σ_{k≤j} D_k*对于分段 j,P_j 是目标配速,D_j* / D_j 是分段调整比例,C_j 是到该分段为止的累计时间。
在分段表中,系数高于 1.000 表示该段比平路更费力,低于 1.000 表示更省力。目标配速是为了保持稳定体感强度,该分段实际应跑出的配速。