mirror of
https://github.com/ruvnet/RuView
synced 2026-07-30 18:41:42 +00:00
fix: deep review optimizations — firmware + server
* feat(signal): subcarrier importance weighting via mincut partition (Phase 1) Adds subcarrier_importance_weights() to ruvector signal crate — converts mincut partition into per-subcarrier float weights (>1.0 for sensitive, 0.5 for insensitive subcarriers). Sensing server now uses weighted mean/variance in extract_features_from_frame instead of treating all 56 subcarriers equally. This emphasizes body-motion- sensitive subcarriers and reduces noise from static multipath. Expected: ~26% reduction in keypoint jitter (±15cm → ±11cm RMS). 284 tests pass (191 trainer + 51 lib + 18 vital_signs + 16 dataset + 8 multi_node). Co-Authored-By: claude-flow <ruv@ruv.net> * fix(firmware): stack overflow risk + tick-rate independence (review findings) Critical fixes from deep review: 1. **Stack overflow prevention**: Moved BPM scratch buffers (br_buf, hr_buf) from stack to static storage in both process_frame() and update_multi_person_vitals(). Combined stack was ~6.5-7.5 KB of 8 KB limit — now reduced by ~4 KB to safe margins. 2. **Tick-rate independence**: Post-batch yield now uses pdMS_TO_TICKS(20) with min-1 guard instead of raw vTaskDelay(2). Previously assumed 100Hz tick rate. 3. **EDGE_BATCH_LIMIT to header**: Moved from local const to edge_processing.h #define for configurability. Firmware builds clean at 843 KB. Co-Authored-By: claude-flow <ruv@ruv.net> * fix(server): stale node eviction, remove unsafe pointer (review findings) Critical fixes from deep review: 1. **Stale node eviction**: node_states HashMap now evicts nodes with no frame for >60 seconds, every 100 ticks. Prevents unbounded memory growth and stale smoothing data when nodes are replaced. 2. **Remove unsafe raw pointer**: Replaced the unsafe raw pointer to adaptive_model (used to break borrow checker deadlock with node_states) with a safe .clone() before the mutable borrow. AdaptiveModel derives Clone so this is a clean copy. 284 tests pass, zero failures. Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
@@ -46,6 +46,9 @@
|
||||
#define EDGE_FALL_COOLDOWN_MS 5000 /**< Minimum ms between fall alerts (debounce). */
|
||||
#define EDGE_FALL_CONSEC_MIN 3 /**< Consecutive frames above threshold to trigger. */
|
||||
|
||||
/* ---- DSP task tuning ---- */
|
||||
#define EDGE_BATCH_LIMIT 4 /**< Max frames per batch before longer yield. */
|
||||
|
||||
/* ---- SPSC ring buffer slot ---- */
|
||||
typedef struct {
|
||||
uint8_t iq_data[EDGE_MAX_IQ_BYTES]; /**< Raw I/Q bytes from CSI callback. */
|
||||
|
||||
Reference in New Issue
Block a user