Bisiklet Güç Formülleri

Bisiklet Analitiği Metriklerinin Matematiksel Temeli

Uygulama Kılavuzu

Bu sayfada tüm Bisiklet Analizi ölçümleri için kopyala-yapıştır formülleri ve adım adım hesaplama yöntemleri sunulmaktadır. Bunları özel uygulamalar, doğrulama veya güce dayalı eğitimin daha derinlemesine anlaşılması için kullanın.

⚠️ Uygulama Notları

  • Tüm güç değerleri watt (W) cinsinden, süre belirtilmediği sürece saniye cinsinden
  • FTP ve CP kişiye özel eşiklerdir; evrensel değerler yoktur
  • Girişleri her zaman makul aralıklar için doğrulayın (0-2000W tipik)
  • Uç durumları ele alın (sıfıra bölme, negatif güç)
  • Güç verilerinin doğruluğu için 1 saniyelik kayıt aralıkları gerekir

Bisiklet Temel Performans Ölçümleri

1. Eğitim Stres Puanı (TSS)

Formül:

TSS = (süre_saniye × NP × IF) / (FTP × 3600) × 100
burada IF = NP / FTP

Çalışılan Örnek:

Senaryo:2 saatlik sürüş, NP = 235W, FTP = 250W

  1. IF'i hesaplayın: IF = 235 / 250 = 0,94
  2. Saniye cinsinden süre: 2 saat × 3600 = 7200 saniye
  3. KORUMA1X = (7200 × 235 × 0,94) / (250 × 3600) × 100
  4. KORUMA1X = 1.590.720 / 900.000 × 100 =176.7 KORUMA1X

Yorum: Zorlu antrenman sürüşü (>150 TSS), 2-3 günlük iyileşme bekleniyor

JavaScript Uygulaması:

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. Normalleştirilmiş Güç (NP)

Algoritma (30 saniyelik hareketli ortalama):

1. Tüm sürüş için 30 saniyelik hareketli ortalama gücü hesaplayın
2. Her 30 saniyelik değeri 4'üncü kuvvete yükseltin
3. Tüm bu ^4 değerlerinin ortalamasını alın
4. Bu ortalamanın 4'üncü kökünü alın
NP = ⁴√(ortalama [30s_ort^4])

Neden 4. Güç?

