86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
def calculate_wattage(resting_heart_rate, maximum_heart_rate, heart_rate, base_power_output):
|
|
def get_zone_percentile(heart_rate, resting_heart_rate, maximum_heart_rate):
|
|
HRR = maximum_heart_rate - resting_heart_rate
|
|
zone = ((heart_rate - resting_heart_rate) / HRR) * 100
|
|
|
|
return round(zone, 2)
|
|
|
|
def get_hrr_range(zone):
|
|
if zone <= 65:
|
|
return (0, 65)
|
|
elif zone <= 70:
|
|
print("UT2 Zone")
|
|
return (65, 70)
|
|
elif zone <= 80:
|
|
print("UT1 Zone")
|
|
return (70, 80)
|
|
elif zone <= 85:
|
|
print("AT Zone")
|
|
return (80, 85)
|
|
elif zone <= 95:
|
|
print("TR Zone")
|
|
return (85, 95)
|
|
else:
|
|
print("AN Zone")
|
|
return (95, 100)
|
|
|
|
def get_power_range(zone):
|
|
if zone <= 65:
|
|
return (0, 45)
|
|
elif zone <= 70:
|
|
print("UT2 Zone")
|
|
return (45, 60)
|
|
elif zone <= 80:
|
|
print("UT1 Zone")
|
|
return (60, 70)
|
|
elif zone <= 85:
|
|
print("AT Zone")
|
|
return (70, 80)
|
|
elif zone <= 95:
|
|
print("TR Zone")
|
|
return (80, 105)
|
|
else:
|
|
print("AN Zone")
|
|
return (105, 115)
|
|
|
|
zone_percentage = get_zone_percentile(heart_rate, resting_heart_rate, maximum_heart_rate)
|
|
print("Zone: " + str(zone_percentage))
|
|
|
|
min_power, max_power = get_power_range(zone_percentage)
|
|
print("Min power: " + str(min_power))
|
|
print("Max power: " + str(max_power))
|
|
|
|
min_hrr, max_hrr = get_hrr_range(zone_percentage)
|
|
print("Min hrr: " + str(min_hrr))
|
|
print("Max hrr: " + str(max_hrr))
|
|
|
|
power_range = max_power - min_power
|
|
print("Power range: " + str(power_range))
|
|
|
|
hrr_range = max_hrr - min_hrr
|
|
print("HRR range: " + str(hrr_range))
|
|
print("Zone minus min hrr: " + str(zone_percentage - min_hrr))
|
|
|
|
# Calculate percentage of hrr range
|
|
hrr_percentage = ((zone_percentage - min_hrr) / hrr_range)
|
|
print("hrr %: " + str(hrr_percentage))
|
|
|
|
power_percentage = (min_power + hrr_percentage * power_range) / 100
|
|
print("Power percentage: " + str(power_percentage))
|
|
|
|
|
|
# Add base power output
|
|
# predicted_power = power_percentage + base_power_output
|
|
predicted_power = base_power_output / power_percentage
|
|
|
|
return round(predicted_power, 0)
|
|
|
|
# Example usage
|
|
resting_heart_rate = 58
|
|
maximum_heart_rate = 165
|
|
heart_rate = 132
|
|
base_power_output = 110
|
|
|
|
watts = calculate_wattage(resting_heart_rate, maximum_heart_rate, heart_rate, base_power_output)
|
|
print(f"Predicted power: {watts} watts")
|