נוסחאות כוח לרכיבה על אופניים
בסיס מתמטי של מדדי ניתוח אופניים
מדריך יישום
דף זה מספק נוסחאות העתק-הדבק ושיטות חישוב שלב אחר שלב עבור כל המדדים של Bike Analytics. השתמש באלה עבור יישומים מותאמים אישית, אימות או הבנה מעמיקה יותר של הדרכה מבוססת כוח.
⚠️ הערות יישום
- כל ערכי ההספק בוואט (W), זמן בשניות אלא אם צוין
- FTP ו-CP הם ערכי סף ספציפיים לאדם - ללא ערכים אוניברסליים
- אמת תמיד כניסות לטווחים סבירים (אופייני 0-2000W)
- טיפול במקרים קצה (חלוקה באפס, עוצמה שלילית)
- נתוני הספק דורשים מרווחי הקלטה של שנייה אחת לצורך דיוק
מדדי ביצועי ליבת אופניים
1. ציון מתח אימון (TSS)
נוסחה:
דוגמה עבדה:
תרחיש:נסיעה של שעתיים, NP = 235W, FTP = 250W
- חשב IF: IF = 235 / 250 = 0.94
- משך בשניות: שעתיים × 3600 = 7200 שניות
- TSS = (7200 × 235 × 0.94) / (250 × 3600) × 100
- 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: 1772. כוח מנורמל (NP)
אלגוריתם (ממוצע מתגלגל של 30 שניות):
למה הכוח הרביעי?
הקשר הקוורטי (חזק רביעי) משקף את העלות הפיזיולוגית הלא-לינארית של מאמצים משתנים. נסיעה עם עליות והתאוששות עולה יותר אנרגיה מאשר כוח קבוע באותו ממוצע.
דוגמה:
- נסיעה יציבה: 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 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 דקות (180 שניות) | 400W | 72 קילו-ג'יי |
| 5 דקות (300 שניות) | 365W | 109.5 קילו-ג'יי |
| 12 דקות (720 שניות) | 310W | 223.2 קילו-ג'יי |
| 20 דקות (1200) | 285W | 342 קילו-ג'יי |
שימוש ברגרסיה ליניארית (עבודה = 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) - מודל משוואות דיפרנציאליות
נוסחאות:
W'exp(t) = ∫(P(t) - CP) dt
W'rec(t) = W' × (1 - e^(-t/τ))
ו-Δ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 (עומס אימון כרוני):ממוצע משוקלל אקספוננציאלי של 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+ | מרתיע | אובדן כושר - הגברת עומס |
יישום 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.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+ | סיור עולמי, 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.939. VAM (Velocità Ascensionale Media)
נוסחה:
מדדי 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/h10. אומדן VAM ל-W/kg
נוסחה:
דוגמה לחישוב:
תרחיש:טיפוס עם שיפוע ממוצע של 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_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)
חישוב:
- P_aero= 0.22 × 0.5 × 1.225 × 11.11³ =185W
- P_כבידה= 0W (כביש שטוח)
- P_rolling= 0.004 × 83 × 9.81 × 11.11 =36W
- P_kinetic= 0W (מהירות קבועה)
- 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 למבוגרים)
- בדוק ביסודיות:השתמש בקבצי נסיעה ידועים כדי לאמת חישובים
נוסחאות ביצועי שחייה: חישובי CSS, TSS, CTL/ATL
נוסחאות מתמטיות מלאות לאנליטיקת שחייה. למד כיצד לחשב FTP, sTSS, CTL, ATL, TSB ידנית. כולל דוגמאות פתורות, גזירות ויישום מעשי מוסבר. למאמנים וספורטאים מתקדמים.
- 2026-03-24
- נוסחאות שחייה · חישוב CSS · נוסחת TSS · מתמטיקת אימון
- ביבליוגרפיה