Dördüncü derece (4'üncü kuvvet) ilişkisi, değişken çabaların doğrusal olmayan fizyolojik maliyetini yansıtır. Dalgalanma ve toparlanmaların olduğu bir sürüş, aynı ortalamadaki sabit güçten daha fazla enerjiye mal olur.

Örnek:

  • Sabit sürüş: 1 saat boyunca 200W → NP = 200W, Ortalama = 200W
  • Değişken sürüş: Alternatif 300W/100W → Ortalama = 200W, NP = 225W

Ortalama güç aynı ancak değişken sürüş, dalgalanmaların fizyolojik maliyeti nedeniyle %12 daha yüksek NP'ye sahip

JavaScript Uygulaması:

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. Yoğunluk Faktörü (IF)

Formül:

KORUMA15X = NP / KORUMA10X

Yorumlama Aralıkları:

IF SerisiÇaba SeviyesiÖrnek Egzersiz
< 0,75Kurtarma / KolayAktif kurtarma sürüşü, Bölge 1-2
0,75 - 0,85DayanıklılıkUzun istikrarlı sürüş, aerobik temel
0,85 - 0,95TempoTatlı nokta antrenmanı, tempo aralıkları
0,95 - 1,05EşikFTP aralıkları, zamana karşı deneme çalışması
1,05 - 1,15KORUMA5X5 dakikalık aralıklarla, kriter yarışı
> 1,15anaerobikKısa sprintler, ataklar, MTB patlamaları

Örnek Hesaplama:

Senaryo:NP = 235W, KORUMA10X = 250W

KORUMA15X = 235 / 250 =0,94

Yorum: Yüksek tempo / eşik altı efor, 2-3 saat sürdürülebilir

function calculateIF(normalizedPower, ftp) {
  return (normalizedPower / ftp).toFixed(2);
}

// Example:
const if_value = calculateIF(235, 250);
// Returns: 0.94

4.Değişkenlik İndeksi (VI)

Formül:

VI = NP / Ortalama Güç

Disipline Göre Yorumlama:

DisiplinTipik VIAnlamı
Yol TT / Sürekli Çaba1,00 - 1,05Çok tutarlı güç, optimum ilerleme hızı
Yol Yarışı1,05 - 1,10Bazı dalgalanmalar, genellikle sabit
Kriter1.10 - 1.20Sık hızlanmalar ve saldırılar
Dağ Bisikleti XC1,15 - 1,30+Son derece değişken, sabit dalgalanmalar

Örnek Hesaplama:

Yol Yarışı:NP = 240W, Ortalama Güç = 230W

VI = 240 / 230 =1.04(sabit tempo)

Dağ Bisikleti Yarışı:NP = 285W, Ortalama Güç = 235W

VI = 285 / 235 =1.21(çok değişken, ani çabalar)

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

Kritik Güç ve W' (Anaerobik Kapasite)

5. Kritik Güç (CP) - Doğrusal Model

Formül:

Zaman = W' / (Güç - CP)
Yeniden düzenlendi: Güç × Zaman = CP × Zaman + W'

Çoklu Çabalardan Hesaplama:

Farklı sürelerde 2-4 maksimum efor gerektirir (ör. 3, 5, 12, 20 dakika)

Örnek Veriler:

SüreGüç (W)Toplam Çalışma (kJ)
3 dakika (180s)400W72kJ
5 dakika (300s)365W109,5kJ
12 dakika (720s)310W223,2kJ
20 dakika (1200s)285W342kJ

Doğrusal regresyon kullanarak (İş = CP × Zaman + W'):

  • CP = 270W(regresyon çizgisinin eğimi)
  • W' = 18,5 kJ(y-kesme noktası)

JavaScript Uygulaması:

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' Dengesi (W'bal) - Diferansiyel Denklem Modeli

Formüller:

Harcama (P > CP olduğunda):
W'exp(t) = ∫(P(t) - CP) dt
Kurtarma (P < CP olduğunda):
W'rec(t) = W' × (1 - e^(-t/τ))
burada τ = 546 × e^(-0,01 × ΔCP) + 316
ve ΔCP = (CP - P(t))

Gerçek Dünya Örneği:

Bisikletçi özellikleri:CP = 270W, W' = 18,5 kJ

Senaryo 1 - Sert Saldırı:

  • Sürücü 30 saniye boyunca 400W'a çıkıyor
  • W' harcaması: (400 - 270) × 30 = 3.900 J = 3,9 kJ
  • Kalan W'bal: 18,5 - 3,9 =14,6kJ

Senaryo 2 - Kurtarma:

  • Saldırıdan sonra 2 dakika boyunca 200W'a (CP'nin 70W altında) düşer
  • ΔCP = 270 - 200 = 70W
  • τ = 546 × e^(-0,01 × 70) + 316 = 588 saniye
  • 120 saniyede iyileşme: 18,5 × (1 - e^(-120/588)) =3,5 kJ geri kazanıldı
  • Yeni W'bal: 14,6 + 3,5 =18,1kJ

JavaScript Uygulaması:

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

Bisiklet için Performans Yönetim Tablosu (PMC)

7. CTL, ATL, TSB Hesaplamaları

Formüller (Üstel Ağırlıklı Hareketli Ortalamalar):

CTL_today = CTL_dün + (TSS_today - CTL_dün) / 42
ATL_today = ATL_dün + (TSS_today - ATL_dün) / 7
TSB_today = CTL_dün - ATL_dün

Metrik Tanımları:

  • CTL (Kronik Eğitim Yükü):42 günlük üstel ağırlıklı ortalama - uygunluğu temsil eder
  • ATL (Akut Eğitim Yükü):7 günlük üstel ağırlıklı ortalama - yorgunluğu temsil eder
  • TSB (Egzersiz Stres Dengesi):Form = Fitness - Yorgunluk

Çalışılan Örnek (7 Günlük Eğitim Bloğu):

