فرمول های قدرت دوچرخه سواری

پایه ریاضی معیارهای تجزیه و تحلیل دوچرخه

راهنمای پیاده سازی

این صفحه فرمول‌های کپی پیست و روش‌های محاسبه گام به گام را برای تمام معیارهای Bike Analytics ارائه می‌کند. از این ها برای پیاده سازی های سفارشی، تأیید، یا درک عمیق تر آموزش مبتنی بر قدرت استفاده کنید.

⚠️ نکات اجرایی

  • تمام مقادیر توان بر حسب وات (W)، زمان بر حسب ثانیه مگر اینکه مشخص شده باشد
  • FTP و CP آستانه‌های ویژه فردی هستند—بدون ارزش جهانی
  • همیشه ورودی ها را برای محدوده های معقول (0-2000 وات معمولی) اعتبارسنجی کنید
  • موارد لبه دسته (تقسیم بر صفر، توان منفی)
  • داده های قدرت برای دقت به فواصل ضبط 1 ثانیه ای نیاز دارند

دوچرخه سواری معیارهای اصلی عملکرد

1. امتیاز استرس تمرینی (TSS)

فرمول:

TSS = (دوره_ثانیه × NP × IF) / (FTP × 3600) × 100
که در آن IF = NP / FTP

مثال کار شده:

سناریو:2 ساعت سواری، NP = 235W، FTP = 250W

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

2. توان نرمال شده (NP)

الگوریتم (میانگین 30 ثانیه ای):

1. میانگین قدرت چرخشی 30 ثانیه ای را برای کل سواری محاسبه کنید
2. هر مقدار 30 ثانیه را به توان 4 برسانید
3. از تمام این مقادیر ^4 میانگین بگیرید
4. ریشه 4 این میانگین را بگیرید
NP = ⁴√ (میانگین [30s_avg^4])

چرا قدرت چهارم؟

رابطه کوارتیک (قدرت 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 watts

3. ضریب شدت (IF)

فرمول:

IF = NP / FTP

محدوده های تفسیر:

محدوده IFسطح تلاشنمونه تمرین
< 0.75ریکاوری / آسانسواری ریکاوری فعال، منطقه 1-2
0.75 - 0.85استقامتسواری ثابت طولانی پایه هوازی
0.85 - 0.95تمپوتمرین نقطه شیرین، فواصل تمپو
0.95 - 1.05آستانهفواصل FTP، تلاش آزمایشی زمانی
1.05 - 1.15VO₂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.94

4.شاخص تغییرپذیری (VI)

فرمول:

VI = NP / توان متوسط

تفسیر رشته:

انضباطVI معمولیمعنی
جاده TT / تلاش مستمر1.00 - 1.05قدرت بسیار ثابت، سرعت بهینه
مسابقات جاده ای1.05 - 1.10برخی از نوسانات، عموماً ثابت
معیار1.10 - 1.20شتاب و حملات مکرر
دوچرخه کوهستان XC1.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) - مدل خطی

فرمول:

زمان = W / (قدرت - CP)
تنظیم مجدد: توان × زمان = CP × زمان + W'

محاسبه از چندین تلاش:

به 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) - مدل معادلات دیفرانسیل

فرمول ها:

مخارج (وقتی 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 = 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_today = CTL_yesterday + (TSS_today - CTL_yesterday) / 42
ATL_today = ATL_yesterday + (TSS_today - ATL_yesterday) / 7
TSB_today = CTL_yesterday - ATL_yesterday

تعاریف متریک:

  • CTL (بار آموزشی مزمن):میانگین وزنی نمایی 42 روزه - نشان دهنده تناسب اندام
  • ATL (بار آموزشی حاد):میانگین وزنی نمایی 7 روزه - نشان دهنده خستگی
  • TSB (تعادل استرس آموزشی):فرم = تناسب اندام - خستگی

مثال کار شده (بلوک آموزشی 7 روزه):

روزTSSCTLATLTSBوضعیت
دوشنبه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بی تمرینیاز دست دادن تناسب اندام - افزایش بار

پیاده سازی جاوا اسکریپت:

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.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+تور جهانی، گرند تور جی سی

محاسبه مثال:

سناریو:دوچرخه سوار با 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.93

9. VAM (Velocità Ascensionale Media)

فرمول:

VAM (m/h) = افزایش ارتفاع (m) / زمان (ساعت)

معیارهای 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/h

10. VAM به W/kg برآورد

فرمول:

W/kg ≈ VAM (m/h) / 100 / (Gradient% + 3)

محاسبه مثال:

سناریو:صعود با شیب متوسط ​​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_total = P_aero + P_گرانش + P_rolling + P_kinetic

فرمول های کامپوننت:

درگ آیرودینامیک:
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)

محاسبه:

  1. P_aero= 0.22 × 0.5 × 1.225 × 11.11³ =185 وات
  2. P_گرانش= 0W (جاده صاف)
  3. P_rolling= 0.004 × 83 × 9.81 × 11.11 =36 وات
  4. P_kinetic= 0W (سرعت ثابت)
  5. 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 وات برای بزرگسالان)
  • به طور کامل تست کنید:از فایل‌های سواری خوب برای تأیید محاسبات استفاده کنید