{"id":3325,"date":"2025-09-13T00:56:02","date_gmt":"2025-09-13T00:56:02","guid":{"rendered":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?p=3325"},"modified":"2025-09-13T01:00:46","modified_gmt":"2025-09-13T01:00:46","slug":"real-time-rf-directional-tracking-with-multi-modal-fusion","status":"publish","type":"post","link":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?p=3325","title":{"rendered":"Real-Time RF Directional Tracking with Multi-Modal Fusion"},"content":{"rendered":"\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-spectrcyde wp-block-embed-spectrcyde\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"DoGhPZi8bJ\"><a href=\"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?page_id=3321\">Real-Time RF Directional Tracking with Multi-Modal Fusion<\/a><\/blockquote><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&#8220;Real-Time RF Directional Tracking with Multi-Modal Fusion&#8221; &#8212; Spectrcyde\" src=\"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?page_id=3321&#038;embed=true#?secret=NLkNkugSqp#?secret=DoGhPZi8bJ\" data-secret=\"DoGhPZi8bJ\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<p>A Lightweight Kalman+DOMA System for Opportunistic Indoor Positioning<\/p>\n\n\n\n<p><strong>Benjamin J. Gilbert<\/strong><br>College of the Mainland \u2013 Robotic Process Automation \u2022 Spectrcyde RF Quantum SCYTHE<br><a>bgilbert2@com.edu<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Abstract<\/h2>\n\n\n\n<p>We present a <strong>lightweight, fully reproducible pipeline<\/strong> for real-time RF directional tracking that fuses <strong>Wi-Fi CSI, BLE RSSI, and UWB<\/strong>. A six-state constant-velocity <strong>Kalman filter with adaptive per-sensor covariance<\/strong> handles multi-rate, asynchronous observations; an optional <strong>DOMA<\/strong> neural prior provides learned dynamics for challenging kinematics. The system exposes a <strong>FastAPI WebSocket<\/strong> with <strong>QuestDB<\/strong> persistence and sustains <strong>&lt;30 ms end-to-end latency<\/strong> on edge hardware. On synthetic benchmarks, we observe <strong>15\u201325% ADE reductions<\/strong> versus single-modality baselines. All <strong>figures\/tables auto-generate<\/strong> from logs for reviewer-safe reproducibility.<\/p>\n\n\n\n<p><strong>Index Terms\u2014<\/strong> multi-modal fusion, Kalman filtering, Wi-Fi CSI, BLE RSSI, UWB, real-time tracking, reproducibility<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">I. Introduction<\/h2>\n\n\n\n<p>Opportunistic RF sensing offers <strong>low-cost situational awareness<\/strong> but suffers from <strong>partial observability<\/strong>, <strong>asynchronous rates<\/strong>, and <strong>nonstationary noise<\/strong>. Single-modality pipelines underperform when channels fade or occlude. We target a <strong>systems-first design<\/strong> that (i) fuses heterogeneous modalities in real time, (ii) adapts measurement noise on the fly, (iii) optionally leverages learned priors, and (iv) <strong>ships with streaming APIs and storage<\/strong>. The emphasis is <strong>Guangdong pragmatism<\/strong>: <strong>small kit, low latency, one-command reproducibility<\/strong>, no fragile dependencies.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-opt-id=617595306  fetchpriority=\"high\" decoding=\"async\" width=\"761\" height=\"1010\" src=\"https:\/\/ml6vmqguit1n.i.optimole.com\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2025\/09\/image-50.png\" alt=\"\" class=\"wp-image-3326\" srcset=\"https:\/\/ml6vmqguit1n.i.optimole.com\/w:761\/h:1010\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2025\/09\/image-50.png 761w, https:\/\/ml6vmqguit1n.i.optimole.com\/w:226\/h:300\/q:mauto\/f:best\/https:\/\/172-234-197-23.ip.linodeusercontent.com\/wp-content\/uploads\/2025\/09\/image-50.png 226w\" sizes=\"(max-width: 761px) 100vw, 761px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">III. System Architecture<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">A. Streaming API + Storage<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FastAPI WebSocket<\/strong> for ingestion and broadcast (JSON schema; time alignment buffer).<\/li>\n\n\n\n<li><strong>Async pipeline<\/strong> (uvicorn + asyncio): KF updates at 20 Hz; optional DOMA on a lightweight worker; back-pressure via queues.<\/li>\n\n\n\n<li><strong>QuestDB<\/strong> for time-series persistence (raw measurements, filtered states, latency\/accuracy telemetry).<\/li>\n\n\n\n<li><strong>Telemetry stream<\/strong>: position, covariance ellipsoid, per-sensor SNR, and health.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">B. Runtime Envelope (Edge-Ready)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Latency<\/strong>: &lt;30 ms p50, &lt;50 ms p95 on low-power x86.<\/li>\n\n\n\n<li><strong>Memory<\/strong>: &lt;50 MB with circular buffers.<\/li>\n\n\n\n<li><strong>CPU<\/strong>: &lt;15% on a single core at 20 Hz with all three modalities enabled.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">IV. Experimental Setup<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Synthetic scene<\/strong> with occlusions, LOS\/NLOS switches, and bursty noise.<\/li>\n\n\n\n<li><strong>Rates<\/strong>: Wi-Fi 10 Hz, BLE 5 Hz, UWB 20 Hz; random dropouts per modality.<\/li>\n\n\n\n<li><strong>Baselines<\/strong>: single-modality KF (Wi-Fi-only, BLE-only, UWB-only).<\/li>\n\n\n\n<li><strong>Variants<\/strong>: KF-only vs. KF+DOMA (\u03b1 sweep).<\/li>\n\n\n\n<li><strong>Outputs<\/strong>: auto-generated figures (learning\/latency curves, covariance ellipses) and JSON\u2192TeX tables.<\/li>\n<\/ul>\n\n\n\n<p><strong>Headline outcome<\/strong> (synthetic): <strong>15\u201325% ADE reduction<\/strong> for fused KF vs. best single-modality; <strong>additional 5\u201310%<\/strong> when enabling DOMA in high-curvature segments, with latency budget intact.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">V. Reproducibility (one-command build)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code># Ubuntu 22.04+ (edge box or laptop)\nsudo apt-get update\nsudo apt-get install -y python3-venv python3-pip\n\npython3 -m venv rtfuse_env\nsource rtfuse_env\/bin\/activate\npip install -U pip\n\n# App + deps\npip install fastapi uvicorn&#91;standard] pydantic==2.* numpy scipy\npip install filterpy questdb\n\n# (Optional) DOMA prior\npip install torch --index-url https:\/\/download.pytorch.org\/whl\/cpu\n\n# Run QuestDB (local)\ndocker run -d --name questdb -p 9000:9000 -p 8812:8812 questdb\/questdb:latest\n\n# Launch server\nexport FUSE_RATE_HZ=20\nexport QUESTDB_URL=http:\/\/localhost:9000\nuvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 1\n<\/code><\/pre>\n\n\n\n<p><strong>Artifacts:<\/strong> <code>make all<\/code> (or <code>python tools\/run_bench.py<\/code>) emits <code>figures\/<\/code>, <code>metrics\/<\/code>, and <code>tex\/<\/code> with ADE\/FDE tables, latency histograms, and per-sensor SNR traces. JSON\u2192TeX is <strong>auto-rendered<\/strong> for drop-in IEEE submission.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">VI. Limitations and Future Work<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Opportunistic geometry<\/strong> can be ambiguous in sparse AP layouts; add floor-plan priors or radio-SLAM to tighten observability.<\/li>\n\n\n\n<li><strong>BLE variance estimator<\/strong> assumes stationary statistics over WWW; explore <strong>GARCH-style<\/strong> volatility for rapid dynamics.<\/li>\n\n\n\n<li><strong>UWB bias<\/strong> under NLOS needs robust gating; integrate RANSAC-EKF or heavy-tailed likelihoods.<\/li>\n\n\n\n<li><strong>DOMA<\/strong> currently single-agent; extend to <strong>multi-target JPDA<\/strong> and <strong>mmWave angle-doppler<\/strong> fusion.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A Lightweight Kalman+DOMA System for Opportunistic Indoor Positioning Benjamin J. GilbertCollege of the Mainland \u2013 Robotic Process Automation \u2022 Spectrcyde RF Quantum SCYTHEbgilbert2@com.edu Abstract We present a lightweight, fully reproducible pipeline for real-time RF directional tracking that fuses Wi-Fi CSI, BLE RSSI, and UWB. A six-state constant-velocity Kalman filter with adaptive per-sensor covariance handles multi-rate,&hellip;&nbsp;<a href=\"https:\/\/172-234-197-23.ip.linodeusercontent.com\/?p=3325\" rel=\"bookmark\"><span class=\"screen-reader-text\">Real-Time RF Directional Tracking with Multi-Modal Fusion<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":3323,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-3325","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-signal_scythe"],"_links":{"self":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts\/3325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3325"}],"version-history":[{"count":2,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts\/3325\/revisions"}],"predecessor-version":[{"id":3328,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/posts\/3325\/revisions\/3328"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=\/wp\/v2\/media\/3323"}],"wp:attachment":[{"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/172-234-197-23.ip.linodeusercontent.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}