Add example profiles and noisy sample GPX

Four profiles exercising each waveform and channel; all verified to parse
against the Profile schema. Sample GPX has realistic GPS elevation noise so
the smoothing path (FR-5.2) is actually tested.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-05 13:13:30 +02:00
co-authored by Claude Opus 5
parent eb216dd9e6
commit 3e106de2c5
5 changed files with 317 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
name: Short hill repeats
description: >-
Distance-based terrain loop: a flat approach, a steady climb, then a descent
to recover. Loops indefinitely, so ride it for as long as you can stand.
looping: true
blocks:
- type: segments
segments:
- distance_m: 500.0
gradient_pct: 0.0
- distance_m: 800.0
gradient_pct: 6.5
- distance_m: 200.0
gradient_pct: 9.0
- distance_m: 400.0
gradient_pct: -3.0
- distance_m: 300.0
gradient_pct: 0.0
+29
View File
@@ -0,0 +1,29 @@
name: Sawtooth gradient
description: >-
Distance-based sawtooth on the gradient channel — the road tilts up gradually
then drops away sharply, repeatedly. Exercises virtual-gearing feel rather
than raw power, and is a good manual test of profile interpolation.
looping: false
blocks:
- type: constant
channel: gradient
value: 0.0
extent:
seconds: 300.0
# Ten 400 m teeth, ramping 0% to 8% then snapping back.
- type: wave
channel: gradient
shape: sawtooth
midpoint: 4.0
amplitude: 4.0
period:
metres: 400.0
repeats: 10.0
- type: constant
channel: gradient
value: 0.0
extent:
seconds: 300.0
+32
View File
@@ -0,0 +1,32 @@
name: Sine over-unders
description: >-
Warm-up ramp, then eight sinusoidal cycles oscillating either side of
threshold, then a cool-down. Power-channel, so the trainer holds the target
regardless of cadence.
looping: false
blocks:
# Ten-minute warm-up, 100 W rising to 200 W.
- type: ramp
channel: power
from: 100.0
to: 200.0
extent:
seconds: 600.0
# Eight two-minute cycles: 240 W mean, +/- 40 W.
- type: wave
channel: power
shape: sine
midpoint: 240.0
amplitude: 40.0
period:
seconds: 120.0
repeats: 8.0
# Five-minute cool-down.
- type: constant
channel: power
value: 120.0
extent:
seconds: 300.0
+28
View File
@@ -0,0 +1,28 @@
name: Square-wave resistance intervals
description: >-
Raw resistance-channel intervals, bypassing the physics model entirely.
Thirty seconds hard, thirty seconds easy, twenty times. Useful for
characterising the trainer's resistance curve by feel.
looping: false
blocks:
- type: constant
channel: resistance
value: 20.0
extent:
seconds: 300.0
- type: wave
channel: resistance
shape: square
midpoint: 45.0
amplitude: 25.0
period:
seconds: 60.0
repeats: 20.0
- type: constant
channel: resistance
value: 15.0
extent:
seconds: 300.0