修改心率部分,减小其负荷

This commit is contained in:
邓智航
2026-01-27 00:09:11 +08:00
parent 1875072f5b
commit 8b651bec5a
2 changed files with 58 additions and 48 deletions

View File

@@ -14,11 +14,17 @@ class HeartRateMonitor:
self.b_buffer = collections.deque(maxlen=window_size)
# 滤波器状态
self.bp_b, self.bp_a = self._create_bandpass_filter(0.75, 2.5, fps) # 45-150 BPM
# 修改: 将最低频率从 0.75(45 BPM) 提高到 0.9(54 BPM) 以过滤低频噪声
self.bp_b, self.bp_a = self._create_bandpass_filter(0.9, 2.5, fps) # 54-150 BPM
# 平滑结果用的
self.bpm_history = collections.deque(maxlen=10)
# 优化: 降频计算
self.frame_counter = 0
self.process_interval = 15 # 每15帧(约0.5s)计算一次,其他时间收集数据
self.last_bpm = None
def _create_bandpass_filter(self, lowcut, highcut, fs, order=5):
"""创建巴特沃斯带通滤波器"""
nyq = 0.5 * fs
@@ -92,6 +98,12 @@ class HeartRateMonitor:
progress = int(len(self.r_buffer) / self.buffer_size * 100)
return None # 或者返回 progress 表示进度
# [优化] 降频计算策略
# 我们每帧都需要收集数据(Buffer append),但不需要每帧都做 FFT
self.frame_counter += 1
if self.frame_counter % self.process_interval != 0:
return self.last_bpm
# --- 3. 信号处理 (核心升级部分) ---
r = np.array(self.r_buffer)
g = np.array(self.g_buffer)
@@ -119,13 +131,13 @@ class HeartRateMonitor:
mag = np.abs(fft_res)
# D. 寻找峰值
# 限制频率范围 (45 BPM - 180 BPM)
interest_idx = np.where((freqs >= 0.75) & (freqs <= 3.0))
# 限制频率范围 (54 BPM - 180 BPM)
interest_idx = np.where((freqs >= 0.9) & (freqs <= 3.0))
valid_freqs = freqs[interest_idx]
valid_mags = mag[interest_idx]
if len(valid_mags) == 0:
return None
return self.last_bpm
max_idx = np.argmax(valid_mags)
peak_freq = valid_freqs[max_idx]
@@ -136,4 +148,5 @@ class HeartRateMonitor:
self.bpm_history.append(bpm)
avg_bpm = np.mean(self.bpm_history)
self.last_bpm = int(avg_bpm)
return int(avg_bpm)