GünKORUMA1XKORUMA2XKORUMA3XKORUMA4XDurum
Pazartesi10075.080.0-5.0Eğitim
Salı5074.475.7-1.3Kurtarma
Çar12075.582.0-6.5Sert Eğitim
Per073.770.3+3.4Dinlenme Günü
Cuma8073.871.7+2,1Orta
Cumartesi15075.682.9-7.3Uzun Yolculuk
Güneş4074.876.8-2.0Kurtarma

TSB Yorumu:

TSB SerisiDurumEylem
< -30Yüksek RiskAşırı antrenman uyarısı - yükü azaltın
-30 ila -10Zorlu EğitimKondisyon oluşturma, iyileşmeyi izleme
-10 ila +5OptimumNormal antrenman bölgesi
+5 ila +15Yarışa HazırFormunuzun zirvesi; bu hafta sonu yarışın
> +25EğitimsizleştirmeKondisyon kaybı - yükü artırın

JavaScript Uygulaması:

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

Güç-Ağırlık ve Tırmanma Metrikleri

8.Güç-Ağırlık Oranı

Formül:

W/kg = Güç (watt) / Vücut Kütlesi (kg)

FTP W/kg Karşılaştırmalar:

SeviyeErkek W/kgDişi W/kgKategori
Eğlence amaçlı2,5 - 3,52,0 - 3,0Fitness binicisi
Rekabetçi3,5 - 4,53,0 - 4,0Kedi 3-4, yaş grubu yarışçısı
Gelişmiş4,5 - 5,54.0 - 5.0Kedi 1-2, güçlü amatör
Elit Amatör5,5 - 6,05,0 - 5,5Ulusal düzey
Profesyonel6.0 - 7.0+5,5 - 6,5+Dünya Turu, Büyük Tur GC

Örnek Hesaplama:

Senaryo:FTP = 275W, vücut kütlesi = 70kg olan bisikletçi

W/kg = 275 / 70 =3,93 W/kg

Yorum: Rekabetçi seviye, engebeli yarışlarda yetenekli

function calculateWattsPerKg(power, bodyMassKg) {
  return (power / bodyMassKg).toFixed(2);
}

// Example:
const wpkg = calculateWattsPerKg(275, 70);
// Returns: 3.93

9. VAM (Velocità Yükseliş Medyası)

Formül:

VAM (m/h) = Yükseklik Kazanımı (m) / Zaman (saat)

VAM Karşılaştırmaları:

VAM (m/saat)SeviyeÖrnek
600 - 900Eğlence amaçlıYerel tırmanışta kulüp sürücüsü
900 - 1200RekabetçiAlpe d'Huez'de iyi bir amatör
1200 - 1500Elit AmatörUlusal düzeyde tırmanıcı
1500 - 1800ProfesyonelDünya Turu yurt içi
> 1800Büyük Tur KazananıPogačar ve Vingegaard önemli tırmanışlarda

Örnek Hesaplama:

Senaryo:Alpe d'Huez tırmanışı

  • Yükseklik kazancı: 1100 metre
  • Süre: 55 dakika = 0,917 saat
  • VAM = 1100 / 0,917 =1200 m3/saat

Yorum: Rekabetçi düzeyde tırmanma performansı

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 Tahmini

Formül:

W/kg ≈ VAM (m/saat) / 100 / (%Gradyan + 3)

Örnek Hesaplama:

Senaryo:%8 ortalama eğimle tırmanın, VAM = 1200 m/saat

W/kg = 1200 / 100 / (8 + 3)

W/kg = 12/11 =4,36 W/kg

Çapraz kontrol: 70 kg sürücüyle → Tırmanışta 305 W sürekli güç

function estimateWkgFromVAM(vam, gradientPercent) {
  return (vam / 100 / (gradientPercent + 3)).toFixed(2);
}

// Example:
const wkg = estimateWkgFromVAM(1200, 8);
// Returns: 4.36

Aerodinamik Güç Denklemi

11. Toplam Güç Gereksinimleri

Tam Formül:

P_toplam = P_aero + P_gravity + P_rolling + P_kinetic

