Формуле снаге за бициклизам

Матхематицал Фоундатион оф Бике Аналитицс Метрицс

Водич за имплементацију

Ова страница пружа формуле за копирање и лепљење и методе израчунавања корак по корак за све метрике Бике Аналитицс. Користите их за прилагођене имплементације, верификацију или дубље разумевање обуке засноване на снази.

⚠ Напомене о примени

  • Све вредности снаге у ватима (В), време у секундама осим ако није наведено
  • ПРОТЕЦТ10Кс и ЦП су индивидуално-специфични прагови – нема универзалних вредности
  • Увек проверите уносе за разумне опсеге (0-2000В типично)
  • Руковати ивичним случајевима (подела нулом, негативна снага)
  • Подаци о снази захтевају интервале снимања од 1 секунде за тачност

метрика перформанси језгра бициклизма

1. Оцена стреса на тренингу (ПРОТЕЦТ1Кс)

Формула:

ПРОТЕЦТ1Кс = (дуратион_сецондс × НП × ПРОТЕЦТ15Кс) / (ПРОТЕЦТ10Кс × 3600) × 100
где је ПРОТЕЦТ15Кс = НП / ПРОТЕЦТ10Кс

Урађен пример:

Сценарио:2 сата вожње, НП = 235В, ПРОТЕЦТ10Кс = 250В

  1. Израчунајте ПРОТЕЦТ15Кс: ПРОТЕЦТ15Кс = 235 / 250 = 0,94
  2. Трајање у секундама: 2 сата × 3600 = 7200 секунди
  3. ПРОТЕЦТ1Кс = (7200 × 235 × 0,94) / (250 × 3600) × 100
  4. ПРОТЕЦТ1Кс = 1.590.720 / 900.000 × 100 =176.7 ПРОТЕЦТ1Кс

Тумачење: Тешка тренинг вожња (>150 ПРОТЕЦТ1Кс), очекујте опоравак 2-3 дана

Имплементација ЈаваСцрипт-а:

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. Нормализована снага (НП)

Алгоритам (30-секундни покретни просек):

1. Израчунајте просечну снагу од 30 секунди за целу вожњу
2. Подигните сваку вредност од 30 секунди на 4. степен
3. Узмите просек свих ових ^4 вредности
4. Узмите 4. корен тог просека
НП = ⁴√(просек од [30с_авг^4])

Зашто 4. моћ?

Квартични (4. степен) однос одражава нелинеарну физиолошку цену променљивих напора. Вожња са пренапоном и опоравком кошта више енергије него стабилна снага при истом просеку.

Пример:

  • Стална вожња: 200В током 1 сата → НП = 200В, просек = 200В
  • Променљива вожња: наизменична 300В/100В → Просечна = 200В, НП = 225В

Иста просечна снага, али променљива вожња има 12% већи НП због физиолошких трошкова пренапона

Имплементација ЈаваСцрипт-а:

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. Фактор интензитета (ПРОТЕЦТ15Кс)

Формула:

ПРОТЕЦТ15Кс = НП / ПРОТЕЦТ10Кс

Опсези тумачења:

ПРОТЕЦТ15Кс РангеНиво напораПример вежбања
< 0,75Опоравак / ЛакоВожња активног опоравка, зона 1-2
0,75 - 0,85ИздржљивостДуга стабилна вожња, аеробна база
0,85 - 0,95ТемпоСвеет спот тренинг, темпо интервали
0,95 - 1,05ПрагПРОТЕЦТ10Кс интервали, временска проба
1.05 - 1.15ПРОТЕЦТ5КсИнтервали од 5 минута, критеријумска трка
> 1.15АнаеробнаКратки спринтови, напади, МТБ рафали

Пример израчунавања:

Сценарио:НП = 235В, ПРОТЕЦТ10Кс = 250В

ПРОТЕЦТ15Кс = 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.Индекс варијабилности (ВИ)

Формула:

ВИ = НП / Просечна снага

Интерпретација према дисциплини:

ДисциплинаТипично ВИЗначење
Роад ТТ / Стеади Еффорт1.00 - 1.05Веома конзистентна снага, оптималан пејсинг
Друмске трке1.05 - 1.10Неки скокови, углавном стабилни
Критеријум1.10 - 1.20Честа убрзања и напади
Моунтаин Бике КСЦ1,15 - 1,30+Веома варијабилни, константни пренапони

Пример израчунавања:

