Велосипедні формули потужності

Математична основа показників аналітики велосипедів

Посібник із впровадження

Ця сторінка містить формули копіювання та вставлення та покрокові методи розрахунку для всіх показників Bike Analytics. Використовуйте їх для індивідуальних реалізацій, перевірки або глибшого розуміння навчання на основі потужності.

⚠️ Примітки щодо впровадження

  • Усі значення потужності у ватах (Вт), час у секундах, якщо не вказано
  • FTP і CP є індивідуальними пороговими значеннями, універсальних значень немає
  • Завжди перевіряйте вхідні дані для розумних діапазонів (0-2000 Вт типово)
  • Обробка граничних випадків (ділення на нуль, негативний ступінь)
  • Для точності даних про потужність потрібні 1-секундні інтервали запису

Велосипедні основні показники ефективності

1. Оцінка тренувального стресу (TSS)

формула:

TSS = (тривалість_секунди × NP × IF) / (FTP × 3600) × 100
де IF = NP / FTP

Спрацьований приклад:

Сценарій:2 години їзди, NP = 235 Вт, FTP = 250 Вт

  1. Обчисліть IF: IF = 235 / 250 = 0,94
  2. Тривалість у секундах: 2 години × 3600 = 7200 секунд
  3. TSS = (7200 × 235 × 0,94) / (250 × 3600) × 100
  4. TSS = 1 590 720 / 900 000 × 100 =176.7 ЗАХИСТИТИ1X

Інтерпретація: важка тренувальна поїздка (>150 TSS), очікуйте 2-3 дні відновлення

Реалізація JavaScript:

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: 177

2. Нормована потужність (NP)

Алгоритм (30-секундне ковзне середнє):

1. Обчисліть ковзну середню потужність за 30 секунд для всієї поїздки
2. Підніміть кожне 30-секундне значення до 4-го ступеня
3. Візьміть середнє значення всіх цих ^4 значень
4. Візьміть 4-й корінь цього середнього
NP = ⁴√ (середнє [30s_avg^4])

Чому 4-та влада?

Квартичне співвідношення (4-й ступінь) відображає нелінійну фізіологічну вартість змінних зусиль. Поїздка зі скачками та відновленням потребує більше енергії, ніж постійна потужність у середньому.

приклад:

  • Постійна їзда: 200 Вт протягом 1 години → NP = 200 Вт, середнє значення = 200 Вт
  • Змінна їзда: чергування 300 Вт/100 Вт → Середнє = 200 Вт, NP = 225 Вт

Така сама середня потужність, але змінна їзда має на 12% вищий NP через фізіологічну вартість стрибків

Реалізація JavaScript:

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 watts

3. Коефіцієнт інтенсивності (IF)

формула:

IF = NP / FTP

Діапазон інтерпретації:

Асортимент IFРівень зусильПриклад тренування
< 0,75Відновлення / ЛегкоАктивно відновлювальна їзда, зона 1-2
0,75 - 0,85ВитривалістьДовга рівномірна їзда, аеробна основа
0,85 - 0,95ТемпSweet spot тренування, темпові інтервали
0,95 - 1,05ПорігІнтервали FTP, спроби на час
1,05 - 1,15VO₂max5-хвилинні інтервали, критеріальна гонка
> 1,15АнаеробнийКороткі спринти, атаки, горні ривки

Приклад розрахунку:

Сценарій:NP = 235 Вт, FTP = 250 Вт

ЗАХИСТИТИ15X = 235 / 250 =0,94

Інтерпретація: високий темп / підпорогове зусилля, тривале протягом 2-3 годин

function calculateIF(normalizedPower, ftp) {
  return (normalizedPower / ftp).toFixed(2);
}

// Example:
const if_value = calculateIF(235, 250);
// Returns: 0.94

4.Індекс мінливості (VI)

формула:

VI = NP / Середня потужність

