فرمول های قدرت دوچرخه سواری
پایه ریاضی معیارهای تجزیه و تحلیل دوچرخه
راهنمای پیاده سازی
این صفحه فرمولهای کپی پیست و روشهای محاسبه گام به گام را برای تمام معیارهای Bike Analytics ارائه میکند. از این ها برای پیاده سازی های سفارشی، تأیید، یا درک عمیق تر آموزش مبتنی بر قدرت استفاده کنید.
⚠️ نکات اجرایی
- تمام مقادیر توان بر حسب وات (W)، زمان بر حسب ثانیه مگر اینکه مشخص شده باشد
- FTP و CP آستانههای ویژه فردی هستند—بدون ارزش جهانی
- همیشه ورودی ها را برای محدوده های معقول (0-2000 وات معمولی) اعتبارسنجی کنید
- موارد لبه دسته (تقسیم بر صفر، توان منفی)
- داده های قدرت برای دقت به فواصل ضبط 1 ثانیه ای نیاز دارند
دوچرخه سواری معیارهای اصلی عملکرد
1. امتیاز استرس تمرینی (TSS)
فرمول:
مثال کار شده:
سناریو:2 ساعت سواری، NP = 235W، FTP = 250W
- محاسبه IF: IF = 235 / 250 = 0.94
- مدت زمان بر حسب ثانیه: 2 ساعت × 3600 = 7200 ثانیه
- TSS = (7200 × 235 × 0.94) / (250 × 3600) × 100
- TSS = 1,590,720 / 900,000 × 100 =176.7 TSS
تفسیر: سواری تمرینی سخت (> 150 TSS)، انتظار 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. توان نرمال شده (NP)
الگوریتم (میانگین 30 ثانیه ای):
چرا قدرت چهارم؟
رابطه کوارتیک (قدرت 4) منعکس کننده هزینه فیزیولوژیکی غیرخطی تلاش های متغیر است. یک سواری با نوسانات و بازیابی انرژی بیشتری نسبت به توان ثابت در همان میانگین هزینه دارد.
مثال:
- سواری ثابت: 200 وات به مدت 1 ساعت → NP = 200 وات، میانگین = 200 وات
- سواری متغیر: متناوب 300W/100W → میانگین = 200W، NP = 225W
قدرت متوسط یکسان، اما سواری متغیر به دلیل هزینه فیزیولوژیکی نوسانات، 12 درصد NP بالاتر دارد
پیاده سازی جاوا اسکریپت:
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. ضریب شدت (IF)
فرمول:
محدوده های تفسیر:
| محدوده IF | سطح تلاش | نمونه تمرین |
|---|---|---|
| < 0.75 | ریکاوری / آسان | سواری ریکاوری فعال، منطقه 1-2 |
| 0.75 - 0.85 | استقامت | سواری ثابت طولانی پایه هوازی |
| 0.85 - 0.95 | تمپو | تمرین نقطه شیرین، فواصل تمپو |
| 0.95 - 1.05 | آستانه | فواصل FTP، تلاش آزمایشی زمانی |
| 1.05 - 1.15 | VO₂max | فواصل 5 دقیقه ای مسابقه معیار |
| > 1.15 | بی هوازی | سرعت های کوتاه، حملات، انفجارهای MTB |
محاسبه مثال:
سناریو:NP = 235W، FTP = 250W
IF = 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.شاخص تغییرپذیری (VI)
فرمول:
تفسیر رشته:
| انضباط | VI معمولی | معنی |
|---|---|---|
| جاده TT / تلاش مستمر | 1.00 - 1.05 | قدرت بسیار ثابت، سرعت بهینه |
| مسابقات جاده ای | 1.05 - 1.10 | برخی از نوسانات، عموماً ثابت |
| معیار | 1.10 - 1.20 | شتاب و حملات مکرر |
| دوچرخه کوهستان XC | 1.15 - 1.30+ | نوسانات بسیار متغیر، ثابت |
محاسبه مثال:
مسابقه جاده ای:NP = 240W، میانگین توان = 230W
VI = 240 / 230 =1.04(گام ثابت)
مسابقه MTB:NP = 285W، میانگین توان = 235W
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) - مدل خطی
فرمول:
محاسبه از چندین تلاش:
به 2-4 حداکثر تلاش در مدت زمان های مختلف (مثلاً 3، 5، 12، 20 دقیقه) نیاز دارد
داده های مثال:
| مدت زمان | توان (W) | کل کار (کیلوژول) |
|---|---|---|
| 3 دقیقه (180s) | 400 وات | 72 کیلوژول |
| 5 دقیقه (300 ثانیه) | 365 وات | 109.5 کیلوژول |
| 12 دقیقه (720s) | 310 وات | 223.2 کیلوژول |
| 20 دقیقه (1200s) | 285 وات | 342 کیلوژول |
با استفاده از رگرسیون خطی (Work = CP × Time + W'):
- CP = 270W(شیب خط رگرسیون)
- W' = 18.5 کیلوژول(y- intercept)
پیاده سازی جاوا اسکریپت:
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) - مدل معادلات دیفرانسیل
فرمول ها:
W'exp(t) = ∫(P(t) - CP) dt
W'rec(t) = W' × (1 - e^(-t/τ))
و ΔCP = (CP - P(t))
مثال دنیای واقعی:
مشخصات دوچرخه سوار:CP = 270W، W' = 18.5 کیلوژول
سناریو 1 - حمله سخت:
- رایدر به مدت 30 ثانیه به 400 وات می رسد
- هزینه W': (400 - 270) × 30 = 3900 J = 3.9 کیلوژول
- W'bal باقی مانده: 18.5 - 3.9 =14.6 کیلوژول
سناریو 2 - بازیابی:
- پس از حمله، به مدت 2 دقیقه به 200 وات (70 وات زیر CP) کاهش می یابد
- ΔCP = 270 - 200 = 70W
- τ = 546 × e^(-0.01 × 70) + 316 = 588 ثانیه
- بازیابی در 120s: 18.5 × (1 - e^(-120/588)) =3.5 کیلوژول بازیابی
- W'bal جدید: 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نمودار مدیریت عملکرد (PMC) برای دوچرخه سواری
7. محاسبات CTL، ATL، TSB
فرمول ها (میانگین های متحرک وزنی نمایی):
تعاریف متریک:
- CTL (بار آموزشی مزمن):میانگین وزنی نمایی 42 روزه - نشان دهنده تناسب اندام
- ATL (بار آموزشی حاد):میانگین وزنی نمایی 7 روزه - نشان دهنده خستگی
- TSB (تعادل استرس آموزشی):فرم = تناسب اندام - خستگی
مثال کار شده (بلوک آموزشی 7 روزه):
| روز | TSS | CTL | ATL | TSB | وضعیت |
|---|---|---|---|---|---|
| دوشنبه | 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 | بازیابی |
تعبیر TSB:
| محدوده TSB | وضعیت | اقدام |
|---|---|---|
| < -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.نسبت قدرت به وزن
فرمول:
معیارهای FTP W/Kg:
| سطح | نر W/kg | ماده W/kg | دسته |
|---|---|---|---|
| تفریحی | 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+ | تور جهانی، گرند تور جی سی |
محاسبه مثال:
سناریو:دوچرخه سوار با FTP = 275 وات، وزن بدن = 70 کیلوگرم
W/kg = 275 / 70 =3.93 وات بر کیلوگرم
تفسیر: سطح رقابتی، توانایی در مسابقات تپه ای
function calculateWattsPerKg(power, bodyMassKg) {
return (power / bodyMassKg).toFixed(2);
}
// Example:
const wpkg = calculateWattsPerKg(275, 70);
// Returns: 3.939. VAM (Velocità Ascensionale Media)
فرمول:
معیارهای VAM:
| VAM (m/h) | سطح | مثال |
|---|---|---|
| 600 - 900 | تفریحی | باشگاه سوار در صعود محلی |
| 900 - 1200 | رقابتی | آماتور خوب در Alpe d'Huez |
| 1200 - 1500 | آماتور نخبگان | کوهنورد سطح ملی |
| 1500 - 1800 | حرفه ای | تور جهانی داخلی |
| > 1800 | برنده گرند تور | پوگاچار، وینگگارد در صعودهای کلیدی |
محاسبه مثال:
سناریو:صعود Alpe d'Huez
- افزایش ارتفاع: 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/h10. VAM به W/kg برآورد
فرمول:
محاسبه مثال:
سناریو:صعود با شیب متوسط 8% VAM = 1200 m/h
W/kg = 1200 / 100 / (8 + 3)
W/kg = 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_aero = CdA × 0.5 × ρ × V³
P_گرانش = m × g × sin(θ) × V
P_rolling = Crr × m × g × cos(θ) × V
P_kinetic = m × a × V
ثابت ها و متغیرها:
- CdA= ضریب کشیدن × مساحت جلویی (m²)
- کاپوت دوچرخه های جاده ای معمولی: 0.35-0.40 متر مربع
- قطره: 0.32-0.37 متر مربع
- موقعیت TT: 0.20-0.25 متر مربع
- ρ= چگالی هوا (1.225 kg/m³ در سطح دریا، 15 درجه سانتی گراد)
- V= سرعت (m/s)
- m= جرم کل (سوار + دوچرخه، کیلوگرم)
- g= جاذبه (9.81 متر بر ثانیه)
- θ= زاویه گرادیان (رادیان یا درجه تبدیل شده)
- Crr= ضریب مقاومت غلتشی (~0.004 برای لاستیک های جاده خوب)
- یک= شتاب (m/s²)
نمونه کار شده (Flat Road TT):
سناریو:
- سرعت: 40 کیلومتر بر ساعت = 11.11 متر بر ثانیه
- CdA: 0.22 متر مربع (موقعیت TT خوب)
- وزن کل: 75 کیلوگرم (سوار سوار) + 8 کیلوگرم (دوچرخه) = 83 کیلوگرم
- جاده صاف (شیب = 0 درجه)
- سرعت ثابت (شتاب = 0)
محاسبه:
- P_aero= 0.22 × 0.5 × 1.225 × 11.11³ =185 وات
- P_گرانش= 0W (جاده صاف)
- P_rolling= 0.004 × 83 × 9.81 × 11.11 =36 وات
- P_kinetic= 0W (سرعت ثابت)
- P_total= 185 + 0 + 36 + 0 =221 وات
تفسیر: برای حفظ سرعت 40 کیلومتر در ساعت در موقعیت TT در جاده صاف به 221 وات نیاز دارید
پیاده سازی جاوا اسکریپت:
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-2000W)، مدت زمان مثبت
- را بررسی کنید موارد لبه دسته:تقسیم بر صفر، داده تهی/تعریف نشده، فاقد FTP
- گرد مناسب:CTL/ATL/TSB به 1 اعشار، TSS به عدد صحیح، W/kg تا 2 اعشار
- دقت فروشگاه:دقت کامل را در پایگاه داده حفظ کنید، فقط گرد برای نمایش
- مناطق زمانی:کنترل UTC در مقابلزمان محلی به طور مداوم برای تجزیه و تحلیل چند روزه
- کالیبراسیون کنتور برق:به کاربران یادآوری کنید که قبل از سواری، صفر افست
- اعتبار سنجی FTP:پرچم گذاری مقادیر مشکوک FTP (> 500 وات یا <100 وات برای بزرگسالان)
- به طور کامل تست کنید:از فایلهای سواری خوب برای تأیید محاسبات استفاده کنید
