A trainer ride that arrived
as one long interval.
You rode a structured workout on a smart trainer in ERG mode: five reps at threshold, recoveries between them, the trainer holding each target to the watt. The power trace is cleaner than anything you record outdoors. Then the ride syncs from the trainer app and arrives as a single interval, the length of the whole ride. Interval analysis has one row to show you, and it is the average of everything.
The structure is still there. It is in the power trace, second by second; it just never made it into the interval list. This article is about getting it back out, and about where that stops working.
Why it happens
Intervals.icu finds intervals in a ride from the structure it has for it. A ride recorded by a trainer app and synced on often arrives without that structure, as one manually added interval covering the whole ride. Nothing is wrong with the data. What is missing is the boundaries.
Finding the reps in the power trace
A rep on a trainer is a stretch where power holds near one level, with a change to another level at each end. Finding those stretches sounds easy, and two things make it harder. A five-second surge or a dropped reading in the middle of a rep should not split it in two. And the moments when power ramps from one target to the next belong to neither rep, so they should not drag either one's average. IntervalSync finds steady efforts this way:
- Power is smoothed over 9 samples, so a single dropped or spiking reading does not end a block, while a real change of target still shows within a step.
- A sample belongs to the current block while it stays within 12% of the block's running average, or within 12 W for a low one.
- A departure has to last before it ends the block: half the shortest block length, and at least 5 seconds. A surge shorter than that is part of the block it happened in.
- Each boundary is then moved onto the raw sample where power actually changed, because smoothing starts moving before the real step does.
- A block has to last at least 30 seconds to be reported on its own. A shorter effort is absorbed into its neighbour.
For each block it reports its start, end and duration, so the blocks tile the ride without gaps, and its average, minimum and maximum power, heart rate, cadence, and drift from the first half to the second. Those figures are measured over the block's settled middle: the ramp into and out of it is left out, and how many seconds were left out is reported. If a short surge or a dropout was absorbed into a block, its highest and lowest readings are reported beside it, so no extreme in the file goes unmentioned. Up to 60 blocks come back from one ride.
The shortest block and the 12% can both be changed when you ask: a shorter minimum to see 20-second sprints as blocks of their own, a tighter tolerance to split two efforts only a few percent apart.
Analyse [activity]. It synced from a trainer app as one interval — find the actual efforts in the power trace and give me each rep's duration, average power, heart rate, cadence, and how much I drifted across it.
What it cannot do
- A ride without power has no reps to find. Detection reads the power stream. A trainer ride recorded with heart rate alone cannot be segmented this way.
- It does not know the workout's names for the reps. Blocks are found from the shape of the trace, so they come back as blocks with their power and timing, not as "Set 2" or "Threshold 3". Matching them to the plan means telling it which is which.
- It is not the better source when there is a better one. Where a ride does have real recorded intervals, those are the better source, with the labels the workout gave them, and an assistant should read them instead.
- A power fault is marked, not removed. Any block that spans a flagged range in the power stream carries a warning on its figures.
Once the reps are back, the questions that need them work again, among them the others on the same page: following one rep across weeks, or checking whether heart rate drifted at a steady power.
More questions the data can answer · Decoupling and block length · All articles · Connect your training