← 返回目录

冲浪板日志数据分析 — 电流工况 / 正态分布方案 v3.0

版本:v3.0 · 2026-08-20
相对 v2 的核心修正:平均速度必须来自连续航段;高负荷 / 起飞滑行从混池中拆出;动力边界改 Top15 逐点;翼型按各自速度带;负载先标定后入样。
实现:current-distribution-analyzer/analyze_v3.py
输出:current-distribution-analyzer/output_v3/


一、分析目标(拆开混在一起的工况)

工况 怎么抓 v2 问题
正常巡航 各速度段均值 / P50(总览表,接近真实) 已体现
高负荷(急速 / 大载重 / 带人) 25–35 km/h 且电流 ≥ 该速度段均值 × 1.5(常见到 2 倍) 未单独捕捉,被并进全局 μ,把工况电流抬高了
起飞电流 0–20 km/h 且速度在加速(ds/dt>0)的峰值电流 点级直接丢掉 <15,起飞被滤掉
未起飞水中滑行 0–20 km/h 电流长时间大于 20–25 km/h 均值 未体现

最终用途不变:给电池连续 / 峰值 / 起飞工况提供依据。

工况电流不要用「全样本正态 μ」。 总览里按速度段算的均值才接近真实巡航;全局 μ 会被高负荷尾巴拉高。


二、数据提取

2.1 Log 级(保留 v2 门槛)

低于 20 km/h 的平均速度 = 未起飞或新手,去掉。

2.2 连续航段(v3 新增,对应「平均速度应该是连续的点」)

采样约 1 Hz。图上的「起飞前」和「断联」不能进平均速度。

规则 默认阈值 含义
断联 相邻点 Δt > 3 s 图中断联缺口
有效飞行 speed ≥ 15 km/h 起飞后
掉出飞行 speed < 10 km/h 速度断断续续、反复落水
最长连续飞行 ≥ 8 min 一段能看的巡航
连续段平均速度 ≥ 20 km/h 真正用来筛 log 的平均速度
飞行点占比 speed≥15 的点 ≥ 50% 整段大部分时间在飞
断联时长占比 ≤ 10% 频繁断联 = 无参考价值

JSON 头里的 averageSpeed 会掺进起飞前和断联,只作初筛。最终去留看连续航段平均速度。

断断续续(多次掉到 10 km/h 以下、最长连续段太短)= 新手,整条 log 丢掉。

2.3 点级:两套池,不要混

巡航 / 高负荷池(主正态):

字段 条件
hourSpeed ≥ 15 km/h
electricCurrent ≥ 5 A
batteryVoltage ≥ 38 V
batteryElectricity ≥ 10%

起飞 / 滑行池(独立通道):


三、数据分析

3.1 巡航分布

3.2 高负荷

重点看 25–35 km/h:

threshold_1.5 = mean(I | 该速度段) × 1.5
threshold_2.0 = mean(I | 该速度段) × 2.0

这些过大电流 = 大载重或带人。单独出表,不要并进巡航 μ。

3.3 动力边界:Top 15,不用 P99 均值

v2 的 P99 在 ±5 A 窗口里取平均,覆盖太广,说明不了模组边界。

改为两张 Top 15,分别钉功率边界和速度边界:

电流 Top 15(功率 / 放电边界)

  1. 每个航次取 最大电流那一个点
  2. 全样本按该电流排序,取 前 15 条
  3. 每条给出:trajectory_id、速度、电流、功率、电压、工况归属

航速 Top 15(速度性能边界)

  1. 先丢掉 GPS 尺错误:整条 log 中位速度 ≥ 60 km/h
  2. 单点速度截到 60 km/h;丢掉 |ds/dt| > 15 km/h/s 的单点跳变
  3. 电流不取同一秒:服务器时间戳有延迟。最高速时刻之前 10 秒内的 峰值电流(及该峰值点的电压/功率)才是这次顶速对应的电参
  4. 配对后再卡物理门槛:≥45 km/h 须 ≥100 A,≥50 km/h 须 ≥130 A。不达标则丢掉该最高速、改试下一次最高速
  5. 每条 log 得到一个(航速, 前 10s 峰值电流)点,再取全局前 15

3.4 正态图

只画巡航点的直方图 + 拟合曲线;高负荷点另外标注,避免把 μ 拉歪。


四、翼型组

分类思路可用,但 K-Means 效率曲线 ≠ BOM 翼型号。

4.1 要不要提供标定 log?

要。 请提供一批明确的测试 log:

必填 说明
翼型号 小翼 / 中翼 / 大翼(或具体零件号)
测试者体重 kg 单人;带人则两人合计
trajectory_id 或 object_key 能对上服务器日志

有真值后:用标定 log 固定各翼速度-电流特征,再给全样本贴标签。没有真值之前,代码里只有速度包络代理(small/medium/large),并冻结为工作定义(见 v3 续跑)。有真值后再替换。

4.2 每款翼用自己的速度带

翼 主流使用带 看什么
小翼 30–60 km/h 该带内速度分布、电流分布、P95/最大功率
中翼 20–50 km/h 同上
大翼 15–40 km/h 同上

不要三款翼都切 15–20 / 20–25… 同一套箱子。输出:主流使用速度、速度边界、功率边界。


五、负载分层

先定义体重区间,用实测 log 当尺子,再进样本空间。 不要先用 I/v 三分位假装成轻/中/重。

建议流程:

  1. 标定:轻载骑手、中载骑手、重载/带人各若干条连续优质 log(翼型尽量固定)
  2. 看他们在 25–35 km/h 的电流相对该段均值的倍数,钉死门槛(预期轻载 ≈1.0×,重载 1.5–2×)
  3. 再把门槛套到全样本

在标定到来之前,操作定义冻结:25–35 km/h 下 I / 该段均值:light <1.2×,medium 1.2–1.5×,heavy ≥1.5×。不写 kg。


六、工况定义口径

工况 电流从哪来
巡航 各速度段均值 / P50(总览表)
连续放电建议 巡航 20–30 km/h 的 P95(已剔除 1.5×)
高负荷 25–35 km/h 且 ≥1.5× 段均值 的分布
模组峰值 Top 15 航次最大电流(逐条速度+功率)
起飞 0–20 加速峰值的中位 / P95

七、目录与命令

current-distribution-analyzer/
  continuity.py          # 连续航段判定
  analyze_v3.py          # v3 主入口
  output_v3/
    run_report.md
    speed_bin_overview.csv
    cruise_by_speed.csv
    high_load_25_35.csv
    top15_peak_current.csv
    top15_peak_speed.csv
    takeoff_peak_current.csv
    water_sliding_events.csv
    wing_proxy_native_band.csv
    kept_logs.csv / reject_reasons.csv
cd current-distribution-analyzer
python analyze_v3.py
# 使用已有 data/oss_cache,不再连 MySQL

八、待你们提供的标定数据

  1. 小 / 中 / 大翼各若干条,带翼型号
  2. 已知体重(及是否带人)的测试 log
  3. 对上 trajectory_id 或 OSS 文件名

到齐后重跑第 4、5 节,代理标签换成真值。