用 CRV 六阶段信号线协议重构 WiFi 人体感知管线:RuView CRV-Sense 集成架构解析(ADR-033)
本文以仓库内 docs/adr/ADR-033-crv-signal-line-sensing-integration.md 为主体,讲解 RuView 如何将 Coordinate Remote Viewing(CRV)的 6 阶段信号线协议映射到 WiFi-DensePose 的 CSI 感知管线,并给出
wifi-densepose-ruvector中crv模块的落地实现证据。读完你将掌握:CRV 六阶段与 WiFi 传感管线的逐级对应关系、跨房间身份匹配的收敛机制、以及每一阶段在仓库源码中的真实集成位置与验收标准。
1. 背景:为什么一个"坐标遥视"协议会出现在 WiFi 感知代码库中
1.1 CRV 六阶段方法学(Signal Line)
Coordinate Remote Viewing(CRV)是一套结构化的 6 阶段协议,将感知从粗略的整体印象逐步精化到最终的复合三维模型:
- Stage I —— 粗略的整体印象(gestalt);
- Stage II —— 感官细节(sensory details);
- Stage III —— 空间维度(spatial dimensions);
- Stage IV —— 噪声分离(noise separation);
- Stage V —— 交叉参照质询(cross-referencing interrogation);
- Stage VI —— 最终的复合 3D 模型(composite 3D model)。
ADR-033 描述的 ruvector-crv crate(v0.1.1)将上述 6 个阶段映射为向量数据库子系统:Poincaré 球嵌入、多头注意力、GNN 图拓扑、SNN 时序编码、可微检索、MinCut 划分。
1.2 结构同构:WiFi 感知管线也是"渐进式精化"
WiFi-DensePose 的传感管线与 CRV 呈现惊人的同构:
| CRV 阶段行为 | WiFi-DensePose 对应环节 |
|---|---|
| 粗粒度整体印象 | 原始 CSI 到达时为未分化信号,系统需先判定 RF 环境的整体特征 |
| 感官细节 | 逐子载波提取幅度/相位/频率特征 |
| 空间维度 | AP 网格形成节点位置 + 链路几何的空间拓扑 |
| 噪声分离 | 相干性门控(coherence gating)剔除噪声与干扰 |
| 交叉参照质询 | 姿态估计回溯查询早期 CSI 特征作为证据 |
| 复合 3D 模型 | 最终多人体划分产出 DensePose 输出 |
这种同构并非偶然:CRV 与 WiFi 传感都在解决同一个抽象问题——从嘈杂的高维信号空间中,通过显式噪声分离的渐进式精化来提取结构化信息。
1.3 ruvector-crv crate(v0.1.1)公共 API
| 组件 | 用途 | 上游依赖 |
|---|---|---|
CrvSessionManager |
会话生命周期:创建、追加阶段数据、收敛分析 | -- |
StageIEncoder |
Poincaré 球双曲嵌入(gestalt 原语) | --(内部双曲数学) |
StageIIEncoder |
感官向量的多头注意力 | ruvector-attention |
StageIIIEncoder |
GNN 图拓扑编码 | ruvector-gnn |
StageIVEncoder |
面向 AOL(Analytical Overlay)检测的 SNN 时序编码 | --(内部 SNN) |
StageVEngine |
可微检索与交叉参照 | --(内部软注意力) |
StageVIModeler |
复合模型的 MinCut 划分 | ruvector-mincut |
ConvergenceResult |
跨会话一致性分析 | -- |
CrvConfig |
配置(默认 384 维、曲率、AOL 阈值、SNN 参数) | -- |
关键类型还包括:GestaltType(Manmade/Natural/Movement/Energy/Water/Land)、SensoryModality(Texture/Color/Temperature/Sound/...)、AOLDetection(内容 + 异常分数)、SignalLineProbe(查询 + 注意力权重)、TargetPartition(MinCut 簇 + 质心)。
1.4 WiFi-DensePose 中已有的对应模块
| 已有模块 | 位置 | 对应 CRV 阶段 |
|---|---|---|
multiband.rs |
v2/crates/wifi-densepose-signal/src/ruvsense/ |
Stage I(多频带 CSI 的整体特征) |
phase_align.rs |
v2/crates/wifi-densepose-signal/src/ruvsense/ |
Stage II(相位特征提取) |
multistatic.rs |
v2/crates/wifi-densepose-signal/src/ruvsense/ |
Stage III(AP 网格空间拓扑) |
coherence_gate.rs |
v2/crates/wifi-densepose-signal/src/ruvsense/ |
Stage IV(信号 vs 噪声分离) |
field_model.rs |
v2/crates/wifi-densepose-signal/src/ruvsense/ |
Stage V(可查询的持续场模型) |
pose_tracker.rs |
v2/crates/wifi-densepose-signal/src/ruvsense/ |
Stage VI(人体跟踪输出) |
| 视点融合 | v2/crates/wifi-densepose-ruvector/src/viewpoint/ |
跨会话(多视点收敛) |
ADR-033 指出:wifi-densepose-ruvector crate 的 Cargo.toml 中已声明对 ruvector-crv 的依赖,本文档定义如何用 WiFi-DensePose 领域类型包装 CRV API。这一判断在源码中得到印证——v2/crates/wifi-densepose-ruvector/Cargo.toml 中 crv feature 将 ruvector-crv、ruvector-gnn、serde、serde_json 作为可选依赖拉入,且配置了 [[bench]] name = "crv_bench" required-features = ["crv"]。
1.5 核心洞察:跨会话收敛 = 跨房间身份匹配
CRV 的收敛分析机制,是比较针对同一坐标的多个独立会话的嵌入以寻找一致性。在 WiFi-DensePose 中,不同房间的不同 AP 簇正是同一个人的"独立观测者":当人从房间 A 移动到房间 B 时,CRV 收敛机制可以在房间 A 的嵌入轨迹与房间 B 的初始嵌入之间找到一致性——无需摄像头即可建立身份连续性。这是整个 ADR 的灵魂思想,也是"Signal Line"一词的由来。
2. 决策:六阶段 CRV → WiFi 映射
在 wifi-densepose-ruvector crate 中新建 crv 模块,用 WiFi-DensePose 领域类型包装 ruvector-crv,每个 CRV 阶段对应传感管线中的一个特定节点:
+-------------------------------------------------------------------+
| CRV-Sense Pipeline (6 Stages) |
+-------------------------------------------------------------------+
| Raw CSI frames from ESP32 mesh (ADR-029) |
| | |
| v |
| Stage I: CSI Gestalt Classification |
| CsiGestaltClassifier: raw CSI -> GestaltType |
| Encoder: StageIEncoder (Poincare ball embedding) |
| Module: ruvsense/multiband.rs |
| | |
| v |
| Stage II: CSI Sensory Feature Extraction |
| CsiSensoryEncoder: per-subcarrier CSI -> |
| amplitude textures / phase patterns / freq colors |
| Encoder: StageIIEncoder (multi-head attention) |
| Module: ruvsense/phase_align.rs |
| | |
| v |
| Stage III: AP Mesh Spatial Topology |
| MeshTopologyEncoder: node pos + link SNR -> GNN graph |
| Encoder: StageIIIEncoder (GNN topology) |
| Module: ruvsense/multistatic.rs |
| | |
| v |
| Stage IV: Coherence Gating (AOL Detection) |
| CoherenceAolDetector: gate decisions -> AOL-flagged removal |
| Encoder: StageIVEncoder (SNN temporal encoding) |
| Module: ruvsense/coherence_gate.rs |
| | |
| v |
| Stage V: Pose Interrogation |
| PoseInterrogator: pose hypothesis + CSI history -> |
| soft attention + top candidates |
| Engine: StageVEngine (differentiable search) |
| Module: ruvsense/field_model.rs |
| | |
| v |
| Stage VI: Multi-Person Partitioning |
| PersonPartitioner: embedding clusters -> MinCut partitions |
| Modeler: StageVIModeler (MinCut partitioning) |
| Module: training pipeline (ruvector-mincut) |
| | |
| v |
| Cross-Session: Multi-Room Convergence |
| MultiViewerConvergence: per-room trails -> identity matches |
| Engine: CrvSessionManager::find_convergence() |
| Module: ruvsense/cross_room.rs |
+-------------------------------------------------------------------+
从源码结构看,该设计已在 v2 workspace 落地为 v2/crates/wifi-densepose-ruvector/src/crv/mod.rs(约 1439 行)与基准文件 v2/crates/wifi-densepose-ruvector/benches/crv_bench.rs。其中实现的领域类型与 ADR 提案略有演进:用 WifiCrvPipeline 门面承载会话管理,用 ApNode/ApLink 描述网格,用 CoherenceGateState(Accept/PredictOnly/Reject/Recalibrate)扩展门控语义,下文将逐阶段展开。
3. 阶段详解与领域类型
3.1 Stage I:CSI Gestalt 分类(整体特征识别)
CRV 映射:Stage I 的 ideogram 分类目标的基本属性(Manmade/Natural/Movement/Energy)。在 WiFi 感知中,原始 CSI 帧的幅度包络形状与相位斜率方向提供了 RF 环境的等价分类信号。
/// CSI-domain gestalt types mapped from CRV GestaltType.
///
/// The CRV taxonomy maps to RF phenomenology:
/// - Manmade: structured multipath (walls, furniture, metallic reflectors)
/// - Natural: diffuse scattering (vegetation, irregular surfaces)
/// - Movement: Doppler-shifted components (human motion, fan, pet)
/// - Energy: high-amplitude transients (microwave, motor, interference)
/// - Water: slow fading envelope (humidity change, condensation)
/// - Land: static baseline (empty room, no perturbation)
pub struct CsiGestaltClassifier {
encoder: StageIEncoder,
config: CrvConfig,
}
impl CsiGestaltClassifier {
/// Classify a raw CSI frame into a gestalt type.
///
/// Extracts three features from the CSI frame:
/// 1. Amplitude envelope shape (ideogram stroke analog)
/// 2. Phase slope direction (spontaneous descriptor analog)
/// 3. Subcarrier correlation structure (classification signal)
///
/// Returns a Poincare ball embedding (384-d by default) encoding
/// the hierarchical gestalt taxonomy with exponentially less
/// distortion than Euclidean space.
pub fn classify(&self, csi_frame: &CsiFrame) -> CrvResult<(GestaltType, Vec<f32>)>;
}
集成点:v2/crates/wifi-densepose-signal/src/ruvsense/multiband.rs 已处理多频带 CSI。CsiGestaltClassifier 通过 StageIEncoder 以 Poincaré 球嵌入包装之,产出捕获 gestalt 层级结构的双曲嵌入(默认 384 维)。
实际实现中的判定启发式(见 crv/mod.rs):实现从幅度/相位数组计算方差、周期性、能量尖峰、结构性与空子载波比例五项指标,再选取最匹配的 gestalt 类型:
| RF 现象学判定 | 信号特征 |
|---|---|
| Movement | 高方差 + 周期性(如人走动) |
| Land | 低方差 + 稳定(空房间) |
| Energy | 突发幅度尖峰(开门、电器启停) |
| Natural | 平滑渐变(温度漂移、慢衰落) |
| Manmade | 规则结构模式(HVAC、机械运转) |
| Water | 大量空/零子载波(深度吸收) |
对应阈值由 GestaltThresholds 承载,默认值在 crv/mod.rs:variance_high=0.15、variance_low=0.03、periodicity_threshold=0.5、energy_spike_ratio=3.0、structure_threshold=0.6、null_fraction_threshold=0.3。
3.2 Stage II:CSI 感官特征提取
CRV 映射:Stage II 收集感官印象(纹理、颜色、温度)。在 WiFi 感知中,逐子载波 CSI 特征即感官模态:
| CRV 感官模态 | WiFi CSI 对应物 |
|---|---|
| Texture | 跨子载波的幅度方差模式(光滑 vs 粗糙表面反射) |
| Color | 频域频谱形状(哪些子载波携带最多能量) |
| Temperature | 相位漂移率(热膨胀改变路径长度) |
| Luminosity | 总体信号功率水平(SNR) |
| Dimension | 时延扩展(多径范围映射房间大小) |
pub struct CsiSensoryEncoder {
encoder: StageIIEncoder,
}
impl CsiSensoryEncoder {
/// Extract sensory features from per-subcarrier CSI data.
///
/// Maps CSI signal characteristics to CRV sensory modalities:
/// - Amplitude variance -> Texture
/// - Spectral shape -> Color
/// - Phase drift rate -> Temperature
/// - Signal power -> Luminosity
/// - Delay spread -> Dimension
///
/// Uses multi-head attention (ruvector-attention) to produce
/// a unified sensory embedding that captures cross-modality
/// correlations.
pub fn encode(&self, csi_subcarriers: &SubcarrierData) -> CrvResult<Vec<f32>>;
}
集成点:v2/crates/wifi-densepose-signal/src/ruvsense/phase_align.rs 已计算逐子载波相位特征,CsiSensoryEncoder 将其映射为 StageIIData 感官印象,并经 StageIIEncoder 产出注意力加权嵌入。实际实现中 extract 方法返回 Vec<(SensoryModality, String)> 模态标签对。
3.3 Stage III:AP 网格空间拓扑
CRV 映射:Stage III 用几何基元与关系勾勒空间布局。在 WiFi 感知中,AP 网格节点与节点间链路构成空间草图:
| CRV 草图元素 | WiFi 网格对应物 |
|---|---|
SketchElement |
AP 节点(位置、天线朝向) |
GeometricKind::Point |
单个 AP 位置 |
GeometricKind::Line |
两个 AP 间的双基(bistatic)链路 |
SpatialRelationship |
链路质量、基线距离、角分离度 |
pub struct MeshTopologyEncoder {
encoder: StageIIIEncoder,
}
impl MeshTopologyEncoder {
/// Encode the AP mesh as a GNN graph topology.
///
/// Each AP node becomes a SketchElement with its position and
/// antenna count. Each bistatic link becomes a SpatialRelationship
/// with strength proportional to link SNR.
///
/// Uses ruvector-gnn to produce a graph embedding that captures
/// the mesh's geometric diversity index (GDI) and effective
/// viewpoint count.
pub fn encode(&self, mesh: &MultistaticArray) -> CrvResult<Vec<f32>>;
}
集成点:v2/crates/wifi-densepose-signal/src/ruvsense/multistatic.rs 管理 AP 网格拓扑,MeshTopologyEncoder 将 MultistaticArray 几何翻译为 StageIIIData 草图元素与关系,经 StageIIIEncoder 产出 GNN 编码的拓扑嵌入。实际实现中网格输入建模为 ApNode { id, position: (f32,f32), coverage_radius } 与 ApLink { from, to, signal_strength },由 WifiCrvPipeline::add_mesh_topology 注入。
3.4 Stage IV:作为 AOL 检测的相干性门控
CRV 映射:Stage IV 检测 Analytical Overlay(AOL)——分析性心智用先验假设污染原始信号、导致偏离真实信号线的时刻。在 WiFi 感知中,相干性门控(ADR-030/032)承担同样职责:检测环境干扰、多径变化或硬件伪影对 CSI 的污染,并标记相应帧以排除。
| CRV AOL 概念 | WiFi 相干性对应物 |
|---|---|
| AOL 事件 | 低相干帧(干扰、多径漂移、硬件故障) |
| AOL 异常分数 | 相干度指标(0.0 = 完全不连贯,1.0 = 完全连贯) |
| AOL break(标记并搁置) | GateDecision::Reject 或 GateDecision::PredictOnly |
| 干净信号线 | 带噪声乘子的 GateDecision::Accept |
| 超时后强制接受 | 带膨胀噪声的 GateDecision::ForcedAccept(ADR-032) |
pub struct CoherenceAolDetector {
encoder: StageIVEncoder,
}
impl CoherenceAolDetector {
/// Map coherence gate decisions to CRV AOL detection.
///
/// The SNN temporal encoding models the spike pattern of
/// coherence violations over time:
/// - Burst of low-coherence frames -> high AOL anomaly score
/// - Sustained coherence -> low anomaly score (clean signal)
/// - Single transient -> moderate score (check and continue)
///
/// Returns an embedding that encodes the temporal pattern of
/// signal quality, enabling downstream stages to weight their
/// attention based on signal cleanliness.
pub fn detect(
&self,
coherence_history: &[GateDecision],
timestamps: &[u64],
) -> CrvResult<(Vec<AOLDetection>, Vec<f32>)>;
}
集成点:v2/crates/wifi-densepose-signal/src/ruvsense/coherence_gate.rs 已产出 GateDecision 值,CoherenceAolDetector 将门控时序流翻译为含 AOLDetection 事件的 StageIVData,并经 StageIVEncoder 的 SNN 时序编码产出信号质量随时间变化的嵌入。实际实现中以 CoherenceGateState 枚举表达更丰富语义:Accept(干净信号线,正常推进)、PredictOnly(轻度 AOL,用预测值但标记复查)、Reject(强 AOL,纯噪声丢弃该帧)、Recalibrate(环境漂移,触发管线重校准)。
3.5 Stage V:可微检索姿态质询
CRV 映射:Stage V 是质询阶段——用特定查询探测早期阶段数据以提取定向信息。在 WiFi 感知中,即用姿态假设查询累积的 CSI 特征历史,寻找支持或反驳的证据。
pub struct PoseInterrogator {
engine: StageVEngine,
}
impl PoseInterrogator {
/// Cross-reference a pose hypothesis against CSI history.
///
/// Uses differentiable search (soft attention with temperature
/// scaling) to find which historical CSI frames best support
/// or contradict the current pose estimate.
///
/// Returns:
/// - Attention weights over the CSI history buffer
/// - Top-k supporting frames (highest attention)
/// - Cross-references linking pose keypoints to specific
/// CSI subcarrier features from earlier stages
pub fn interrogate(
&self,
pose_embedding: &[f32],
csi_history: &[CrvSessionEntry],
) -> CrvResult<(StageVData, Vec<f32>)>;
}
集成点:v2/crates/wifi-densepose-signal/src/ruvsense/field_model.rs 维护持续电磁场模型(ADR-030),其历史即 StageVEngine 检索的语料库,姿态假设即探针查询。在 WifiCrvPipeline 实现中对应 interrogate 方法,对会话内的累积特征执行软注意力检索。
3.6 Stage VI:基于 MinCut 的多人体划分
CRV 映射:Stage VI 通过 MinCut 把累积数据聚类为不同目标分区,产出复合 3D 模型。在 WiFi 感知中即多人体分离——把累积 CSI 嵌入划分为人体专属簇。
pub struct PersonPartitioner {
modeler: StageVIModeler,
}
impl PersonPartitioner {
/// Partition accumulated embeddings into distinct persons.
///
/// Uses MinCut (ruvector-mincut) to find natural cluster
/// boundaries in the embedding space. Each partition corresponds
/// to one person, with:
/// - A centroid embedding (person signature)
/// - Member frame indices (which CSI frames belong to this person)
/// - Separation strength (how distinct this person is from others)
///
/// The MinCut value between partitions serves as a confidence
/// metric for person separation quality.
pub fn partition(
&self,
person_embeddings: &[CrvSessionEntry],
) -> CrvResult<(StageVIData, Vec<f32>)>;
}
集成点:训练管线 wifi-densepose-train 已在 DynamicPersonMatcher(ADR-016)中使用 ruvector-mincut(参见 v2/crates/wifi-densepose-train/src/metrics.rs 的依赖使用)。PersonPartitioner 用 CRV Stage VI 语义包装之,把人体分离表述为复合模型构造。WifiCrvPipeline::partition_persons 即其对外入口,返回 StageVIData。
3.7 跨会话收敛:跨房间身份匹配
pub struct MultiViewerConvergence {
session_manager: CrvSessionManager,
}
impl MultiViewerConvergence {
/// Match person identities across rooms via CRV convergence.
///
/// Each room's AP cluster is modeled as an independent CRV session.
/// When a person moves from Room A to Room B:
/// 1. Room A session contains the person's embedding trail (Stages I-VI)
/// 2. Room B session begins accumulating new embeddings
/// 3. Convergence analysis finds agreement between Room A's final
/// embeddings and Room B's initial embeddings
/// 4. Agreement score above threshold establishes identity continuity
///
/// Returns ConvergenceResult with:
/// - Session pairs (room pairs) that converged
/// - Per-pair similarity scores
/// - Convergent stages (which CRV stages showed strongest agreement)
/// - Consensus embedding (merged identity signature)
pub fn match_across_rooms(
&self,
room_sessions: &[(RoomId, SessionId)],
threshold: f32,
) -> CrvResult<ConvergenceResult>;
}
集成点:v2/crates/wifi-densepose-signal/src/ruvsense/cross_room.rs 已处理跨房间身份连续性(ADR-030),MultiViewerConvergence 用 CRV 收敛语义包装现有 CrossRoomTracker,经 CrvSessionManager::find_convergence() 计算嵌入一致性。WifiCrvPipeline::find_cross_room_convergence 为实际入口,同时提供 create_session(session_id, room_id) 显式把会话绑定到房间。
3.8 统一管线包装
ADR 中定义顶层 WifiCrvSession 将六阶段串成单一管线;实现中则演化为门面 WifiCrvPipeline,生命周期方法一一对应:
/// A WiFi-DensePose sensing session modeled as a CRV session.
pub struct WifiCrvSession {
session_manager: CrvSessionManager,
gestalt: CsiGestaltClassifier,
sensory: CsiSensoryEncoder,
topology: MeshTopologyEncoder,
coherence: CoherenceAolDetector,
interrogator: PoseInterrogator,
partitioner: PersonPartitioner,
convergence: MultiViewerConvergence,
}
impl WifiCrvSession {
pub fn new(config: WifiCrvConfig) -> Self;
/// Process a single CSI frame through all six CRV stages.
pub fn process_frame(
&mut self,
frame: &CsiFrame,
mesh: &MultistaticArray,
coherence_state: &GateDecision,
pose_hypothesis: Option<&[f32]>,
) -> CrvResult<WifiCrvOutput>;
/// Find convergence across room sessions for identity matching.
pub fn find_convergence(
&self,
room_sessions: &[(RoomId, SessionId)],
threshold: f32,
) -> CrvResult<ConvergenceResult>;
}
实际实现的公开 API(crv/mod.rs):
WifiCrvPipeline::new(config: WifiCrvConfig)—— 以默认配置构造管线(默认dimensions=32、convergence_threshold=0.6);create_session(&mut self, session_id, room_id)—— 创建绑定房间的 CRV 会话;process_csi_frame(...)—— 单帧推进 Stage I/II;add_mesh_topology(...)—— 注入 Stage III 网格拓扑;add_coherence_state(...)—— 注入 Stage IV 门控状态;interrogate(...)—— Stage V 姿态质询;partition_persons(&mut self, session_id)—— Stage VI MinCut 划分,返回StageVIData;find_cross_room_convergence(...)—— 跨房间收敛匹配;session_entry_count/session_count/remove_session—— 会话状态管理。
值得注意的实现差异:ADR 建议沿用 ruvector-crv 默认 384 维或 AETHER 的 128 维,而实际代码将默认维度下调为 32(dimensions: 32),并把收敛默认阈值设为 0.6(低于 ADR 正文建议的 0.75),说明实现优先考虑了单帧延迟与边缘部署的取舍。
4. 文件级实施计划
4.1 Phase 1:CRV 模块核心(新文件)
| 文件 | 用途 | 上游依赖 |
|---|---|---|
wifi-densepose-ruvector/src/crv/mod.rs |
模块根,重导出全部 CRV-Sense 类型 | -- |
wifi-densepose-ruvector/src/crv/config.rs |
继承 CrvConfig 的 WifiCrvConfig(含 WiFi 专用默认值) |
ruvector-crv |
wifi-densepose-ruvector/src/crv/session.rs |
包装 CrvSessionManager 的 WifiCrvSession |
ruvector-crv |
wifi-densepose-ruvector/src/crv/output.rs |
含逐阶段嵌入与诊断信息的 WifiCrvOutput |
-- |
(注:当前 v2 仓库以单文件 crv/mod.rs 承载该模块,上述子文件拆分可作为后续演进参考。)
4.2 Phase 2:阶段编码器(新文件)
| 文件 | 用途 | 上游依赖 |
|---|---|---|
crv/gestalt.rs |
Stage I Poincaré 球嵌入分类器 | ruvector-crv::StageIEncoder |
crv/sensory.rs |
Stage II 多头注意力感官编码 | StageIIEncoder、ruvector-attention |
crv/topology.rs |
Stage III GNN 拓扑编码 | StageIIIEncoder、ruvector-gnn |
crv/coherence.rs |
Stage IV SNN 时序 AOL 检测 | ruvector-crv::StageIVEncoder |
crv/interrogation.rs |
Stage V 可微检索质询 | ruvector-crv::StageVEngine |
crv/partition.rs |
Stage VI MinCut 划分 | StageVIModeler、ruvector-mincut |
4.3 Phase 3:跨会话收敛
| 文件 | 用途 | 上游依赖 |
|---|---|---|
crv/convergence.rs |
MultiViewerConvergence 跨房间身份匹配 |
ruvector-crv::CrvSessionManager |
4.4 Phase 4:与既有模块集成(修改现有文件)
| 文件 | 改动 | 说明 |
|---|---|---|
wifi-densepose-ruvector/src/lib.rs |
添加 pub mod crv; |
暴露新模块 |
wifi-densepose-ruvector/Cargo.toml |
无需改动 | ruvector-crv 依赖已存在(实际需加 crv feature 门控) |
ruvsense/multiband.rs |
实现 CrvGestaltSource trait |
让 gestalt 分类器消费多频带输出 |
ruvsense/phase_align.rs |
实现 CrvSensorySource trait |
让感官编码器消费相位特征 |
ruvsense/coherence_gate.rs |
添加导出 GateDecision 历史为 Vec<AOLDetection> 的方法 |
桥接门控与 Stage IV |
ruvsense/cross_room.rs |
实现 CrvConvergenceAdapter trait |
桥接跨房间跟踪器与 CRV 收敛 |
5. DDD 设计
5.1 新有界上下文:CrvSensing
聚合根:WifiCrvSession
pub struct WifiCrvSession {
/// Underlying CRV session manager
session_manager: CrvSessionManager,
/// Per-stage encoders
stages: CrvStageEncoders,
/// Session configuration
config: WifiCrvConfig,
/// Running statistics for convergence quality
convergence_stats: ConvergenceStats,
}
值对象:
/// Output of a single frame through the 6-stage pipeline.
pub struct WifiCrvOutput {
/// Per-stage embeddings (6 vectors, one per CRV stage).
pub stage_embeddings: [Vec<f32>; 6],
/// Gestalt classification for this frame.
pub gestalt: GestaltType,
/// AOL detections (frames flagged as noise-contaminated).
pub aol_events: Vec<AOLDetection>,
/// Person partitions from Stage VI.
pub partitions: Vec<TargetPartition>,
/// Processing latency per stage in microseconds.
pub stage_latencies_us: [u64; 6],
}
/// WiFi-specific CRV configuration extending CrvConfig.
pub struct WifiCrvConfig {
/// Base CRV config (dimensions, curvature, thresholds).
pub crv: CrvConfig,
/// AETHER embedding dimension (default: 128, overrides CrvConfig.dimensions).
pub aether_dim: usize,
/// Coherence threshold for AOL detection (maps to aol_threshold).
pub coherence_threshold: f32,
/// Maximum CSI history frames for Stage V interrogation.
pub max_history_frames: usize,
/// Cross-room convergence threshold (default: 0.75).
pub convergence_threshold: f32,
}
领域事件:
pub enum CrvSensingEvent {
/// Stage I completed: gestalt classified
GestaltClassified { gestalt: GestaltType, confidence: f32 },
/// Stage IV: AOL detected (noise contamination)
AolDetected { anomaly_score: f32, flagged: bool },
/// Stage VI: Persons partitioned
PersonsPartitioned { count: usize, min_separation: f32 },
/// Cross-session: Identity matched across rooms
IdentityConverged { room_pair: (RoomId, RoomId), score: f32 },
/// Full pipeline completed for one frame
FrameProcessed { latency_us: u64, stages_completed: u8 },
}
5.2 与既有有界上下文的集成
- Signal(wifi-densepose-signal):新 trait
CrvGestaltSource与CrvSensorySource使 CRV 模块消费信号处理输出而无需紧耦合——信号 crate 不依赖 CRV crate,依赖只朝单一方向流动。 - Training(wifi-densepose-train):Stage VI 的
PersonPartitioner产出与既有DynamicPersonMatcher相同的 MinCut 划分,共享 traitPersonSeparator使二者可互换使用。 - Hardware(wifi-densepose-hardware):无需改动。CRV 模块消费硬件层接收并解析后的 CSI 帧。
6. RuVector 集成地图
CRV-Sense 共调动 7 个 ruvector crate:
| CRV 阶段 | ruvector crate | 使用的 API | WiFi-DensePose 角色 |
|---|---|---|---|
| I(Gestalt) | --(内部 Poincaré 数学) | StageIEncoder::encode() |
CSI gestalt 分类学的双曲嵌入 |
| II(Sensory) | ruvector-attention |
StageIIEncoder::encode() |
子载波特征上的多头注意力 |
| III(Dimensional) | ruvector-gnn |
StageIIIEncoder::encode() |
AP 网格拓扑的 GNN 编码 |
| IV(AOL) | --(内部 SNN) | StageIVEncoder::encode() |
相干性违反的 SNN 时序编码 |
| V(Interrogation) | --(内部软注意力) | StageVEngine::search() |
场模型历史上的可微检索 |
| VI(Composite) | ruvector-mincut |
StageVIModeler::partition() |
MinCut 人体分离 |
| Convergence | --(余弦相似度) | CrvSessionManager::find_convergence() |
跨房间身份匹配 |
CRV 模块同时受益于 workspace 中已有的 ruvector 集成:
| 既有集成 | ADR | 对 CRV 阶段的增益 |
|---|---|---|
spectrogram.rs 中的 ruvector-attn-mincut |
ADR-016 | Stage II(感官特征的子载波注意力) |
dataset.rs 中的 ruvector-temporal-tensor |
ADR-016 | Stage IV(压缩相干性历史缓冲) |
subcarrier.rs 中的 ruvector-solver |
ADR-016 | Stage III(网格拓扑的稀疏插值) |
model.rs 中的 ruvector-attention |
ADR-016 | Stage V(姿态质询的空间注意力) |
metrics.rs 中的 ruvector-mincut |
ADR-016 | Stage VI(人体匹配基线) |
以上依赖关系可在源码中交叉验证:v2/crates/wifi-densepose-ruvector/Cargo.toml 声明了 ruvector-core、ruvector-mincut、ruvector-attn-mincut、ruvector-temporal-tensor、ruvector-solver、ruvector-attention,并在 crv feature 下引入可选的 ruvector-crv 与 ruvector-gnn;而 wifi-densepose-train/src/metrics.rs、model.rs 中可见 ruvector-mincut/ruvector-attention 的实际使用。
7. 验收准则
7.1 Stage I:CSI Gestalt 分类
| ID | 准则 | 测试方法 |
|---|---|---|
| S1-1 | CsiGestaltClassifier::classify() 对任意合法 CSI 帧返回有效 GestaltType |
单测:喂 100 帧合成 CSI,验证全部落在 6 种 gestalt 类型内 |
| S1-2 | Poincaré 球嵌入维度正确(匹配 WifiCrvConfig.aether_dim) |
单测:验证 embedding.len() == config.aether_dim |
| S1-3 | 嵌入范数严格小于 1.0(Poincaré 球约束) | 单测:验证所有输出的 L2 范数 < 1.0 |
| S1-4 | 带多普勒特征的 CSI 帧分类为 Movement | 单测:合成多普勒频移 CSI -> GestaltType::Movement |
| S1-5 | 带瞬时干扰的 CSI 帧分类为 Energy | 单测:合成干扰突发 -> GestaltType::Energy |
7.2 Stage II:CSI 感官特征
| ID | 准则 | 测试方法 |
|---|---|---|
| S2-1 | CsiSensoryEncoder::encode() 产出正确维度嵌入 |
单测:验证输出长度 |
| S2-2 | 幅度方差映射到 StageIIData.impressions 的 Texture 模态 |
单测:非平坦幅度下验证存在 Texture 条目 |
| S2-3 | 相位漂移率映射到 Temperature 模态 | 单测:注入线性相位漂移,验证 Temperature 条目 |
| S2-4 | 多头注意力权重在每个头上和为 1.0 | 单测:验证 softmax 归一化 |
7.3 Stage III:AP 网格拓扑
| ID | 准则 | 测试方法 |
|---|---|---|
| S3-1 | MeshTopologyEncoder::encode() 为每个 AP 节点产出一个 SketchElement |
单测:4 节点网格产出 4 个草图元素 |
| S3-2 | SpatialRelationship 数量等于双基链路数 |
单测:4 节点 -> 6 链路(全连接)或配置子集 |
| S3-3 | 关系强度与链路 SNR 成正比 | 单测:验证 SNR 与强度的单调关系 |
| S3-4 | 节点位置变化时 GNN 嵌入变化 | 单测:扰动一个节点位置,验证嵌入变化 |
7.4 Stage IV:相干性 AOL 检测
| ID | 准则 | 测试方法 |
|---|---|---|
| S4-1 | CoherenceAolDetector::detect() 把低相干帧标记为 AOL 事件 |
单测:注入 10 帧 GateDecision::Reject,验证产出 10 个 AOLDetection 条目 |
| S4-2 | 异常分数与相干性违反突发长度相关 | 单测:5 连发违反的分数高于孤立违反 |
| S4-3 | GateDecision::Accept 帧不产生 AOL 检测 |
单测:全接受历史产出空 AOL 列表 |
| S4-4 | SNN 时序编码尊重不应期(refractory period) | 单测:refractory_period_ms 内两次违反仅产生一个尖峰 |
| S4-5 | GateDecision::ForcedAccept(ADR-032)映射为中等分数 AOL |
单测:强制接受帧被标记但非最高异常分数 |
7.5 Stage V:姿态质询
| ID | 准则 | 测试方法 |
|---|---|---|
| S5-1 | PoseInterrogator::interrogate() 返回 CSI 历史上的注意力权重 |
单测:50 帧历史产出 50 个和为 1.0 的权重 |
| S5-2 | Top-k 候选为最高注意力帧 | 单测:验证 top_candidates 索引对应最高 attention_weights |
| S5-3 | 交叉引用链接正确的阶段编号 | 单测:验证 from_stage 与 to_stage 落在 [1..6] |
| S5-4 | 空历史返回空探针结果 | 单测:空 csi_history 产出零候选 |
7.6 Stage VI:人体划分
| ID | 准则 | 测试方法 |
|---|---|---|
| S6-1 | PersonPartitioner::partition() 把两个充分分离的嵌入簇分为两个分区 |
单测:距离 > 5 sigma 的两个高斯簇 -> 两个分区 |
| S6-2 | 每个分区有正确维度的质心嵌入 | 单测:质心长度匹配配置 |
| S6-3 | 不同人体的 separation_strength(MinCut 值)为正 |
单测:验证 separation_strength > 0.0 |
| S6-4 | 单人场景恰好产出一个分区 | 单测:单簇 -> 一个分区 |
| S6-5 | 分区 member_entries 索引互斥且穷尽 |
单测:所有成员条目并集覆盖全部输入帧 |
7.7 跨会话收敛
| ID | 准则 | 测试方法 |
|---|---|---|
| C-1 | 同一人在两个房间时 match_across_rooms() 返回正分数 |
单测:向两个房间会话注入相同嵌入轨迹,验证分数 > 阈值 |
| C-2 | 不同人在不同房间分数低于阈值 | 单测:注入不同嵌入轨迹,验证分数 < 阈值 |
| C-3 | convergent_stages 识别跨房间一致性最高的阶段 |
单测:使 Stage I 嵌入相同、其余随机,验证 Stage I 出现在 convergent_stages |
| C-4 | 收敛成功时 consensus_embedding 维度正确 |
单测:成功匹配后验证共识嵌入长度 |
| C-5 | 阈值参数被尊重(低于阈值不匹配) | 单测:设阈值为 0.99,仅近相同会话可匹配 |
7.8 端到端管线
| ID | 准则 | 测试方法 |
|---|---|---|
| E-1 | WifiCrvSession::process_frame() 返回含全部 6 个阶段嵌入的 WifiCrvOutput |
集成测试:处理 10 帧合成帧,验证每帧 6 个非空嵌入 |
| E-2 | x86 主机上单帧总延迟 < 5 ms | 基准:处理 1000 帧,验证 p95 延迟 < 5 ms |
| E-3 | 缺失姿态假设时管线优雅降级(Stage V 跳过或使用默认) | 单测:pose_hypothesis=None,验证不 panic 且输出有效 |
| E-4 | 空网格(单 AP)不 panic | 单测:单节点网格产出退化 Stage III 的有效输出 |
| E-5 | 会话状态跨帧累积(Stage V 历史增长) | 单测:处理 50 帧,验证 Stage V 候选数增加 |
对应仓库中的基准入口见 wifi-densepose-ruvector/benches/crv_bench.rs,需以 --features crv 编译运行(required-features = ["crv"])。
8. 影响评估
8.1 积极面
- 结构化管线形式化:6 阶段 CRV 映射为 WiFi 传感管线提供了有原则的渐进式精化结构,数据流显式化,每阶段可独立测试。
- 无需摄像头的跨房间身份:CRV 收敛分析为跨 AP 簇(不同房间)的同一人匹配提供了数学上有依据的机制,仅使用 RF 嵌入。
- 噪声分离成为一等概念:把相干性门控映射到 CRV Stage IV(AOL 检测),使噪声分离从实现细节升格为拥有专属嵌入与时序模型的核心架构阶段。
- gestalt 层级的双曲嵌入:Stage I 的 Poincaré 球嵌入以远低于欧氏空间的失真度捕获分层 RF 环境分类学(Manmade → 结构化多径、Natural → 漫散射等)。
- ruvector 生态复用:通过单一统一抽象调动全部 7 个 ruvector crate,最大化既有 ruvector 集成(ADR-016)的投资回报。
- 零新增外部依赖:
ruvector-crv已是 workspace 依赖,本 ADR 仅新增 Rust 源文件。
8.2 消极面
- 抽象开销:CRV 阶段映射为既有信号处理管线增加一层间接,每个包装器须在 WiFi 领域类型与 CRV 类型间翻译;若映射被证伪,会成为维护负担。
- 维度失配:
ruvector-crv默认 384 维,而 AETHER 嵌入(ADR-024)用 128 维。WifiCrvConfig做了覆盖,但非默认维度下的编码器行为必须验证。(实现已进一步下调为 32 维,需配套基准确认。) - SNN 开销:Stage IV 的 SNN 时序编码器为脉冲仿真增加逐帧计算。在嵌入式目标(ESP32)上可能超过 50 ms 帧预算。首期仅在主机侧(聚合器而非固件)部署。
- 收敛误报:基于嵌入相似度的跨房间身份匹配,对体型与运动模式相近、房间几何相似的人可能误配。需要 ADR-030 的时间邻近约束以约束误报率。
- 测试复杂度:六个独立编码器加跨会话收敛层需要完整测试矩阵,第 7 节定义了 30+ 条独立用例。
8.3 风险
| 风险 | 概率 | 影响 | 缓解 |
|---|---|---|---|
| Poincaré 球嵌入在边界(范数接近 1.0)处不稳定 | 中 | NaN 沿管线传播 | CsiGestaltClassifier 中把范数钳制到 0.95;测试套件加入范数断言 |
| GNN 编码器对实时网格拓扑更新过慢 | 低 | Stage III 成瓶颈 | 缓存拓扑嵌入;仅在节点几何变化(罕见)时重算 |
| SNN 不应期对 20 Hz 相干性门控过短 | 中 | 帧边界处 AOL 误检 | 在 WifiCrvConfig 默认值中按帧间隔(50 ms)调 refractory_period_ms |
| 跨房间收敛阈值过宽松 | 中 | 跨房间身份误匹配 | 默认阈值 0.75 较保守;ADR-030 时间邻近约束(<60s)构成第二道防线 |
| MinCut 划分产出人体簇过多或过少 | 中 | 人数不匹配 | 以期望人数提示(来自占用检测器)作为 MinCut 约束 |
| CRV 抽象在映射不佳时成为技术债 | 低 | 未来 ADR 中移除代码 | 全部 CRV 代码隔离在 crv 模块,可无损移除而不影响既有管线 |
9. 相关 ADR
| ADR | 关系 |
|---|---|
| ADR-016 RuVector Integration | 扩展:原有 5 个 ruvector crate 加上 ruvector-crv、ruvector-gnn 全部经 CRV 管线驱动 |
| ADR-017 RuVector Signal+MAT | 扩展:ADR-017 的信号处理输出进入 CRV Stage I-II |
| ADR-024 Contrastive CSI Embedding | 消费:逐视点 AETHER 128 维嵌入是送入 CRV 各阶段的表示 |
| ADR-029 RuvSense Multistatic | 扩展:多静态网格拓扑编码为 CRV Stage III;TDM 帧是 Stage I 输入 |
| ADR-030 Persistent Field Model | 扩展:场模型历史充当 Stage V 质询语料库;跨房间跟踪器桥接 CRV 收敛 |
| ADR-031 Viewpoint Fusion | 互补:RuView 在房间内融合视点;CRV 收敛跨房间匹配身份 |
| ADR-032 Mesh Security | 消费:认证信标与帧完整性(ADR-032)确保 CRV Stage IV 的 AOL 检测反映真实信号质量,而非伪造帧 |
10. 方法学溯源与阅读指引
CRV 方法的原始描述来自 Swann(1996)的 CRV 协议文档与 Smith(2005)对 Star Gate 项目的记录;其工程化所依赖的数学基础分别为 Nickel & Kiela(2017)的 Poincaré 嵌入、Kipf & Welling(2017)的 GCN、Maass(1997)的脉冲神经网络以及 Stoer & Wagner(1997)的最小割算法。相关论文在仓库内仅作背景引用(参见 ADR 第 9 节参考文献),本文不展开外部链接。
若需深入代码:
- 完整 ADR 提案见 docs/adr/ADR-033-crv-signal-line-sensing-integration.md;
- 实际实现见 v2/crates/wifi-densepose-ruvector/src/crv/mod.rs,涵盖
WifiCrvConfig/WifiCrvPipeline/CsiGestaltClassifier/CsiSensoryEncoder等; - feature 门控与依赖声明见 v2/crates/wifi-densepose-ruvector/Cargo.toml,编译运行 CRV 模块需开启
crvfeature; - Stage 对应下游模块位于 v2/crates/wifi-densepose-signal/src/ruvsense/,即
multiband.rs(Stage I)、phase_align.rs(Stage II)、multistatic.rs(Stage III)、coherence_gate.rs(Stage IV)、field_model.rs(Stage V)、cross_room.rs(跨会话); - 端到端性能验证入口见 v2/crates/wifi-densepose-ruvector/benches/crv_bench.rs。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0627
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00