本文へ移動
cccskills
無料GitHub で公開

vital-sign-extraction

Estimate heart rate (HR) and breathing rate (BR) in bpm from a cleaned 1-D physiological time series such as radar phase, WiFi CSI amplitude, PPG, or a chest-motion signal. Use when Claude needs to choose HR/BR bandpass edges, pick a peak frequency from a noisy band, reject the HR second harmonic that often dominates the fundamental, handle respiration-harmonic leakage into the HR band on slow breathers, or flag low-confidence estimates. Not for arrhythmia / beat-to-beat analysis, multi-subject source separation, or rapidly non-stationary rates.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md3.7 KB
  • references/band-rationale.md2.6 KB
  • references/harmonic-pitfalls.md3.9 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Vital-Sign Extraction

Given a cleaned 1-D periodic signal (radar phase, WiFi CSI, PPG, piezo), estimate heart rate and breathing rate in bpm.

Upstream ingestion of radar captures is the radar-signal-processing skill. This skill picks up after a 1-D signal is extracted.

Pipeline (do every step)

  1. Split into BR and HR bands with two separate bandpasses:
    • BR: butter(4, [0.08, 0.5], btype='band', fs=fs) — 4.8–30 bpm
    • HR: butter(4, [0.7, 3.0], btype='band', fs=fs) — 42–180 bpm
  2. Peak frequency via zero-padded Welch PSD:
    nperseg = min(len(x), int(fs * 25))
    f, p = welch(x, fs=fs, nperseg=nperseg, noverlap=nperseg//2,
                 nfft=8*nperseg, detrend='constant')
    in_band = (f >= lo) & (f <= hi)
    peak_hz = f[in_band][np.argmax(p[in_band])]
    
  3. HR harmonic rejection — always run:
    f_sub = f_peak / 2.0
    if 0.7 <= f_sub <= 3.0:
        p_sub = np.interp(f_sub, f, p)
        p_top = np.interp(f_peak, f, p)
        if p_sub > 0.5 * p_top:
            f_peak = f_sub          # the peak was the 2nd harmonic
    hr_bpm = f_peak * 60
    
  4. Cross-check with autocorrelation:
    ac = np.correlate(x - x.mean(), x - x.mean(), mode='full')
    ac = ac[len(ac)//2:] / ac[len(ac)//2]
    lag = int(fs/f_hi) + np.argmax(ac[int(fs/f_hi):int(fs/f_lo)])
    bpm_ac = 60 * fs / lag
    
    If abs(bpm_ac - bpm_psd) > 5, flag as low confidence.

Decision rules

IfThen
f_peak/2 in HR band and p_sub > 0.5 × p_topPick sub-harmonic (fundamental)
PSD and autocorrelation disagree by > 5 bpmFlag low confidence; do not commit to one value
BR estimate < 10 bpm (slow breather)Expect HR-band contamination — see references/harmonic-pitfalls.md
HR > 150 bpm (tachycardia)Widen HR band upper to 3.3 Hz, re-estimate
Clip < 15 s longPSD bin spacing > tolerance — prefer autocorrelation or flag inconclusive

Sanity checks before reporting

  • BR < HR. Always true for a live adult at rest — if violated you swapped bands.
  • HR × duration_minutes ≈ peak count in find_peaks(bandpassed_hr). Off by 2× → harmonic error slipped through.
  • Resting adult plausibility: HR 50–90 bpm, BR 10–20 bpm. Way outside → re-check band edges, decimation factor, and harmonic rejection.

Why the band edges above, not textbook 0.1–0.5 / 0.8–2.5

See references/band-rationale.md. Short version: textbook bands miss slow breathers (supine clinical subjects breathe 5–10 bpm) and bradycardia (athletes, post-tilt-down).

Why HR-harmonic and BR-leakage are critical

See references/harmonic-pitfalls.md. These are the two failure modes that cost naïve pipelines the most accuracy on real data.

Not in scope

  • Arrhythmia / irregular rhythms — use R-peak / foot detection + RR-interval analysis, not PSD.
  • Multiple subjects in one signal — run source separation first.
  • Rapidly non-stationary rate (exercise ramp) — use a spectrogram, not single-window PSD.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Perform various data analysis on SEC 13-F and obtain some insights of fund activities such as number of holdings, AUM, and change of holdings between two quarters.

日本語の概要は準備中です。原文の説明を表示しています。

benchflow-ai/skillsbench1,8422026年7月24日 更新

AC branch pi-model power flow equations (P/Q and |S|) with transformer tap ratio and phase shift, matching `acopf-math-model.md` and MATPOWER branch fields. Use when computing branch flows in either direction, aggregating bus injections for nodal balance, checking MVA (rateA) limits, computing branch loading %, or debugging sign/units issues in AC power flow.

日本語の概要は準備中です。原文の説明を表示しています。

benchflow-ai/skillsbench1,8422026年7月24日 更新

Redact text from PDF documents for blind review anonymization

日本語の概要は準備中です。原文の説明を表示しています。

benchflow-ai/skillsbench1,8422026年7月24日 更新

Use when checking simplified ADA-derived plan-view bathroom accessibility constraints such as turning space, door clear width, toilet centerline, grab bars, and lavatory knee/toe clearance.

日本語の概要は準備中です。原文の説明を表示しています。

benchflow-ai/skillsbench1,8422026年7月24日 更新

Analyze failed GitHub Action jobs for a pull request.

日本語の概要は準備中です。原文の説明を表示しています。

benchflow-ai/skillsbench1,8422026年7月24日 更新

Use when extracting plan-view architectural geometry from DXF files with semantic CAD layers, especially when outputs must normalize rooms, doors, fixtures, clearances, and grab bars into machine-checkable JSON.

日本語の概要は準備中です。原文の説明を表示しています。

benchflow-ai/skillsbench1,8422026年7月24日 更新

benchflow-ai のスキルをすべて見る

このスキルの問題を報告する