Друмска трка:НП = 240В, просечна снага = 230В

ВИ = 240 / 230 =1.04(стабилан темпо)

МТБ трка:НП = 285В, просечна снага = 235В

ВИ = 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

Критична снага и В' (анаеробни капацитет)

5. Критична снага (ЦП) – линеарни модел

Формула:

Време = В' / (снага - ЦП)
Преуређено: снага × време = ЦП × време + В'

Израчунавање из вишеструких напора:

Захтева 2-4 максимална напора у различитом трајању (нпр. 3, 5, 12, 20 минута)

Пример података:

ТрајањеСнага (В)Укупан рад (кЈ)
3 мин (180 с)400В72 кЈ
5 мин (300 с)365В109,5 кЈ
12 мин (720 с)310В223,2 кЈ
20 мин (1200 с)285В342 кЈ

Коришћењем линеарне регресије (рад = ЦП × време + В'):

  • ЦП = 270В(нагиб линије регресије)
  • В' = 18,5 кЈ(и-пресецање)

Имплементација ЈаваСцрипт-а:

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. В' Баланце (В'бал) - Модел диференцијалне једначине

Формуле:

Расходи (када је П > ЦП):
В'екп(т) = ∫(П(т) - ЦП) дт
Опоравак (када је П < ЦП):
В'рец(т) = В' × (1 - е^(-т/τ))
где је τ = 546 × е^(-0,01 × ΔЦП) + 316
и ΔЦП = (ЦП - П(т))

Пример из стварног света:

Спецификације бициклиста:ЦП = 270В, В' = 18,5 кЈ

Сценарио 1 - Тешки напад:

  • Јахач расте на 400 В за 30 секунди
  • В' расход: (400 - 270) × 30 = 3,900 Ј = 3,9 кЈ
  • Преостало: 18,5 - 3,9 =14,6 кЈ

Сценарио 2 – Опоравак:

  • Након напада, пада на 200В (70В испод ЦП) током 2 минута
  • ΔЦП = 270 - 200 = 70В
  • τ = 546 × е^(-0,01 × 70) + 316 = 588 секунди
  • Опоравак за 120 с: 18,5 × (1 - е^(-120/588)) =3,5 кЈ опорављено
  • Нови В'бал: 14,6 + 3,5 =18,1 кЈ

Имплементација ЈаваСцрипт-а:

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

Табела управљања перформансама (ПРОТЕЦТ16Кс) за бициклизам

7. ПРОТЕЦТ2Кс, ПРОТЕЦТ3Кс, ПРОТЕЦТ4Кс прорачуни

Формуле (експоненцијално пондерисани покретни просеци):

ЦТЛ_данас = ЦТЛ_јуче + (ТСС_данас - ЦТЛ_јуче) / 42
АТЛ_данас = АТЛ_јуче + (ТСС_данас - АТЛ_јуче) / 7
ТСБ_данас = ЦТЛ_јуче - АТЛ_јуче

Дефиниције метрике:

  • ПРОТЕЦТ2Кс (хронично оптерећење током тренинга):42-дневни експоненцијално пондерисани просек - представља кондицију
  • ПРОТЕЦТ3Кс (Акутно оптерећење тренингом):7-дневни експоненцијално пондерисани просек - представља умор
  • ПРОТЕЦТ4Кс (равнотежа стреса у тренингу):Форма = Кондиција - Умор

Пример рада (7-дневни блок обуке):

ДанПРОТЕЦТ1КсПРОТЕЦТ2КсПРОТЕЦТ3КсПРОТЕЦТ4КсСтатус
пон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Опоравак

ПРОТЕЦТ4Кс Тумачење:

ПРОТЕЦТ4Кс РангеСтатусАкција
< -30Висок ризикУпозорење на претренираност - смањите оптерећење
-30 до -10Траининг ХардИзградња фитнеса, праћење опоравка
-10 до +5ОптималноНормална зона тренинга
+5 до +15Раце РеадиВрхунска форма - трка овог викенда
> +25ДетраинингГубитак кондиције - повећати оптерећење

Имплементација ЈаваСцрипт-а:

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.Однос снаге и тежине

Формула:

В/кг = Снага (вати) / Телесна маса (кг)

ПРОТЕЦТ10Кс В/кг Референтне вредности:

НивоМушки В/кгЖене В/кгКатегорија
Рекреативно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+Светска турнеја, Гранд Тоур ГЦ

Пример израчунавања:

Сценарио:Бициклиста са ПРОТЕЦТ10Кс = 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. ВАМ (Велоцита Асценсионале Медиа)

Формула:

ВАМ (м/х) = повећање надморске висине (м) / време (сати)

ВАМ бенцхмаркс:

ВАМ (м/х)НивоПример
600 - 900РецреатионалКлубски јахач на локалном успону
900 - 1200ЦомпетитивеДобар аматер на Алпе д'Хуез
1200 - 1500Елите АматеурПењач националног нивоа
1500 - 1800ПрофесионалниСветска турнеја доместикуе
> 1800Победник Гранд ТоураПогачар, Вингегаард на кључним успонима

Пример израчунавања:

Сценарио:Успон на Алпе д'Хуез

  • Висина: 1100 метара
  • Време: 55 минута = 0,917 сати
  • ВАМ = 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. Процена ВАМ у В/кг

Формула:

В/кг ≈ ВАМ (м/х) / 100 / (Градијент% + 3)

Пример израчунавања:

Сценарио:Успон са просечним градијентом од 8%, ВАМ = 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. Укупни захтеви за напајање

Комплетна формула:

П_укупно = П_аеро + П_гравитација + П_ролање + П_кинетичко

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

Аеродинамички отпор:
П_аеро = ЦдА × 0,5 × ρ × В³
Гравитационо (пењање):
П_гравитација = м × г × син(θ) × В
Отпор котрљања:
П_роллинг = Црр × м × г × цос(θ) × В
Кинетичко (убрзање):
П_кинетички = м × а × В

Константе и променљиве:

  • ЦдА= Коефицијент отпора × фронтална површина (м²)
    • Типичне хаубе за друмске бицикле: 0,35-0,40 м²
    • Капи: 0,32-0,37 м²
    • ТТ позиција: 0,20-0,25 м²
  • ρ= Густина ваздуха (1,225 кг/м³ на нивоу мора, 15°Ц)
  • В= брзина (м/с)
  • м= Укупна маса (јахач + бицикл, кг)
  • г= Гравитација (9,81 м/с²)
  • θ= Угао градијента (конвертовани радијани или степени)
  • Црр= Коефицијент отпора котрљања (~0,004 за добре путне гуме)
  • а= Убрзање (м/с²)

Радни пример (Раван пут ТТ):

Сценарио:

  • Брзина: 40 км/х = 11,11 м/с
  • ЦдА: 0,22 м² (добра ТТ позиција)
  • Укупна маса: 75 кг (јахач) + 8 кг (бицикл) = 83 кг
  • Раван пут (нагиб = 0°)
  • Константна брзина (убрзање = 0)

Обрачун:

  1. П_аеро= 0,22 × 0,5 × 1,225 × 11,11³ =185В
  2. П_гравитација= 0В (равни пут)
  3. П_роллинг= 0,004 × 83 × 9,81 × 11,11 =36В
  4. П_кинетиц= 0В (константна брзина)
  5. П_тотал= 185 + 0 + 36 + 0 =221В

Тумачење: Потребно 221 В да би се издржало 40 км/х у ТТ позицији на равном путу

Имплементација ЈаваСцрипт-а:

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 }

Помоћне функције

Услужни програми за конверзију јединица

Имплементација ЈаваСцрипт-а:

// 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В), позитивна трајања
  • Руковати ивичним кућиштима:Дељење нулом, нулти/недефинисани подаци, недостаје ПРОТЕЦТ10Кс
  • Заокружите на одговарајући начин:ПРОТЕЦТ2Кс/ПРОТЕЦТ3Кс/ПРОТЕЦТ4Кс до 1 децимале, ПРОТЕЦТ1Кс до целог броја, В/кг до 2 децимале
  • Прецизност чувања:Задржите пуну прецизност у бази података, округли само за приказ
  • Временске зоне:Доследно управљајте УТЦ у односу на локално време за вишедневну анализу
  • Калибрација мерача снаге:Подсетите кориснике на нулти офсет пре вожње
  • ПРОТЕЦТ10Кс валидација:Означите сумњиве ПРОТЕЦТ10Кс вредности (>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, CTL/ATL

Комплетне математичке формуле за аналитику пливања. Научите како ручно израчунати FTP, sTSS, CTL, ATL, TSB. Укључује решене примере, изводе и објашњења.

  • 2026-03-24
  • формуле пливања · израчунавање CSS · формула TSS · математика тренинга
  • Bibliografija