Інтерпретація за дисциплінами:

ДисциплінованістьТиповий VIЗначення
Road TT / Steady Effort1.00 - 1.05Дуже постійна потужність, оптимальний темп
Шосейні гонки1.05 - 1.10Деякі сплески, загалом стабільні
Критерій1,10 - 1,20Часті прискорення і напади
Гірський велосипед XC1,15 - 1,30+Дуже мінлива, постійні сплески

Приклад розрахунку:

Шосейні гонки:NP = 240 Вт, середня потужність = 230 Вт

VI = 240 / 230 =1.04(рівний крок)

Гонка MTB:NP = 285 Вт, середня потужність = 235 Вт

VI = 285 / 235 =1.21(дуже мінливі, вибухові зусилля)

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.21

Критична потужність і W' (анаеробна ємність)

5. Критична потужність (CP) - лінійна модель

формула:

Час = Вт' / (Потужність - CP)
Переставлено: потужність × час = CP × час + W'

Обчислення з кількох зусиль:

Вимагає 2-4 максимальних зусиль різної тривалості (наприклад, 3, 5, 12, 20 хвилин)

Приклад даних:

ТривалістьПотужність (Вт)Загальна робота (кДж)
3 хв (180 с)400 Вт72 кДж
5 хв (300 с)365 Вт109,5 кДж
12 хв (720 с)310 Вт223,2 кДж
20 хв (1200 с)285 Вт342 кДж

Використання лінійної регресії (Робота = CP × Час + W'):

  • CP = 270 Вт(нахил лінії регресії)
  • W' = 18,5 кДж(у-перетин)

Реалізація JavaScript:

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) - модель диференціального рівняння

Формули:

Витрати (коли P > CP):
W'exp(t) = ∫(P(t) - CP) dt
Відновлення (коли P < CP):
W'rec(t) = W' × (1 - e^(-t/τ))
де τ = 546 × e^(-0,01 × ΔCP) + 316
і ΔCP = (CP - P(t))

Приклад реального світу:

Характеристики велосипедиста:CP = 270 Вт, W' = 18,5 кДж

Сценарій 1 - жорстка атака:

  • Райдер зростає до 400 Вт на 30 секунд
  • Витрати W': (400 - 270) × 30 = 3900 Дж = 3,9 кДж
  • Залишок W'bal: 18,5 - 3,9 =14,6 кДж

Сценарій 2 - Відновлення:

  • Після атаки падає до 200 Вт (70 Вт нижче CP) протягом 2 хвилин
  • ΔCP = 270 - 200 = 70 Вт
  • τ = 546 × e^(-0,01 × 70) + 316 = 588 секунд
  • Відновлення за 120 с: 18,5 × (1 - e^(-120/588)) =Відновлено 3,5 кДж
  • Новий W'bal: 14,6 + 3,5 =18,1 кДж

Реалізація JavaScript:

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 time

Таблиця управління продуктивністю (PMC) для велоспорту

7. Обчислення CTL, ATL, TSB

Формули (експоненціально зважені ковзні середні):

CTL_сьогодні = CTL_вчора + (TSS_сьогодні - CTL_вчора) / 42
ATL_today = ATL_yesterday + (TSS_today - ATL_yesterday) / 7
TSB_today = CTL_yesterday - ATL_yesterday

Визначення показників:

  • CTL (хронічне навантаження під час тренувань):42-денне експоненціально зважене середнє – відображає придатність
  • ATL (Гостре тренувальне навантаження):7-денне експоненціально зважене середнє – означає втому
  • TSB (Баланс тренувального стресу):Форма = Фітнес - Втома

Приклад роботи (7-денний навчальний блок):

ДеньЗАХИСТИТИ1XCTLATLTSBСтатус
Пн10075,080,0-5,0Навчання
Вт5074.475.7-1,3Відновлення
ср12075.582,0-6,5Важкі тренування
чт073.770.3+3,4День відпочинку
пт8073.871.7+2,1Помірний
сб15075.682.9-7,3Довга поїздка
сонце4074.876.8-2,0Відновлення

