נוסחאות כוח לרכיבה על אופניים

בסיס מתמטי של מדדי ניתוח אופניים

מדריך יישום

דף זה מספק נוסחאות העתק-הדבק ושיטות חישוב שלב אחר שלב עבור כל המדדים של Bike Analytics. השתמש באלה עבור יישומים מותאמים אישית, אימות או הבנה מעמיקה יותר של הדרכה מבוססת כוח.

⚠️ הערות יישום

  • כל ערכי ההספק בוואט (W), זמן בשניות אלא אם צוין
  • FTP ו-CP הם ערכי סף ספציפיים לאדם - ללא ערכים אוניברסליים
  • אמת תמיד כניסות לטווחים סבירים (אופייני 0-2000W)
  • טיפול במקרים קצה (חלוקה באפס, עוצמה שלילית)
  • נתוני הספק דורשים מרווחי הקלטה של שנייה אחת לצורך דיוק

מדדי ביצועי ליבת אופניים

1. ציון מתח אימון (TSS)

נוסחה:

TSS = (duration_seconds × NP × IF) / (FTP × 3600) × 100
כאשר IF = NP / FTP

דוגמה עבדה:

תרחיש:נסיעה של שעתיים, NP = 235W, FTP = 250W

  1. חשב IF: IF = 235 / 250 = 0.94
  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 ימים

יישום 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 שניות לחזקה רביעית
3. קח ממוצע של כל הערכים ^4 הללו
4. קח את השורש הרביעי של הממוצע הזה
NP = ⁴√(ממוצע של [30s_avg^4])

למה הכוח הרביעי?

הקשר הקוורטי (חזק רביעי) משקף את העלות הפיזיולוגית הלא-לינארית של מאמצים משתנים. נסיעה עם עליות והתאוששות עולה יותר אנרגיה מאשר כוח קבוע באותו ממוצע.

דוגמה:

  • נסיעה יציבה: 200W למשך שעה ← NP = 200W, ממוצע = 200W
  • נסיעה משתנה: מתחלפות 300W/100W → ממוצע = 200W, NP = 225W

אותו הספק ממוצע, אבל לרכיבה משתנה יש NP גבוה ב-12% בגלל העלות הפיזיולוגית של עליות

יישום 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טמפואימוני נקודות מתוקות, מרווחי טמפו
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 דקות (180 שניות)400W72 קילו-ג'יי
5 דקות (300 שניות)365W109.5 קילו-ג'יי
12 דקות (720 שניות)310W223.2 קילו-ג'יי
20 דקות (1200)285W342 קילו-ג'יי

שימוש ברגרסיה ליניארית (עבודה = CP × זמן + W'):

  • CP = 270W(שיפוע קו הרגרסיה)
  • W' = 18.5 קילו-ג'יי(יירוט Y)

יישום 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 = 270W, W' = 18.5 קילו-ג'יי

תרחיש 1 - התקפה קשה:

  • הרוכב עולה ל-400W למשך 30 שניות
  • הוצאה W': (400 - 270) × 30 = 3,900 J = 3.9 קילו-ג'יי
  • ו'בל נשאר: 18.5 - 3.9 =14.6 קילו-ג'יי

תרחיש 2 - שחזור:

  • לאחר ההתקפה, יורד ל-200W (70W מתחת ל-CP) למשך 2 דקות
  • ΔCP = 270 - 200 = 70W
  • τ = 546 × e^(-0.01 × 70) + 316 = 588 שניות
  • התאוששות ב-120 שניות: 18.5 × (1 - e^(-120/588)) =3.5 קילו ג'יי התאושש
  • ו'בל חדש: 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_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+מרתיעאובדן כושר - הגברת עומס

יישום 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 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+סיור עולמי, Grand Tour GC

דוגמה לחישוב:

תרחיש:רוכב אופניים עם FTP = 275W, מסת גוף = 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 (מ/שעה)רמהדוגמה
600 - 900פנאירוכב מועדון בטיפוס מקומי
900 - 1200תחרותיחובב טוב ב-Alpe d'Huez
1200 - 1500חובב עיליתמטפס ברמה לאומית
1500 - 1800מקצועיסיור עולמי מקומי
> 1800הזוכה בסיור הגדולPogačar, Vingegaard בעליות מפתח

דוגמה לחישוב:

תרחיש:טיפוס אלפ ד'הוז

  • עלייה בגובה: 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

נוסחה:

ואט/ק"ג ≈ VAM (מ"ש) / 100 / (הדרגה% + 3)

דוגמה לחישוב:

תרחיש:טיפוס עם שיפוע ממוצע של 8%, VAM = 1200 מ"ש

ואט/ק"ג = 1200 / 100 / (8 + 3)

W/kg = 12 / 11 =4.36 ואט/ק"ג

בדיקה צולבת: עם רוכב במשקל 70 ק"ג → 305W כוח מתמשך בטיפוס

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 מ"ר
    • מיקום TT: 0.20-0.25 מ"ר
  • ρ= צפיפות אוויר (1.225 ק"ג/מ"ר בגובה פני הים, 15 מעלות צלזיוס)
  • V= מהירות (מ/ש)
  • מ= מסה כוללת (רוכב + אופניים, ק"ג)
  • ז= כוח הכבידה (9.81 מ"ר/ש"ר)
  • θ= זווית שיפוע (רדיאנים או מעלות מומרים)
  • Crr= מקדם התנגדות לגלגול (~0.004 עבור צמיגי כביש טובים)
  • א= תאוצה (מ/ש"ר)

דוגמה עובדת (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³ =185W
  2. P_כבידה= 0W (כביש שטוח)
  3. P_rolling= 0.004 × 83 × 9.81 × 11.11 =36W
  4. P_kinetic= 0W (מהירות קבועה)
  5. P_total= 185 + 0 + 36 + 0 =221W

פירוש: צריך 221W כדי להחזיק 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-2000W), משכים חיוביים
  • טיפול בתיקי קצה:חלוקה באפס, נתונים null/לא מוגדרים, חסר FTP
  • סיבוב כראוי:CTL/ATL/TSB עד 1 עשרוני, TSS למספר שלם, W/kg עד 2 עשרוניות
  • דיוק חנות:שמור על דיוק מלא במסד הנתונים, עגול רק לתצוגה
  • אזורי זמן:לטפל ב-UTC לעומת זמן מקומי באופן עקבי לניתוח רב-ימים
  • כיול מד כוח:הזכר למשתמשים לאפס קיזוז לפני נסיעות
  • אימות FTP:סמן ערכי FTP חשודים (>500W או <100W למבוגרים)
  • בדוק ביסודיות:השתמש בקבצי נסיעה ידועים כדי לאמת חישובים

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 · מתמטיקת אימון
  • ביבליוגרפיה