Формуле снаге за бициклизам
Матхематицал Фоундатион оф Бике Аналитицс Метрицс
Водич за имплементацију
Ова страница пружа формуле за копирање и лепљење и методе израчунавања корак по корак за све метрике Бике Аналитицс. Користите их за прилагођене имплементације, верификацију или дубље разумевање обуке засноване на снази.
⚠ Напомене о примени
- Све вредности снаге у ватима (В), време у секундама осим ако није наведено
- ПРОТЕЦТ10Кс и ЦП су индивидуално-специфични прагови – нема универзалних вредности
- Увек проверите уносе за разумне опсеге (0-2000В типично)
- Руковати ивичним случајевима (подела нулом, негативна снага)
- Подаци о снази захтевају интервале снимања од 1 секунде за тачност
метрика перформанси језгра бициклизма
1. Оцена стреса на тренингу (ПРОТЕЦТ1Кс)
Формула:
Урађен пример:
Сценарио:2 сата вожње, НП = 235В, ПРОТЕЦТ10Кс = 250В
- Израчунајте ПРОТЕЦТ15Кс: ПРОТЕЦТ15Кс = 235 / 250 = 0,94
- Трајање у секундама: 2 сата × 3600 = 7200 секунди
- ПРОТЕЦТ1Кс = (7200 × 235 × 0,94) / (250 × 3600) × 100
- ПРОТЕЦТ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: 1772. Нормализована снага (НП)
Алгоритам (30-секундни покретни просек):
Зашто 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 watts3. Фактор интензитета (ПРОТЕЦТ15Кс)
Формула:
Опсези тумачења:
| ПРОТЕЦТ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.944.Индекс варијабилности (ВИ)
Формула:
Интерпретација према дисциплини:
| Дисциплина | Типично ВИ | Значење |
|---|---|---|
| Роад ТТ / Стеади Еффорт | 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 - е^(-т/τ))
и ΔЦП = (ЦП - П(т))
Пример из стварног света:
Спецификације бициклиста:ЦП = 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Кс прорачуни
Формуле (експоненцијално пондерисани покретни просеци):
Дефиниције метрике:
- ПРОТЕЦТ2Кс (хронично оптерећење током тренинга):42-дневни експоненцијално пондерисани просек - представља кондицију
- ПРОТЕЦТ3Кс (Акутно оптерећење тренингом):7-дневни експоненцијално пондерисани просек - представља умор
- ПРОТЕЦТ4Кс (равнотежа стреса у тренингу):Форма = Кондиција - Умор
Пример рада (7-дневни блок обуке):
| Дан | ПРОТЕЦТ1Кс | ПРОТЕЦТ2Кс | ПРОТЕЦТ3Кс | ПРОТЕЦТ4Кс | Статус |
|---|---|---|---|---|---|
| пон | 100 | 75.0 | 80.0 | -5.0 | Обука |
| уто | 50 | 74.4 | 75.7 | -1.3 | Опоравак |
| ср | 120 | 75.5 | 82.0 | -6.5 | Хард Траининг |
| Тху | 0 | 73.7 | 70.3 | +3.4 | Дан одмора |
| пет | 80 | 73.8 | 71.7 | +2.1 | Умерено |
| Сат | 150 | 75.6 | 82.9 | -7.3 | Лонг Риде |
| Нед | 40 | 74.8 | 76.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,5 | 2,0 - 3,0 | Фитнес јахач |
| Цомпетитиве | 3,5 - 4,5 | 3,0 - 4,0 | Мачка 3-4, тркач старосне групе |
| Напредно | 4.5 - 5.5 | 4,0 - 5,0 | Мачка 1-2, јак аматер |
| Елите Аматеур | 5,5 - 6,0 | 5,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.939. ВАМ (Велоцита Асценсионале Медиа)
Формула:
ВАМ бенцхмаркс:
| ВАМ (м/х) | Ниво | Пример |
|---|---|---|
| 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/h10. Процена ВАМ у В/кг
Формула:
Пример израчунавања:
Сценарио:Успон са просечним градијентом од 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)
Обрачун:
- П_аеро= 0,22 × 0,5 × 1,225 × 11,11³ =185В
- П_гравитација= 0В (равни пут)
- П_роллинг= 0,004 × 83 × 9,81 × 11,11 =36В
- П_кинетиц= 0В (константна брзина)
- П_тотал= 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В за одрасле)
- Тестирајте темељно:Користите датотеке познате добре вожње да бисте проверили прорачуне
Формуле Перформанси Пливања: Израчунавања CSS, TSS, CTL/ATL
Комплетне математичке формуле за аналитику пливања. Научите како ручно израчунати FTP, sTSS, CTL, ATL, TSB. Укључује решене примере, изводе и објашњења.
- 2026-03-24
- формуле пливања · израчунавање CSS · формула TSS · математика тренинга
- Bibliografija
