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:
Çalışılan Örnek:
Senaryo:2 saatlik sürüş, NP = 235W, FTP = 250W
- IF'i hesaplayın: IF = 235 / 250 = 0,94
- Saniye cinsinden süre: 2 saat × 3600 = 7200 saniye
- KORUMA1X = (7200 × 235 × 0,94) / (250 × 3600) × 100
- 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: 1772. Normalleştirilmiş Güç (NP)
Algoritma (30 saniyelik hareketli ortalama):
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 watts3. Yoğunluk Faktörü (IF)
Formül:
Yorumlama Aralıkları:
| IF Serisi | Çaba Seviyesi | Örnek Egzersiz |
|---|---|---|
| < 0,75 | Kurtarma / Kolay | Aktif kurtarma sürüşü, Bölge 1-2 |
| 0,75 - 0,85 | Dayanıklılık | Uzun istikrarlı sürüş, aerobik temel |
| 0,85 - 0,95 | Tempo | Tatlı nokta antrenmanı, tempo aralıkları |
| 0,95 - 1,05 | Eşik | FTP aralıkları, zamana karşı deneme çalışması |
| 1,05 - 1,15 | KORUMA5X | 5 dakikalık aralıklarla, kriter yarışı |
| > 1,15 | anaerobik | Kı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.944.Değişkenlik İndeksi (VI)
Formül:
Disipline Göre Yorumlama:
| Disiplin | Tipik VI | Anlamı |
|---|---|---|
| Yol TT / Sürekli Çaba | 1,00 - 1,05 | Çok tutarlı güç, optimum ilerleme hızı |
| Yol Yarışı | 1,05 - 1,10 | Bazı dalgalanmalar, genellikle sabit |
| Kriter | 1.10 - 1.20 | Sık hızlanmalar ve saldırılar |
| Dağ Bisikleti XC | 1,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.21Kritik Güç ve W' (Anaerobik Kapasite)
5. Kritik Güç (CP) - Doğrusal Model
Formül:
Çoklu Çabalardan Hesaplama:
Farklı sürelerde 2-4 maksimum efor gerektirir (ör. 3, 5, 12, 20 dakika)
Örnek Veriler:
| Süre | Güç (W) | Toplam Çalışma (kJ) |
|---|---|---|
| 3 dakika (180s) | 400W | 72kJ |
| 5 dakika (300s) | 365W | 109,5kJ |
| 12 dakika (720s) | 310W | 223,2kJ |
| 20 dakika (1200s) | 285W | 342kJ |
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:
W'exp(t) = ∫(P(t) - CP) dt
W'rec(t) = W' × (1 - e^(-t/τ))
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 timeBisiklet için Performans Yönetim Tablosu (PMC)
7. CTL, ATL, TSB Hesaplamaları
Formüller (Üstel Ağırlıklı Hareketli Ortalamalar):
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ün | KORUMA1X | KORUMA2X | KORUMA3X | KORUMA4X | Durum |
|---|---|---|---|---|---|
| Pazartesi | 100 | 75.0 | 80.0 | -5.0 | Eğitim |
| Salı | 50 | 74.4 | 75.7 | -1.3 | Kurtarma |
| Çar | 120 | 75.5 | 82.0 | -6.5 | Sert Eğitim |
| Per | 0 | 73.7 | 70.3 | +3.4 | Dinlenme Günü |
| Cuma | 80 | 73.8 | 71.7 | +2,1 | Orta |
| Cumartesi | 150 | 75.6 | 82.9 | -7.3 | Uzun Yolculuk |
| Güneş | 40 | 74.8 | 76.8 | -2.0 | Kurtarma |
TSB Yorumu:
| TSB Serisi | Durum | Eylem |
|---|---|---|
| < -30 | Yüksek Risk | Aşırı antrenman uyarısı - yükü azaltın |
| -30 ila -10 | Zorlu Eğitim | Kondisyon oluşturma, iyileşmeyi izleme |
| -10 ila +5 | Optimum | Normal antrenman bölgesi |
| +5 ila +15 | Yarışa Hazır | Formunuzun zirvesi; bu hafta sonu yarışın |
| > +25 | Eğitimsizleştirme | Kondisyon 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 dayGüç-Ağırlık ve Tırmanma Metrikleri
8.Güç-Ağırlık Oranı
Formül:
FTP W/kg Karşılaştırmalar:
| Seviye | Erkek W/kg | Dişi W/kg | Kategori |
|---|---|---|---|
| Eğlence amaçlı | 2,5 - 3,5 | 2,0 - 3,0 | Fitness binicisi |
| Rekabetçi | 3,5 - 4,5 | 3,0 - 4,0 | Kedi 3-4, yaş grubu yarışçısı |
| Gelişmiş | 4,5 - 5,5 | 4.0 - 5.0 | Kedi 1-2, güçlü amatör |
| Elit Amatör | 5,5 - 6,0 | 5,0 - 5,5 | Ulusal düzey |
| Profesyonel | 6.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.939. VAM (Velocità Yükseliş Medyası)
Formül:
VAM Karşılaştırmaları:
| VAM (m/saat) | Seviye | Örnek |
|---|---|---|
| 600 - 900 | Eğlence amaçlı | Yerel tırmanışta kulüp sürücüsü |
| 900 - 1200 | Rekabetçi | Alpe d'Huez'de iyi bir amatör |
| 1200 - 1500 | Elit Amatör | Ulusal düzeyde tırmanıcı |
| 1500 - 1800 | Profesyonel | Dünya Turu yurt içi |
| > 1800 | Bü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/h10. VAM - W/kg Tahmini
Formül:
Ö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.36Aerodinamik Güç Denklemi
11. Toplam Güç Gereksinimleri
Tam Formül:
Bileşen Formülleri:
P_aero = CdA × 0,5 × ρ × V³
P_yerçekimi = m × g × sin(θ) × V
P_rolling = Crr × m × g × cos(θ) × V
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:
- P_aero= 0,22 × 0,5 × 1,225 × 11,11³ =185W
- P_gravity= 0W (düz yol)
- P_rolling= 0,004 × 83 × 9,81 × 11,11 =36W
- P_kinetik= 0W (sabit hız)
- 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
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