Інтерпретація TSB:

Асортимент TSBСтатусДія
< -30Високий ризикПопередження про перетренованість - зменшіть навантаження
-30 до -10Наполегливі тренуванняПобудова фітнесу, моніторинг відновлення
від -10 до +5ОптимальнийНормальна тренувальна зона
від +5 до +15Гонка готоваПік форми - гонка цими вихідними
> +25ДетренуванняВтрата фізичної форми - збільшення навантаження

Реалізація JavaScript:

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 day

Показники відношення сили до ваги та лазіння

8.Співвідношення потужності до ваги

формула:

Вт/кг = потужність (ват) / маса тіла (кг)

FTP Вт/кг Контрольні показники:

РівеньЧоловік Вт/кгЖінка Вт/кгКатегорія
Рекреаційний2,5 - 3,52,0 - 3,0Фітнес-райдер
Змагальний3,5 - 4,53,0 - 4,0Кот 3-4 вікова група гонщик
Просунутий4,5 - 5,54,0 - 5,0Кот 1-2, сильний любитель
Елітний аматор5,5 - 6,05,0 - 5,5Національний рівень
професійний6,0 - 7,0+5,5 - 6,5+World Tour, Grand Tour GC

Приклад розрахунку:

Сценарій:Велосипедист із FTP = 275 Вт, маса тіла = 70 кг

Вт/кг = 275 / 70 =3,93 Вт/кг

Інтерпретація: Змагальний рівень, здатний до горбистих перегонів

function calculateWattsPerKg(power, bodyMassKg) {
  return (power / bodyMassKg).toFixed(2);
}

// Example:
const wpkg = calculateWattsPerKg(275, 70);
// Returns: 3.93

9. VAM (Velocità Ascensionale Media)

формула:

VAM (м/год) = набір висоти (м) / час (години)

Контрольні показники VAM:

VAM (м/год)Рівеньприклад
600 - 900РекреаційнийКлубний вершник на місцевому сходженні
900 - 1200ЗмагальнийХороший аматор на Альп д'Юез
1200 - 1500Елітний аматорАльпініст національного рівня
1500 - 1800професійнийВітчизняне світове турне
> 1800Переможець Гранд ТуруПогачар, Вінгегард на ключових сходженнях

Приклад розрахунку:

Сценарій:Підйом на Альп д'Юез

  • Перепад висоти: 1100 метрів
  • Час: 55 хвилин = 0,917 години
  • VAM = 1100 / 0,917 =1200 м/год

Інтерпретація: скелелазіння змагального рівня

function calculateVAM(elevationGainMeters, timeMinutes) {
  const hours = timeMinutes / 60;
  return Math.round(elevationGainMeters / hours);
}

// Example:
const vam = calculateVAM(1100, 55);
// Returns: 1200 m/h

10. Оцінка VAM у Вт/кг

формула:

Вт/кг ≈ VAM (м/год) / 100 / (Градієнт% + 3)

Приклад розрахунку:

Сценарій:Підйом із середнім градієнтом 8%, VAM = 1200 м/год

Вт/кг = 1200 / 100 / (8 + 3)

Вт/кг = 12 / 11 =4,36 Вт/кг

Перехресна перевірка: з райдером вагою 70 кг → 305 Вт стійка потужність на підйомі

function estimateWkgFromVAM(vam, gradientPercent) {
  return (vam / 100 / (gradientPercent + 3)).toFixed(2);
}

// Example:
const wkg = estimateWkgFromVAM(1200, 8);
// Returns: 4.36

Рівняння аеродинамічної потужності

11. Загальні вимоги до потужності

Повна формула:

P_total = P_aero + P_gravity + P_rolling + P_kinetic

Формули компонентів:

Аеродинамічний опір:
P_aero = CdA × 0,5 × ρ × V³
Гравітаційний (скелелазіння):
P_gravity = m × g × sin(θ) × V
Опір коченню:
P_rolling = Crr × m × g × cos(θ) × V
Кінетичний (прискорення):
P_kinetic = m × a × V

Константи та змінні:

  • CdA= Коефіцієнт опору × фронтальна площа (м²)
    • Типові капоти для шосейних велосипедів: 0,35-0,40 м²
    • Краплі: 0,32-0,37 м²
    • Положення ТТ: 0,20-0,25 м²
  • ρ= Густина повітря (1,225 кг/м³ на рівні моря, 15°C)
  • В= Швидкість (м/с)
  • м= Загальна маса (гонщик + велосипед, кг)
  • g= Сила тяжіння (9,81 м/с²)
  • θ= Кут градієнта (конвертовано в радіанах або градусах)
  • Crr= Коефіцієнт опору коченню (~0,004 для хороших дорожніх шин)
  • a= Прискорення (м/с²)

Спрацьований приклад (Flat Road TT):

Сценарій:

  • Швидкість: 40 км/год = 11,11 м/с
  • CdA: 0,22 м² (гарне положення TT)
  • Загальна вага: 75 кг (гонщик) + 8 кг (велосипед) = 83 кг
  • Рівна дорога (нахил = 0°)
  • Постійна швидкість (прискорення = 0)

Розрахунок:

  1. P_aero= 0,22 × 0,5 × 1,225 × 11,11³ =185 Вт
  2. P_гравітація= 0 Вт (рівна дорога)
  3. П_ролінг= 0,004 × 83 × 9,81 × 11,11 =36 Вт
  4. P_kinetic= 0 Вт (постійна швидкість)
  5. P_total= 185 + 0 + 36 + 0 =221 Вт

Інтерпретація: потрібно 221 Вт, щоб підтримувати швидкість 40 км/год у положенні TT на рівній дорозі

Реалізація JavaScript:

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 }

Допоміжні функції

Утиліти перетворення одиниць

Реалізація JavaScript:

// 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)

Ресурси впровадження

Усі формули на цій сторінці готові до виробництва та підтверджені відповідно до наукової літератури та реальних даних лічильників електроенергії. Використовуйте їх для користувацьких інструментів аналітики, перевірки або глибшого розуміння навчальних обчислень на основі потужності.

💡 Найкращі практики

  • Перевірити введені дані:Перевірте розумні діапазони потужності (0-2000 Вт), позитивну тривалість
  • Обробка крайових випадків:Ділення на нуль, нульові/невизначені дані, відсутній FTP
  • Округліть відповідно:CTL/ATL/TSB до 1 знака після коми, TSS до цілого числа, Вт/кг до 2 знаків після коми
  • Точність зберігання:Зберігайте повну точність у базі даних, круглі лише для відображення
  • Часові пояси:Послідовно обробляйте UTC і місцевий час для багатоденного аналізу
  • Калібрування вимірювача потужності:Нагадуйте користувачам про нульове зміщення перед поїздками
  • Перевірка FTP:Позначити підозрілі значення FTP (>500 Вт або <100 Вт для дорослих)
  • Ретельно протестуйте:Використовуйте завідомо справні файли поїздок для перевірки розрахунків

Expertly Reviewed by

This content has been written and reviewed by a sports data metrics expert to ensure technical accuracy and adherence to the latest sports science methodologies.

Формули Продуктивності в Плаванні: Розрахунки CSS, TSS,

Повні математичні формули для аналітики плавання. Дізнайтеся, як вручну розрахувати FTP, sTSS, CTL, ATL, TSB. Включає розв'язані приклади, виводи та пояснення

  • 2026-03-24
  • формули плавання · розрахунок CSS · формула TSS · математика тренувань
  • Бібліографія