Skip to content

inwt2333/MotionAnalyzer

Repository files navigation

MotionAnalyzer

SJTU-SAI (2025-2026-1)-AI1807 数值分析课程大作业

一款用于运动轨迹处理的数值分析工具,具有通过微分进行速度估算、距离积分以及交互式可视化等功能。

Project for Numerical Analysis, a numerical analysis tool for motion trajectory processing, featuring velocity estimation via differentiation, distance integration, and interactive visualization.

项目结构说明

Project_Root/
├── data/                   # 数据存放目录
│   └── route_*.gpx         # 原始 GPS 运动轨迹文件
├── data_loader.py          # 数据加载与预处理模块
├── calculate.py            # 数值计算核心模块 (微分与积分)
├── pic.py                  # 可视化绘图模块
├── main.py                 # 程序入口(主程序)
├── map_utils.py            # 地图和路程可视化模块
├── ai_analysis.py          # AI总结模块
├── benchmark.py            # 算法运行时间测试
└── README.md               # 项目说明文档

模块详解

1. data_loader.py

负责将原始的 GPX 文件转换为可供数值分析使用的数学序列。

核心功能

  • 解析 GPX 文件,提取经纬度、时间戳和海拔信息
  • 实现 Haversine 公式,计算球面上相邻两点间的物理距离
  • 暂停区间检测:自动识别时间间隔过大的数据点,将轨迹分割为多个有效运动区间
  • 提取 APP 记录的原始速度数据(若存在),作为真值参考

输出

  • t_list: 时间序列 [0, t₁, t₂, ...] (单位: 秒)
  • s_list: 累计距离序列 [0, s₁, s₂, ...] (单位: 米)
  • valid_segments: 有效区间列表 [(start_idx, end_idx), ...]
  • lats, lons, elevations: 经纬度和海拔数据

2. calculate.py

本项目的核心数学计算模块,支持分段计算以处理暂停区间。

功能 A:数值微分 (求速度,加速度)

  • 采用分段计算策略:只在有效运动区间内计算速度
  • 利用三点/五点微分,综合用户输入和实际数据选择微分公式
  • 提供移动平均平滑功能,降低 GPS 数据中的高频噪声

功能 B:数值积分 (求路程)

  • 实现自适应混合求积法:动态在辛普森公式(高精度)与梯形公式(高鲁棒性)之间切换
  • 支持分段积分,忽略暂停区间内的无效数据
  • 可记录积分过程中的估计值,便于误差分析

3. pic.py

基于 matplotlib 的速度分析图形化展示模块。

核心图表

  • 速度-时间曲线:显示数值微分计算的速度曲线
  • 数据对比验证:支持与 APP 原始记录速度进行对比
  • 分段可视化:用垂直线标记不同运动区间的边界

4. map_utils.py

轨迹地图和路程分析的可视化模块。

核心功能

  • 累计路程-时间图表:显示运动过程中的累计路程变化
  • 轨迹地图显示:使用 Folium 创建交互式轨迹地图
  • 分段轨迹渲染:在地图上用不同颜色标记有效运动区间
  • 误差分析图表:显示数值积分估计值与实际值的误差

5. ai_analysis.py

集成大语言模型(LLM)API 的核心交互模块,负责将数值计算结果转化为定性的自然语言报告。

  • 核心功能

    • 数据摘要与采样:实现 safe_sample 算法,将高密度的轨迹数据(时间、速度、距离序列)进行稀疏采样,构建符合模型上下文限制的结构化 JSON Payload。
    • Prompt 工程:内置“专业运动数据分析师”系统提示词,引导 AI 从配速策略、异常检测(如 GPS 漂移)、体能分配等维度进行深度推理。
    • API 封装调用:基于 OpenAI SDK 标准封装 API 请求(适配 Qwen/GPT 等模型),实现从数值数据到文本生成的自动化流程。
  • 输出:包含核心指标概览、速度节奏分析及训练建议的 Markdown 格式报告。

6. benchmark.py

基于真实数据的算法性能基准测试模块。

  • 核心功能
    • 自动化测试流程:支持批量读取指定路径下的多组真实 GPX 轨迹文件(覆盖短、中、长距离场景)。
    • 多轮次采样:通过多次循环(如 50 次)执行计算任务并取平均值,消除系统调度波动带来的测量误差。
    • 性能指标输出:输出包含数据规模(点数 N)、总耗时(ms)及单点平均耗时(μs)的标准化测试报告,用于验证算法的 $O(N)$ 线性时间复杂度。