Bileşen Formülleri:

Aerodinamik Sürtünme:
P_aero = CdA × 0,5 × ρ × V³
Yerçekimi (Tırmanma):
P_yerçekimi = m × g × sin(θ) × V
Yuvarlanma Direnci:
P_rolling = Crr × m × g × cos(θ) × V
Kinetik (Hızlanma):
P_kinetik = m × a × V

Sabitler ve Değişkenler:

  • CDA= Sürtünme katsayısı × ön alan (m²)
    • Tipik yol bisikleti kaportaları: 0,35-0,40 m²
    • Damlalar: 0,32-0,37 m²
    • TT konumu: 0,20-0,25 m²
  • ρ= Hava yoğunluğu (deniz seviyesinde 1,225 kg/m³, 15°C)
  • V= Hız (m/s)
  • m= Toplam kütle (sürücü + bisiklet, kg)
  • g= Yerçekimi (9,81 m/s²)
  • θ= Gradyan açısı (radyan veya derece dönüştürülür)
  • Crr= Yuvarlanma direnci katsayısı (iyi yol lastikleri için ~0,004)
  • bir= İvme (m/s²)

Çalışılan Örnek (Düz Yol TT):

Senaryo:

  • Hız: 40 km/saat = 11,11 m/s
  • CdA: 0,22 m² (iyi TT konumu)
  • Toplam kütle: 75 kg (binici) + 8 kg (bisiklet) = 83 kg
  • Düz yol (eğim = 0°)
  • Sabit hız (hızlanma = 0)

Hesaplama:

  1. P_aero= 0,22 × 0,5 × 1,225 × 11,11³ =185W
  2. P_gravity= 0W (düz yol)
  3. P_rolling= 0,004 × 83 × 9,81 × 11,11 =36W
  4. P_kinetik= 0W (sabit hız)
  5. P_toplam= 185 + 0 + 36 + 0 =221W

Yorum: Düz yolda TT konumunda 40 km/s hıza ulaşmak için 221 W'ye ihtiyaç vardır

JavaScript Uygulaması:

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 }

Yardımcı İşlevler

Birim Dönüştürme Yardımcı Programları

JavaScript Uygulaması:

// 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)

Uygulama Kaynakları

Bu sayfadaki tüm formüller üretime hazırdır ve bilimsel literatüre ve gerçek dünyadaki güç ölçer verilerine göre doğrulanmıştır. Bunları özel analiz araçları, doğrulama veya güce dayalı eğitim hesaplamalarının daha derinlemesine anlaşılması için kullanın.

💡 En İyi Uygulamalar

  • Girişleri doğrulayın:Makul güç aralıklarını (0-2000W), pozitif süreleri kontrol edin
  • Edge vakalarını ele alın:Sıfıra bölme, boş/tanımsız veri, FTP eksik
  • Uygun şekilde yuvarlayın:CTL/ATL/TSB'ten 1 ondalık sayıya, TSS'ten tam sayıya, W/kg'dan 2 ondalık sayıya kadar
  • Mağaza hassasiyeti:Veritabanında tam hassasiyeti koruyun, yalnızca görüntüleme amaçlı yuvarlak
  • Saat dilimleri:Çok günlü analiz için UTC ve yerel saati tutarlı bir şekilde kullanın
  • Güç ölçer kalibrasyonu:Kullanıcılara sürüşlerden önce sıfır ofseti hatırlatın
  • FTP doğrulaması:Şüpheli FTP değerlerini işaretleyin (yetişkinler için >500W veya <100W)
  • İyice test edin:Hesaplamaları doğrulamak için iyi olduğu bilinen sürüş dosyalarını kullanın

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.

Yüzme Performansı Formülleri: CSS, TSS, CTL/ATL

Yüzme analitiği için eksiksiz matematiksel formüller. FTP, sTSS, CTL, ATL, TSB'yi manuel olarak nasıl hesaplayacağınızı öğrenin.

  • 2026-03-24
  • yüzme formülleri · CSS hesaplama · TSS formülü · antrenman matematiği
  • Kaynakça