用 Python 可视化心率波动反映运动强度
下面这个案例演示:通过心率时间序列的波动幅度,来判断运动强度,核心思路是——心率越高、波动越大,通常意味着强度越高。

完整代码示例
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks
# 1. 模拟一段运动心率数据(单位:bpm)
np.random.seed(42)
duration = 300 # 300 秒
t = np.arange(duration)
# 模拟不同阶段:
# 0-60s 热身、60-180s 中高强度、180-240s 冲刺、240-300s 恢复
hr = np.zeros(duration)
hr[:60] = 90 + 3*np.sin(t[:60]/5) + np.random.randn(60)*1.5
hr[60:180]= 140 + 6*np.sin(t[60:180]/4) + np.random.randn(120)*2.5
hr[180:240]= 175 + 10*np.sin(t[180:240]/3)+ np.random.randn(60)*4
hr[240:] = 110 + 4*np.sin(t[240:]/6) + np.random.randn(60)*2
# 2. 滑动窗口计算波动指标(标准差 + 峰峰值)
win = 15
rolling_std = np.array([hr[i:i+win].std() for i in range(duration-win+1)])
rolling_pp = np.array([hr[i:i+win].ptp() for i in range(duration-win+1)])
mid_t = t[win//2 : duration-win//2+1][:len(rolling_std)]
# 3. 绘图
fig, axes = plt.subplots(2, 1, figsize=(11, 7), sharex=True)
axes[0].plot(t, hr, color='crimson', lw=1.5)
axes[0].axhline(hr.mean(), ls='--', color='gray', label=f'平均 {hr.mean():.0f} bpm')
axes[0].set_ylabel('心率 (bpm)')
axes[0].set_title('心率原始曲线:平台越高 → 强度越大')
axes[0].legend(); axes[0].grid(alpha=.3)
axes[1].plot(mid_t, rolling_std, color='navy', label='滑动标准差')
axes[1].plot(mid_t, rolling_pp, color='orange', label='滑动峰峰值')
axes[1].set_xlabel('时间 (s)')
axes[1].set_ylabel('波动幅度')
axes[1].set_title('心率波动指标:波动越大 → 强度越高')
axes[1].legend(); axes[1].grid(alpha=.3)
plt.tight_layout()
plt.show()
# 4. 量化每个阶段的强度
stages = {'热身':(0,60),'中高强度':(60,180),'冲刺':(180,240),'恢复':(240,300)}
print(f"{'阶段':<8}{'均值':>8}{'标准差':>10}{'峰峰值':>10}")
for name,(a,b) in stages.items():
seg = hr[a:b]
print(f"{name:<8}{seg.mean():>8.1f}{seg.std():>10.2f}{seg.ptp():>10.1f}")
输出结果(示意)
阶段 均值 标准差 峰峰值
热身 90.0 2.34 9.0
中高强度 140.0 4.51 18.0
冲刺 175.0 6.32 28.0
恢复 110.0 3.10 12.0
为什么能反映强度?
| 指标 | 含义 | 与强度的关系 |
|---|---|---|
| 均值 | 整体心率水平 | 越高→心肺负荷越大 |
| 标准差 | 心率短时波动幅度 | 越大→交感神经越活跃,强度越高 |
| 峰峰值 | 窗口内最高-最低 | 越大→瞬时强度变化越剧烈 |
关键点说明
- 滑动窗口是关键:用
rolling_std和rolling_pp把"波动"变成可量化的曲线,避免只看全局。 scipy.signal.find_peaks(代码中已导入)可进一步用于检测心率尖峰个数 —— 冲刺阶段峰更多。- 真实场景:可接入智能手表/心率带导出的 CSV,替换掉模拟的
hr数组即可。 - HRV(心率变异性) 是更专业的指标:用相邻 R-R 间期的标准差衡量,越低说明强度越高、越疲劳。
心率均值反映"整体强度水平",心率波动(标准差/峰峰值)反映"强度的剧烈程度" —— 二者结合,就能用一条心率曲线判断运动阶段和强度变化。
需要我把它改成读取真实 CSV 数据的版本,或者加入 HRV 分析吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播