Riteņbraukšanas spēka formulas
Velosipēdu analīzes metrikas matemātiskais pamats
Ieviešanas rokasgrāmata
Šajā lapā ir sniegtas kopēšanas un ielīmēšanas formulas un soli pa solim aprēķinu metodes visiem Bike Analytics metrikas veidiem. Izmantojiet tos pielāgotai ieviešanai, pārbaudei vai padziļinātai izpratnei par apmācību, kas balstīta uz enerģiju.
⚠️ Ieviešanas piezīmes
- Visas jaudas vērtības vatos (W), laiks sekundēs, ja vien nav norādīts
- FTP un CP ir individuāli specifiski sliekšņi — nav universālu vērtību
- Vienmēr pārbaudiet ievades saprātīgos diapazonos (parasti no 0 līdz 2000 W)
- Apstrādājiet malas gadījumus (dalīšana ar nulli, negatīvā jauda)
- Enerģijas datu precizitātei nepieciešami 1 sekundes ierakstīšanas intervāli
Riteņbraukšanas galvenās veiktspējas metrika
1. Treniņu stresa rādītājs (TSS)
Formula:
Nostrādāts piemērs:
Scenārijs:2 stundu brauciens, NP = 235 W, FTP = 250 W
- Aprēķināt IF: IF = 235 / 250 = 0,94
- Ilgums sekundēs: 2 stundas × 3600 = 7200 sekundes
- TSS = (7200 × 235 × 0,94) / (250 × 3600) × 100
- TSS = 1 590 720 / 900 000 × 100 =176.7 TSS
Interpretācija: Smags treniņbrauciens (>150 TSS), sagaidāms 2-3 dienu atveseļošanās
JavaScript ieviešana:
function calculateTSS(durationSeconds, normalizedPower, ftp) {
const intensityFactor = normalizedPower / ftp;
const tss = (durationSeconds * normalizedPower * intensityFactor) / (ftp * 3600) * 100;
return Math.round(tss);
}
// Example usage:
const tss = calculateTSS(7200, 235, 250);
// Returns: 1772. Normalizētā jauda (NP)
Algoritms (30 sekunžu slīdošais vidējais rādītājs):
Kāpēc ceturtais spēks?
Kvartiskā (ceturtā pakāpe) attiecība atspoguļo mainīgo piepūles nelineārās fizioloģiskās izmaksas. Brauciens ar pārspriegumiem un atjaunošanos maksā vairāk enerģijas nekā vienmērīga jauda ar tādu pašu vidējo rādītāju.
Piemērs:
- Vienmērīga braukšana: 200 W 1 stundu → NP = 200 W, vidējais = 200 W
- Maināma gaita: mainīga 300 W/100 W → Vidējais = 200 W, NP = 225 W
Tāda pati vidējā jauda, bet mainīgajam gaitai ir par 12% augstāks NP pārsprieguma fizioloģisko izmaksu dēļ
JavaScript ieviešana:
function calculateNormalizedPower(powerData) {
// powerData is array of 1-second power values
// Step 1: Calculate 30-second rolling averages
const rollingAvgs = [];
for (let i = 29; i < powerData.length; i++) {
const window = powerData.slice(i - 29, i + 1);
const avg = window.reduce((sum, p) => sum + p, 0) / 30;
rollingAvgs.push(avg);
}
// Step 2: Raise to 4th power
const powered = rollingAvgs.map(p => Math.pow(p, 4));
// Step 3: Average of 4th powers
const avgPowered = powered.reduce((sum, p) => sum + p, 0) / powered.length;
// Step 4: Take 4th root
const np = Math.pow(avgPowered, 0.25);
return Math.round(np);
}
// Example usage:
const powerData = [/* 1-second power array */];
const np = calculateNormalizedPower(powerData);
// Returns: NP in watts3. Intensitātes koeficients (IF)
Formula:
Interpretācijas diapazoni:
| IF diapazons | Piepūles līmenis | Treniņa piemērs |
|---|---|---|
| < 0,75 | Atgūšana / Viegli | Aktīvs atveseļošanās brauciens, 1.-2. zona |
| 0,75 - 0,85 | Izturība | Ilgs vienmērīgs brauciens, aerobā bāze |
| 0,85 - 0,95 | Temps | Sweet spot treniņš, tempu intervāli |
| 0,95 - 1,05 | Slieksnis | FTP intervāli, laika izmēģinājuma piepūle |
| 1,05 - 1,15 | VO₂max | 5 minūšu intervāli, kritēriju skrējiens |
| > 1.15 | Anaerobs | Īsi sprinti, uzbrukumi, MTB sprādzieni |
Aprēķina piemērs:
Scenārijs:NP = 235W, FTP = 250W
IF = 235 / 250 =0,94
Interpretācija: Augsts temps / zemsliekšņa piepūle, noturīga 2-3 stundas
function calculateIF(normalizedPower, ftp) {
return (normalizedPower / ftp).toFixed(2);
}
// Example:
const if_value = calculateIF(235, 250);
// Returns: 0.944.Mainīguma indekss (VI)
Formula:
Interpretācija pēc disciplīnas:
| Disciplīna | Tipisks VI | Nozīme |
|---|---|---|
| Road TT / Steady Effort | 1.00 - 1.05 | Ļoti vienmērīga jauda, optimāls ritms |
| Šosejas sacīkstes | 1,05 - 1,10 | Daži pārspriegumi, parasti vienmērīgi |
| Kritērijs | 1,10 - 1,20 | Bieža paātrināšanās un uzbrukumi |
| Kalnu velosipēds XC | 1,15 - 1,30+ | Ļoti mainīgs, pastāvīgs pārspriegums |
Aprēķina piemērs:
Ceļa sacīkstes:NP = 240 W, vidējā jauda = 230 W
VI = 240 / 230 =1.04(vienmērīgs temps)
MTB sacīkstes:NP = 285 W, vidējā jauda = 235 W
VI = 285 / 235 =1.21(ļoti mainīgi, pārrāvumi)
function calculateVI(normalizedPower, averagePower) {
return (normalizedPower / averagePower).toFixed(2);
}
// Example:
const vi_road = calculateVI(240, 230); // Returns: 1.04
const vi_mtb = calculateVI(285, 235); // Returns: 1.21Kritiskā jauda un W' (anaerobā kapacitāte)
5. Kritiskā jauda (CP) — lineārais modelis
Formula:
Aprēķins no vairākiem centieniem:
Nepieciešamas 2–4 maksimālas pūles dažādos ilgumos (piemēram, 3, 5, 12, 20 minūtes)
Datu piemērs:
| Ilgums | Jauda (W) | Kopējais darbs (kJ) |
|---|---|---|
| 3 min (180 s) | 400W | 72 kJ |
| 5 min (300 s) | 365 W | 109,5 kJ |
| 12 min (720 s) | 310W | 223,2 kJ |
| 20 min (1200 s) | 285 W | 342 kJ |
Izmantojot lineāro regresiju (darbs = CP × laiks + W'):
- CP = 270W(regresijas līnijas slīpums)
- W' = 18,5 kJ(y-pārtveršana)
JavaScript ieviešana:
function calculateCP_Linear(efforts) {
// efforts = [{duration: seconds, power: watts}, ...]
const times = efforts.map(e => e.duration);
const work = efforts.map(e => e.power * e.duration / 1000); // kJ
// Linear regression: work = CP * time + W'
const n = efforts.length;
const sumT = times.reduce((a, b) => a + b, 0);
const sumW = work.reduce((a, b) => a + b, 0);
const sumTW = times.reduce((sum, t, i) => sum + t * work[i], 0);
const sumTT = times.reduce((sum, t) => sum + t * t, 0);
const CP = (n * sumTW - sumT * sumW) / (n * sumTT - sumT * sumT);
const Wprime = (sumW - CP * sumT) / n;
return {
CP: Math.round(CP * 10) / 10, // watts
Wprime: Math.round(Wprime * 10) / 10 // kJ
};
}
// Example usage:
const efforts = [
{duration: 180, power: 400},
{duration: 300, power: 365},
{duration: 720, power: 310},
{duration: 1200, power: 285}
];
const result = calculateCP_Linear(efforts);
// Returns: { CP: 270.0, Wprime: 18.5 }6. W' Balance (W'bal) — diferenciālvienādojuma modelis
Formulas:
W'exp(t) = ∫(P(t) - CP) dt
W'rec(t) = W' × (1 - e^(-t/τ))
un ΔCP = (CP — P(t))
Reālās pasaules piemērs:
Velosipēdistu specifikācijas:CP = 270 W, W' = 18,5 kJ
1. scenārijs — smags uzbrukums:
- Rider uz 30 sekundēm palielina jaudu līdz 400 W
- W' izdevumi: (400–270) × 30 = 3900 J = 3,9 kJ
- Atlikušais W'bal: 18,5 - 3,9 =14,6 kJ
2. scenārijs — atkopšana:
- Pēc uzbrukuma 2 minūtes samazinās līdz 200 W (70 W zem CP).
- ΔCP = 270 - 200 = 70 W
- τ = 546 × e^(-0,01 × 70) + 316 = 588 sekundes
- Atgūšana 120 s: 18,5 × (1 — e^(-120/588)) =Atgūti 3,5 kJ
- Jaunais W'bal: 14,6 + 3,5 =18,1 kJ
JavaScript ieviešana:
function calculateWbalance(powerData, CP, Wprime) {
// powerData = array of {time: seconds, power: watts}
let wbal = Wprime * 1000; // Convert to joules
const wbalHistory = [];
for (let i = 1; i < powerData.length; i++) {
const dt = powerData[i].time - powerData[i-1].time;
const power = powerData[i].power;
if (power > CP) {
// Expenditure above CP
const expenditure = (power - CP) * dt;
wbal -= expenditure;
} else {
// Recovery below CP
const deltaCP = CP - power;
const tau = 546 * Math.exp(-0.01 * deltaCP) + 316;
const recovery = (Wprime * 1000 - wbal) * (1 - Math.exp(-dt / tau));
wbal += recovery;
}
// Ensure W'bal doesn't exceed max or go negative
wbal = Math.max(0, Math.min(wbal, Wprime * 1000));
wbalHistory.push({
time: powerData[i].time,
wbal: wbal / 1000, // kJ
percent: (wbal / (Wprime * 1000)) * 100
});
}
return wbalHistory;
}
// Example usage:
const powerData = [
{time: 0, power: 200},
{time: 1, power: 210},
// ... rest of ride data
];
const wbalHistory = calculateWbalance(powerData, 270, 18.5);
// Returns array of W'bal values over timeVeiktspējas pārvaldības diagramma (PMC) riteņbraukšanai
7. CTL, ATL, TSB aprēķini
Formulas (eksponenciāli svērtie mainīgie vidējie lielumi):
Metrikas definīcijas:
- CTL (hroniska treniņu slodze):42 dienu eksponenciāli svērtais vidējais rādītājs — atspoguļo fizisko sagatavotību
- ATL (akūta treniņu slodze):7 dienu eksponenciāli svērtais vidējais rādītājs – atspoguļo nogurumu
- TSB (Treniņa stresa līdzsvars):Forma = Fitness - Nogurums
Nostrādāts piemērs (7 dienu apmācības bloks):
| diena | TSS | CTL | ATL | TSB | Statuss |
|---|---|---|---|---|---|
| Pirmd | 100 | 75,0 | 80.0 | -5,0 | Apmācība |
| Otr | 50 | 74.4 | 75.7 | -1.3 | Atveseļošanās |
| Tr | 120 | 75.5 | 82,0 | -6.5 | Smags treniņš |
| Ce | 0 | 73.7 | 70.3 | +3.4 | Atpūtas diena |
| Piekt | 80 | 73.8 | 71.7 | +2.1 | Mērens |
| sestdien | 150 | 75.6 | 82.9 | -7.3 | Garais brauciens |
| Sv | 40 | 74.8 | 76.8 | -2,0 | Atveseļošanās |
TSB interpretācija:
| TSB diapazons | Statuss | Darbība |
|---|---|---|
| < -30 | Augsts risks | Brīdinājums par pārtrenēšanos – samaziniet slodzi |
| -30 līdz -10 | Smags treniņš | Fitnesa veidošana, uzraudzīt atveseļošanos |
| -10 līdz +5 | Optimāli | Normāla treniņu zona |
| +5 līdz +15 | Sacensībām gatavs | Maksimālā forma - sacensības šajā nedēļas nogalē |
| > +25 | Atkāpšanās no apmācības | Fitnesa zudums - palielināt slodzi |
JavaScript ieviešana:
function calculatePMC(workouts) {
// workouts = [{date: "YYYY-MM-DD", tss: number}, ...]
let ctl = 0, atl = 0;
const results = [];
workouts.forEach(workout => {
// Update CTL (42-day time constant)
ctl = ctl + (workout.tss - ctl) / 42;
// Update ATL (7-day time constant)
atl = atl + (workout.tss - atl) / 7;
// Calculate TSB (yesterday's CTL - today's ATL for traditional calculation)
// For simplicity here using current values
const tsb = ctl - atl;
results.push({
date: workout.date,
tss: workout.tss,
ctl: Math.round(ctl * 10) / 10,
atl: Math.round(atl * 10) / 10,
tsb: Math.round(tsb * 10) / 10,
status: getTSBStatus(tsb)
});
});
return results;
}
function getTSBStatus(tsb) {
if (tsb < -30) return "High Risk";
if (tsb < -10) return "Training Hard";
if (tsb < 5) return "Optimal";
if (tsb < 15) return "Race Ready";
return "Detraining";
}
// Example usage:
const workouts = [
{date: "2025-01-01", tss: 100},
{date: "2025-01-02", tss: 50},
{date: "2025-01-03", tss: 120},
// ... more workouts
];
const pmc = calculatePMC(workouts);
// Returns array with CTL, ATL, TSB for each dayJaudas attiecība pret svaru un kāpšanas metrika
8.Jaudas un svara attiecība
Formula:
FTP W/kg kritēriji:
| Līmenis | Vīrietis W/kg | Sieviete W/kg | Kategorija |
|---|---|---|---|
| Atpūtas | 2,5 - 3,5 | 2,0 - 3,0 | Fitnesa braucējs |
| Konkurētspējīgs | 3,5 - 4,5 | 3,0 - 4,0 | Kaķis 3-4, vecuma grupas braucējs |
| Papildu | 4,5 - 5,5 | 4,0 - 5,0 | Kaķis 1-2, spēcīgs amatieris |
| Elites amatieris | 5,5 - 6,0 | 5,0 - 5,5 | Valsts līmenī |
| Profesionāls | 6,0–7,0+ | 5,5–6,5+ | Pasaules tūre, Grand Tour GC |
Aprēķina piemērs:
Scenārijs:Velosipēdists ar FTP = 275W, ķermeņa masa = 70kg
W/kg = 275/70 =3,93 W/kg
Interpretācija: Konkurētspējīgs līmenis, spējīgs kalnainās sacīkstēs
function calculateWattsPerKg(power, bodyMassKg) {
return (power / bodyMassKg).toFixed(2);
}
// Example:
const wpkg = calculateWattsPerKg(275, 70);
// Returns: 3.939. VAM (Velocità Ascensionale Media)
Formula:
VAM etaloni:
| VAM (m/h) | Līmenis | Piemērs |
|---|---|---|
| 600–900 | Atpūtas | Kluba braucējs vietējā kāpumā |
| 900–1200 | Konkurētspējīgs | Labs amatieris Alpe d'Huez |
| 1200–1500 | Elites amatieris | Nacionālā līmeņa alpīnists |
| 1500–1800 | Profesionāls | Vietējā pasaules tūre |
| > 1800 | Grand Tour uzvarētājs | Pogačar, Vingegaard par galvenajiem kāpumiem |
Aprēķina piemērs:
Scenārijs:Alpe d'Huez kāpiens
- Augstuma pieaugums: 1100 metri
- Laiks: 55 minūtes = 0,917 stundas
- VAM = 1100 / 0,917 =1200 m/h
Interpretācija: Sacensību līmeņa kāpšanas sniegums
function calculateVAM(elevationGainMeters, timeMinutes) {
const hours = timeMinutes / 60;
return Math.round(elevationGainMeters / hours);
}
// Example:
const vam = calculateVAM(1100, 55);
// Returns: 1200 m/h10. VAM līdz W/kg aprēķins
Formula:
Aprēķina piemērs:
Scenārijs:Kāpiens ar 8% vidējo gradientu, VAM = 1200 m/h
W/kg = 1200 / 100 / (8 + 3)
W/kg = 12/11 =4,36 W/kg
Savstarpēja pārbaude: ar 70 kg smagu braucēju → 305 W ilgstoša jauda kāpšanas laikā
function estimateWkgFromVAM(vam, gradientPercent) {
return (vam / 100 / (gradientPercent + 3)).toFixed(2);
}
// Example:
const wkg = estimateWkgFromVAM(1200, 8);
// Returns: 4.36Aerodinamiskās jaudas vienādojums
11. Kopējās jaudas prasības
Pilnīga formula:
Komponentu formulas:
P_aero = CdA × 0,5 × ρ × V³
P_gravitācija = m × g × sin(θ) × V
P_ritēšana = Crr × m × g × cos(θ) × V
P_kinētiskā = m × a × V
Konstantes un mainīgie:
- CdA= pretestības koeficients × frontālais laukums (m²)
- Tipiski šosejas velosipēdu pārsegi: 0,35-0,40 m²
- Pilieni: 0,32-0,37 m²
- TT pozīcija: 0,20-0,25 m²
- ρ= Gaisa blīvums (1,225 kg/m³ jūras līmenī, 15°C)
- V= Ātrums (m/s)
- m= Kopējā masa (braucējs + velosipēds, kg)
- g= gravitācija (9,81 m/s²)
- θ= Gradienta leņķis (pārrēķināts radiānos vai grādos)
- Crr= Rites pretestības koeficients (~0,004 labām ceļa riepām)
- a= Paātrinājums (m/s²)
Nostrādāts piemērs (līdzena ceļa TT):
Scenārijs:
- Ātrums: 40 km/h = 11,11 m/s
- CdA: 0,22 m² (laba TT pozīcija)
- Kopējā masa: 75kg (braucējs) + 8kg (velosipēds) = 83kg
- Līdzens ceļš (slīpums = 0°)
- Pastāvīgs ātrums (paātrinājums = 0)
Aprēķins:
- P_aero= 0,22 × 0,5 × 1,225 × 11,11³ =185W
- P_gravitācija= 0 W (līdzens ceļš)
- P_rolling= 0,004 × 83 × 9,81 × 11,11 =36 W
- P_kinētiskais= 0 W (pastāvīgs ātrums)
- P_kopā= 185 + 0 + 36 + 0 =221W
Interpretācija: Nepieciešams 221 W, lai izturētu 40 km/h TT pozīcijā uz līdzena ceļa
JavaScript ieviešana:
function calculatePowerRequired(params) {
const {
velocityKph,
CdA = 0.32, // m²
rho = 1.225, // kg/m³
mass = 83, // kg (rider + bike)
gradientPercent = 0, // %
Crr = 0.004, // rolling resistance
accelerationMps2 = 0 // m/s²
} = params;
// Convert velocity to m/s
const V = velocityKph / 3.6;
// Convert gradient to angle
const theta = Math.atan(gradientPercent / 100);
// Calculate each component
const P_aero = CdA * 0.5 * rho * Math.pow(V, 3);
const P_gravity = mass * 9.81 * Math.sin(theta) * V;
const P_rolling = Crr * mass * 9.81 * Math.cos(theta) * V;
const P_kinetic = mass * accelerationMps2 * V;
return {
total: Math.round(P_aero + P_gravity + P_rolling + P_kinetic),
aero: Math.round(P_aero),
gravity: Math.round(P_gravity),
rolling: Math.round(P_rolling),
kinetic: Math.round(P_kinetic)
};
}
// Example: TT at 40 km/h
const power_tt = calculatePowerRequired({
velocityKph: 40,
CdA: 0.22,
mass: 83,
gradientPercent: 0
});
// Returns: { total: 221, aero: 185, gravity: 0, rolling: 36, kinetic: 0 }
// Example: 8% climb at 15 km/h
const power_climb = calculatePowerRequired({
velocityKph: 15,
CdA: 0.38,
mass: 75,
gradientPercent: 8
});
// Returns: { total: 265, aero: 27, gravity: 244, rolling: 11, kinetic: 0 }Palīdzības funkcijas
Vienību konvertēšanas utilītas
JavaScript ieviešana:
// Time conversions
function hoursToSeconds(hours) {
return hours * 3600;
}
function minutesToSeconds(minutes) {
return minutes * 60;
}
function secondsToHours(seconds) {
return seconds / 3600;
}
function formatDuration(seconds) {
const hours = Math.floor(seconds / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
const secs = Math.round(seconds % 60);
return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
}
// Speed conversions
function kphToMps(kph) {
return kph / 3.6;
}
function mpsToKph(mps) {
return mps * 3.6;
}
// Energy conversions
function joulesTo kJ(joules) {
return joules / 1000;
}
function kJToJoules(kJ) {
return kJ * 1000;
}
function wattsToKJ(watts, durationSeconds) {
return (watts * durationSeconds) / 1000;
}
// Examples:
formatDuration(7265); // Returns: "2:01:05"
kphToMps(40); // Returns: 11.11 m/s
wattsToKJ(250, 3600); // Returns: 900 kJ (1 hour at 250W)Īstenošanas resursi
Visas šajā lapā esošās formulas ir gatavas ražošanai un apstiprinātas, pamatojoties uz zinātnisko literatūru un reāliem jaudas mērītāja datiem. Izmantojiet tos pielāgotiem analītikas rīkiem, verifikācijai vai padziļinātai izpratnei par uz jaudu balstītiem apmācības aprēķiniem.
💡 Labākā prakse
- Apstipriniet ievades:Pārbaudiet saprātīgus jaudas diapazonus (0-2000 W), pozitīvus ilgumus
- Roktura malas futrāļi:Dalījums ar nulli, nulles/nenodefinēti dati, trūkst FTP
- Pareizi noapaļot:CTL/ATL/TSB līdz 1 zīmei aiz komata, TSS līdz veselam skaitlim, W/kg līdz 2 zīmēm aiz komata
- Veikala precizitāte:Saglabājiet datu bāzē pilnu precizitāti, noapaļojiet tikai attēlošanai
- Laika joslas:Konsekventi apstrādājiet UTC laiku salīdzinājumā ar vietējo laiku, lai veiktu vairāku dienu analīzi
- Jaudas mērītāja kalibrēšana:Pirms braucieniem atgādiniet lietotājiem par nulles nobīdi
- FTP validācija:Atzīmējiet aizdomīgas FTP vērtības (>500 W vai <100 W pieaugušajiem)
- Rūpīgi pārbaudiet:Lai pārbaudītu aprēķinus, izmantojiet labi zināmus braucienu failus
Peldēšanas snieguma formulas: CSS, TSS, CTL/ATL aprēķini
Pilnīgas matemātiskās formulas peldēšanas analītikai. Apgūstiet, kā manuāli aprēķināt FTP, sTSS, CTL, ATL, TSB. Ietver atrisinātos piemērus, atvasinājumus un.
- 2026-03-24
- peldēšanas formulas · CSS aprēķins · TSS formula · treniņu matemātika
- Bibliogrāfija
