diff --git a/profiles/hill-repeats.yaml b/profiles/hill-repeats.yaml new file mode 100644 index 0000000..d32ad5e --- /dev/null +++ b/profiles/hill-repeats.yaml @@ -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 diff --git a/profiles/sawtooth-gradient.yaml b/profiles/sawtooth-gradient.yaml new file mode 100644 index 0000000..5e6f81d --- /dev/null +++ b/profiles/sawtooth-gradient.yaml @@ -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 diff --git a/profiles/sine-overunders.yaml b/profiles/sine-overunders.yaml new file mode 100644 index 0000000..0d05119 --- /dev/null +++ b/profiles/sine-overunders.yaml @@ -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 diff --git a/profiles/square-resistance.yaml b/profiles/square-resistance.yaml new file mode 100644 index 0000000..ed314c2 --- /dev/null +++ b/profiles/square-resistance.yaml @@ -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 diff --git a/testdata/sample-climb.gpx b/testdata/sample-climb.gpx new file mode 100644 index 0000000..f8d87d2 --- /dev/null +++ b/testdata/sample-climb.gpx @@ -0,0 +1,209 @@ + + + + Sample climb + + 1035.4 + 1033.6 + 1034.3 + 1034.2 + 1035.7 + 1035.5 + 1036.2 + 1033.8 + 1034.8 + 1033.6 + 1034.2 + 1035.0 + 1033.6 + 1034.1 + 1035.4 + 1035.1 + 1034.2 + 1035.3 + 1035.9 + 1033.5 + 1035.9 + 1035.6 + 1034.5 + 1034.0 + 1036.4 + 1034.5 + 1033.8 + 1033.8 + 1036.0 + 1035.3 + 1035.9 + 1035.7 + 1035.1 + 1036.4 + 1035.8 + 1037.5 + 1039.6 + 1040.1 + 1042.0 + 1042.4 + 1043.9 + 1043.1 + 1044.8 + 1046.2 + 1046.7 + 1048.3 + 1049.0 + 1050.6 + 1052.8 + 1053.1 + 1054.2 + 1054.8 + 1056.0 + 1059.0 + 1059.2 + 1060.1 + 1059.8 + 1062.5 + 1061.7 + 1063.3 + 1066.1 + 1066.0 + 1066.6 + 1067.9 + 1069.3 + 1070.0 + 1069.2 + 1069.4 + 1071.1 + 1071.7 + 1072.4 + 1075.4 + 1075.9 + 1075.0 + 1076.8 + 1076.7 + 1079.0 + 1078.3 + 1078.4 + 1079.1 + 1080.7 + 1080.4 + 1082.1 + 1083.6 + 1082.8 + 1082.9 + 1085.8 + 1085.0 + 1084.3 + 1084.8 + 1085.6 + 1087.8 + 1088.9 + 1088.4 + 1087.9 + 1089.4 + 1091.9 + 1091.1 + 1093.0 + 1093.3 + 1091.4 + 1094.1 + 1094.6 + 1094.8 + 1094.6 + 1096.4 + 1095.5 + 1097.1 + 1097.8 + 1100.0 + 1100.4 + 1099.3 + 1100.7 + 1100.5 + 1103.4 + 1104.0 + 1103.1 + 1104.9 + 1105.6 + 1105.0 + 1107.7 + 1107.8 + 1109.4 + 1109.5 + 1108.8 + 1110.6 + 1110.6 + 1114.3 + 1115.1 + 1115.9 + 1115.3 + 1115.5 + 1119.0 + 1120.2 + 1118.6 + 1120.8 + 1120.6 + 1123.8 + 1124.9 + 1124.0 + 1126.2 + 1127.5 + 1127.8 + 1130.7 + 1130.5 + 1131.0 + 1133.2 + 1134.9 + 1134.5 + 1136.0 + 1139.2 + 1139.4 + 1139.9 + 1141.4 + 1139.5 + 1139.1 + 1138.8 + 1138.9 + 1137.1 + 1136.4 + 1135.3 + 1136.3 + 1134.4 + 1135.8 + 1135.0 + 1131.9 + 1131.7 + 1132.4 + 1130.3 + 1129.4 + 1131.1 + 1129.4 + 1128.4 + 1128.7 + 1128.1 + 1125.5 + 1124.6 + 1124.9 + 1124.2 + 1123.7 + 1123.8 + 1122.9 + 1123.2 + 1119.9 + 1120.1 + 1119.2 + 1120.1 + 1117.6 + 1116.8 + 1116.9 + 1116.1 + 1115.0 + 1114.2 + 1115.6 + 1113.5 + 1114.0 + 1112.4 + 1110.3 + 1112.4 + 1111.3 + + +