7. main.py

基于 Streamlit 的交互式 Web 应用入口。

交互功能

  • 文件选择器:自动扫描 data 目录下的 GPX 文件
  • 参数调节:暂停检测阈值、平滑窗口大小等可调节参数
  • 多标签页布局:速度分析、路程分析、轨迹地图分页显示
  • 实时指标:总里程、估算误差、相对误差率等核心指标
  • 区间信息表格:详细显示每个有效运动区间的统计信息

快速开始

环境依赖

请安装以下依赖库:

使用 requirements.txt:

pip install -r requirements.txt

或手动安装:

pip install streamlit folium streamlit-folium gpxpy matplotlib numpy openai dotenv

运行方式

Mac: 在项目根目录下运行:

streamlit run main.py

Windows: 在项目根目录下运行:

python -m streamlit run main.py

使用步骤

  1. 将 GPX 格式的运动轨迹文件放入 data/ 目录
  2. 运行上述命令启动 Web 应用
  3. 在左侧边栏选择要分析的运动记录文件
  4. 调节计算参数和显示选项
  5. 查看各标签页的分析结果和可视化图表

算法原理

1. 距离计算 (Haversine Formula)

$$ d = 2R \cdot \arcsin\left(\sqrt{\sin^2\left(\frac{\Delta\phi}{2}\right) + \cos\phi_1\cos\phi_2\sin^2\left(\frac{\Delta\lambda}{2}\right)}\right) $$

2. 暂停区间检测

  • 检测逻辑:当相邻数据点的时间间隔超过阈值(默认 5 秒)时,视为暂停记录
  • 分段处理:将完整轨迹分割为多个有效运动区间,暂停区间不参与数值计算

3. 数值微分 (多阶差商策略)

系统支持三点法 ($O(h^2)$)与五点法 ($O(h^4)$)两种微分策略,可根据数据精度要求动态选择:

  • 三点中心差商 (Standard): 适用于常规计算或数据点较少的情况。 $$ v(t_i) \approx \frac{S(t_{i+1}) - S(t_{i-1})}{t_{i+1} - t_{i-1}} $$

  • 五点中心差商 (High-Precision): 利用四次插值原理,通过更多邻域点提高计算精度并平滑噪声。 $$ v(t_i) \approx \frac{-S(t_{i+2}) + 8S(t_{i+1}) - 8S(t_{i-1}) + S(t_{i-2})}{12h} $$

  • 边界处理:

    • 三点模式:使用向前/向后差商。
    • 五点模式:在区间的边缘(起点、次起点、终点等)自动切换为非对称五点偏心公式,确保全区间的高阶精度。

4. 数值积分 (自适应混合求积法)

  • 策略:动态扫描连续时间节点,判断步长均匀性

  • 均匀步长:采用辛普森公式(精度 $O(h^4)$):

    $$ \int_{t_i}^{t_{i+2}} v(t)dt \approx \frac{h}{3}[v(t_i) + 4v(t_{i+1}) + v(t_{i+2})] $$

  • 非均匀步长:降级采用梯形公式(精度 $O(h^2)$):

    $$ \int_{t_i}^{t_{i+1}} v(t)dt \approx \frac{h}{2}[v(t_i) + v(t_{i+1})] $$

功能特性

  1. 智能暂停检测:自动识别并处理运动过程中的暂停记录区间
  2. 分段数值计算:只在有效运动区间内进行微分和积分运算
  3. 多维度可视化:
    • 速度-时间分析曲线
    • 累计路程-时间图表
    • 轨迹地图显示(起点、终点、分段轨迹)
    • 误差分析图表
  4. 交互式界面:参数实时调节、多标签页布局、详细统计信息
  5. 数据验证:支持与 APP 原始记录数据进行对比验证
  6. AI分析:接入Qwen模型,对运动过程进行分析

作者

  • 姓名:韩岳成 骆渝骅
  • 学号:524531910029 524531910035
  • 课程:数值分析

About

AI1807 数值分析课程大作业 Project for Numerical Analysis, a numerical analysis tool for motion trajectory processing, featuring velocity estimation via differentiation, distance integration, and interactive visualization.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors