人體追蹤:Widar2.0的CSI比值模型與BVP速度輪廓解析)
Paper Reading系列的第一篇我選了Widar2.0。做這個(gè)決定沒(méi)有猶豫在WiFi感知這條技術(shù)路線上這篇工作幾乎是所有后來(lái)者繞不開(kāi)的里程碑。它的目標(biāo)一句話就能講明白——只用一條Wi-Fi鏈路也就是一臺(tái)發(fā)射機(jī)加一臺(tái)接收機(jī)在目標(biāo)人不攜帶任何設(shè)備的前提下利用人體對(duì)WiFi信號(hào)的反射把他在室內(nèi)的行走軌跡實(shí)時(shí)畫出來(lái)。不是判斷有沒(méi)有人而是輸出一條連續(xù)的二維軌跡論文匯報(bào)的中位誤差做到了亞米級(jí)。對(duì)于做無(wú)線感知、CSI信號(hào)處理、室內(nèi)定位相關(guān)工作的朋友這篇是必讀對(duì)于剛?cè)腴T的同學(xué)它也像一個(gè)單鏈路物理極限在哪的參照系。下面這篇筆記不打算照抄論文章節(jié)而是按我自己的理解把最核心的三塊技術(shù)拆開(kāi)講清楚CSI比值模型、多普勒MUSIC與身體速度輪廓BVP、以及從速度估計(jì)到軌跡恢復(fù)的完整鏈路。1. 為什么第一輪Paper Reading要從Widar2.0開(kāi)始1.1 它解決的是一個(gè)不好賣但相當(dāng)要命的問(wèn)題室內(nèi)人員跟蹤這件事說(shuō)大不大說(shuō)小不小。攝像頭方案依賴光照且天然有隱私爭(zhēng)議毫米波雷達(dá)成本高、對(duì)部署位置敏感讓用戶戴標(biāo)簽或者拿手機(jī)又不算被動(dòng)感知。WiFi的吸引力在于基礎(chǔ)設(shè)施早就鋪好了信號(hào)穿墻不用額外供電被測(cè)人也完全沒(méi)有感知。但把WiFi信號(hào)變成位置遠(yuǎn)比想象中難。早期基于RSSI的方案精度只能到米級(jí)甚至更差后來(lái)的研究轉(zhuǎn)向CSI——信道狀態(tài)信息每個(gè)子載波都有獨(dú)立的幅度和相位信息量一下子大了好幾個(gè)量級(jí)。不過(guò)大多數(shù)CSI定位工作都默認(rèn)需要一個(gè)前提多個(gè)WiFi鏈路同時(shí)觀測(cè)。因?yàn)閱螚l鏈路上你最多知道目標(biāo)距離這條鏈路在某一個(gè)幾何關(guān)系上的投影而二維坐標(biāo)至少需要兩個(gè)約束。前代的Widar系統(tǒng)走的就是這條路用三條鏈路各自提取多普勒速度再交叉得到位置。而Widar2.0這篇工作最抓人的地方就是它把鏈路數(shù)砍到一條精度不僅沒(méi)掉還做到了亞米級(jí)。這在當(dāng)時(shí)是一個(gè)相當(dāng)反直覺(jué)的結(jié)論。1.2 這篇論文適合誰(shuí)讀以及你需要的最低配置如果你剛開(kāi)始接觸無(wú)線感知我的建議是先補(bǔ)三樣?xùn)|西CSI到底是什么、多普勒頻移是怎么產(chǎn)生的、以及最基礎(chǔ)的譜估計(jì)概念FFT和相關(guān)性。有這三樣讀Widar2.0的大部分推導(dǎo)不會(huì)太吃力。至于MUSIC這類子空間方法論文里用得很克制理解其超分辨直覺(jué)就夠了不一定要從頭推矩陣分解。如果你是做系統(tǒng)的人這篇文章的工程價(jià)值同樣不少它證明了商用WiFi網(wǎng)卡、Linux下開(kāi)源采集工具、幾個(gè)簡(jiǎn)單的信號(hào)處理模塊就能搭出一套能跑的人體追蹤原型。我讀完最大的感受是這篇論文沒(méi)有堆砌花哨的深度學(xué)習(xí)模塊全靠物理模型和精巧的信號(hào)處理把性能頂上去——這種擰螺絲式的系統(tǒng)論文今天讀起來(lái)反而比很多刷榜的神經(jīng)網(wǎng)絡(luò)工作更耐看。2. 單鏈路被動(dòng)跟蹤難點(diǎn)到底在哪個(gè)環(huán)節(jié)2.1 多鏈路方案為什么讓人又愛(ài)又恨多鏈路方案思路直接三臺(tái)接收機(jī)分布在房間不同位置人走動(dòng)時(shí)每條鏈路都產(chǎn)生多普勒頻移把三個(gè)方向上的速度分量測(cè)出來(lái)交匯就是位置。原理清晰實(shí)現(xiàn)也不算復(fù)雜但落地時(shí)全是坑。首先是部署一個(gè)房間擺三四個(gè)節(jié)點(diǎn)供電、擺放、遮擋都要考慮其次是同步不同網(wǎng)卡之間時(shí)鐘不同步相位處理很容易被噪聲淹沒(méi)最后是穩(wěn)定性某條鏈路信號(hào)弱了或者被家具擋住整個(gè)交匯結(jié)果就廢了。Widar2.0想回答的問(wèn)題是如果只有一條鏈路物理上還有沒(méi)有足夠信息恢復(fù)二維軌跡答案是有的但要看你敢不敢把人體當(dāng)成一個(gè)分布式目標(biāo)來(lái)處理而不是一個(gè)質(zhì)點(diǎn)。2.2 一條鏈路上到底能擠出什么物理量單條鏈路能拿到的原始量就三個(gè)幅度、相位、以及多個(gè)天線之間的相對(duì)相位差。幅度受環(huán)境反射影響太大不夠穩(wěn)單天線相位又因?yàn)槭瞻l(fā)時(shí)鐘不同步在包間隨機(jī)跳變不能直接用。真正有價(jià)值的可觀測(cè)物理量有兩個(gè)——多普勒頻移和到達(dá)角AoA。多普勒頻移本質(zhì)上是相位隨時(shí)間的旋轉(zhuǎn)速率人體移動(dòng)導(dǎo)致反射路徑長(zhǎng)度變化路徑長(zhǎng)度每變化一個(gè)波長(zhǎng)相位就轉(zhuǎn)一圈。AoA可以用接收端的兩根天線做干涉測(cè)量給出一條反射路徑的來(lái)波方向。有意思的是這兩個(gè)量不是獨(dú)立的多普勒大小取決于人的速度在特定方向上的投影而這個(gè)投影方向和AoA、以及收發(fā)端的幾何位置綁定在一起。所以理論上從一對(duì)多普勒AoA里可以反解出人的速度向量。Widar2.0的整個(gè)算法鏈本質(zhì)上是把這條反解路徑做扎實(shí)了。難點(diǎn)在于反射信號(hào)太弱了。人體反射的路徑比直射路徑弱二三十個(gè)分貝淹沒(méi)在靜態(tài)分量里商用WiFi的相位隨機(jī)跳變又遠(yuǎn)大于你要測(cè)的相位旋轉(zhuǎn)。所以論文的第一步必須先解決怎么把干凈的相位變化提出來(lái)。3. 關(guān)鍵預(yù)處理CSI比值模型如何把隨機(jī)相位洗干凈3.1 原始CSI相位為什么不能直接用先把信號(hào)模型擺出來(lái)。接收端拿到的CSI可以寫成兩部分的疊加靜態(tài)分量包含直射路徑和墻壁、家具上的靜態(tài)反射它隨時(shí)間基本不變動(dòng)態(tài)分量來(lái)自人身上各個(gè)散射點(diǎn)隨著人體運(yùn)動(dòng)路徑長(zhǎng)度不斷變化所以這一項(xiàng)帶有一個(gè)隨時(shí)間旋轉(zhuǎn)的相位旋轉(zhuǎn)速率就是多普勒頻移。理想情況下我們只需要觀測(cè)動(dòng)態(tài)分量的相位旋轉(zhuǎn)。問(wèn)題在于商用WiFi網(wǎng)卡給出的CSI相位里混著一堆莫名其妙的項(xiàng)載波頻率偏移CFO、采樣頻率偏移SFO、包檢測(cè)時(shí)延PDD每一項(xiàng)都會(huì)在包與包之間隨機(jī)抖動(dòng)。這些抖動(dòng)疊加起來(lái)相位噪聲的幅度遠(yuǎn)大于多普勒引起的相位旋轉(zhuǎn)直接看原始相位曲線基本就是一團(tuán)亂麻。3.2 比值而不是差值一次共模對(duì)消Widar2.0的處理辦法干凈利落接收端用兩根天線取兩個(gè)CSI的比值。關(guān)鍵原因是兩根天線共用同一個(gè)射頻前端、同一個(gè)本振那些隨機(jī)的CFO、SFO、PDD相位項(xiàng)在兩根天線上是共同出現(xiàn)的。做除法之后共模誤差精確抵消剩下的比值只反映兩條信道響應(yīng)本身的相對(duì)關(guān)系。比值模型在復(fù)平面上有一個(gè)非常漂亮的幾何解釋當(dāng)人移動(dòng)時(shí)動(dòng)態(tài)分量繞靜態(tài)分量旋轉(zhuǎn)比值的軌跡畫出來(lái)是一個(gè)圓弧。圓弧旋轉(zhuǎn)的角速度恰好就是多普勒頻移。換句話說(shuō)原本作為干擾的強(qiáng)靜態(tài)路徑在這里變成了一個(gè)天然的本振把微弱的動(dòng)態(tài)反射信號(hào)通過(guò)混頻效應(yīng)搬移到了可觀測(cè)的頻段。這就像收音機(jī)里的超外差結(jié)構(gòu)載波信號(hào)雖然強(qiáng)但有用的調(diào)制信息正是通過(guò)與本地振蕩器混頻才解出來(lái)的。提示如果你后面要復(fù)現(xiàn)這段記住比值模型的前提條件是兩個(gè)天線的靜態(tài)分量有可比性。如果其中一根天線被遮擋到幾乎收不到直射信號(hào)圓弧會(huì)退化多普勒峰值也就跟著糊掉。3.3 這個(gè)模型為什么能成為后續(xù)工作的標(biāo)準(zhǔn)件我覺(jué)得CSI比值模型是整篇論文里最值得偷走的模塊。它的前提條件很寬松接收端雙天線、收發(fā)端不需要同步、不需要額外校準(zhǔn)。后來(lái)的很多工作——呼吸檢測(cè)、心率估計(jì)、手勢(shì)識(shí)別、人群計(jì)數(shù)——都直接沿用了這個(gè)預(yù)處理模塊??梢哉f(shuō)Widar2.0不只是做了一個(gè)追蹤系統(tǒng)它還順帶定義了一種通用的CSI相位清理范式。在讀這篇論文之前我一直以為CSI相位是廢的讀完才明白相位不是廢是缺一個(gè)正確的參考系。4. 多普勒譜的凈化與身體速度輪廓BVP如何成為方向指紋4.1 為什么短時(shí)FFT不夠要上MUSIC拿到干凈的比值序列后下一步是對(duì)一個(gè)短時(shí)間窗求多普勒譜。時(shí)間窗不能太長(zhǎng)因?yàn)槿梭w運(yùn)動(dòng)是非平穩(wěn)的窗太長(zhǎng)會(huì)把不同的速度糊在一起但窗短了FFT的頻率分辨率又不夠——分辨率大概是1/窗長(zhǎng)一個(gè)200毫秒的窗對(duì)應(yīng)的頻率分辨率只有5赫茲換算成速度分辨率在5GHz頻段大約是每秒零點(diǎn)幾米根本不夠用。所以論文用了MUSIC算法做超分辨譜估計(jì)。MUSIC的思路本質(zhì)上是對(duì)信號(hào)自相關(guān)矩陣做特征分解把空間分成信號(hào)子空間和噪聲子空間然后用噪聲子空間的正交性去掃描頻率得到一個(gè)尖銳的譜峰。更重要的是Widar2.0的多普勒MUSIC把多普勒和到達(dá)角放在一起做一個(gè)二維網(wǎng)格搜索同時(shí)估計(jì)出能量峰在多普勒AoA這個(gè)二維平面上的位置。這一步從工程角度看很重但從原理上理解很簡(jiǎn)單它把原本在頻譜上重疊的多條反射路徑在角度維度上分開(kāi)來(lái)。4.2 BVP到底是什么人體不是質(zhì)點(diǎn)而是一團(tuán)速度云走路的時(shí)候人體不是一個(gè)點(diǎn)。軀干以行走速度整體平移手臂和腿做周期擺動(dòng)各個(gè)散射點(diǎn)的瞬時(shí)速度完全不同。每個(gè)散射點(diǎn)對(duì)WiFi信號(hào)產(chǎn)生一個(gè)多普勒貢獻(xiàn)貢獻(xiàn)大小取決于該點(diǎn)速度在鏈路幾何方向上的投影。如果把一個(gè)時(shí)間窗內(nèi)所有散射點(diǎn)的多普勒AoA能量峰收集起來(lái)再變換到速度域你會(huì)得到一張能量分布圖——橫縱軸是速度向量的兩個(gè)分量顏色深淺代表這個(gè)速度分量有多強(qiáng)。這就是BVPBody Velocity Profile身體速度輪廓。BVP最有價(jià)值的地方在于它的形狀和人的行走方向強(qiáng)相關(guān)。朝鏈路方向走軀干的多普勒投影最大能量峰集中在高速區(qū)橫著走投影接近零能量峰塌到低頻區(qū)斜著走還會(huì)出現(xiàn)左右不對(duì)稱的展寬。可以說(shuō)BVP把人往哪個(gè)方向走這個(gè)信息編碼成了一張可匹配的二維模式。4.3 離線模板與在線匹配的工程細(xì)節(jié)論文采用的是一種典型的指紋匹配流程。離線階段在目標(biāo)環(huán)境里讓人沿著若干已知方向行走例如每15度一個(gè)方向共24個(gè)方向每個(gè)方向采集并保存一條BVP模板。在線階段把當(dāng)前時(shí)間窗計(jì)算出的BVP和模板庫(kù)做匹配得出最可能的行走方向。速度則從軀干對(duì)應(yīng)的主導(dǎo)多普勒峰反推——多普勒頻率等于行走速度乘以幾何投影系數(shù)系數(shù)由AoA和收發(fā)端坐標(biāo)算出。這個(gè)設(shè)計(jì)其實(shí)很有工程巧思它把方向估計(jì)降維成了一個(gè)模板匹配問(wèn)題避免了復(fù)雜的多普勒幾何解算。代價(jià)是需要在新環(huán)境做一次標(biāo)定采集這個(gè)我們?cè)诤竺嬗懻摼窒迺r(shí)再說(shuō)。5. 從一系列速度估計(jì)到一條干凈軌跡5.1 為什么不能直接把速度積分成軌跡既然每個(gè)時(shí)間窗都能估計(jì)出速度向量貌似直接把速度乘上時(shí)間間隔累加就行了。實(shí)際做起來(lái)會(huì)一塌糊涂原因有三個(gè)初始位置未知——WiFi感知只能測(cè)速度相對(duì)變化測(cè)不出絕對(duì)坐標(biāo)方向歧義——在鏈路幾何下速度向量的某些鏡像配置會(huì)產(chǎn)生幾乎相同的多普勒AoA觀測(cè)積分漂移——速度估計(jì)有噪聲誤差會(huì)隨著積分不斷積累走幾步就飄出房間了。所以論文把軌跡恢復(fù)當(dāng)成一個(gè)序列決策問(wèn)題來(lái)處理而不是單純的數(shù)值積分。我記得的核心思路是枚舉若干可能的初始狀態(tài)在候選軌跡集合上施加連續(xù)性約束和先驗(yàn)知識(shí)最后選出一條最自洽的軌跡。形式上非常像一個(gè)在候選狀態(tài)網(wǎng)格上的隱馬爾可夫解碼動(dòng)態(tài)規(guī)劃在這里承擔(dān)了主要的搜索任務(wù)。5.2 時(shí)間連續(xù)性如何消解空間歧義單看一個(gè)時(shí)間窗左右鏡像的速度估計(jì)無(wú)法區(qū)分。但人走路是連續(xù)的相鄰時(shí)間窗的速度變化不會(huì)突變尤其是方向角走直線時(shí)基本不變轉(zhuǎn)彎時(shí)平緩過(guò)渡。利用這個(gè)連續(xù)性窗口之間的模糊模糊自然就消掉了——如果上一幀選的是右側(cè)解這一幀強(qiáng)行選左側(cè)解會(huì)導(dǎo)致一個(gè)不自然的急轉(zhuǎn)彎連續(xù)性得分就會(huì)懲罰它。所以很多看似困難的方向歧義問(wèn)題在序列層面上根本不成立。這也是我對(duì)這個(gè)系統(tǒng)最服氣的地方它沒(méi)有試圖在單幀內(nèi)解決所有歧義而是把時(shí)間維度當(dāng)成一個(gè)隱式的消歧工具。5.3 計(jì)算量與實(shí)時(shí)性的權(quán)衡二維MUSIC的網(wǎng)格搜索在計(jì)算上不便宜。論文的做法我記得是把可搜索的多普勒AoA網(wǎng)格事先定好配合預(yù)計(jì)算的矩陣分解在線階段每個(gè)時(shí)間窗的開(kāi)銷被壓到可接受范圍。如果你想復(fù)現(xiàn)并做實(shí)時(shí)系統(tǒng)這塊大概率是第一個(gè)性能瓶頸。一個(gè)務(wù)實(shí)的做法是降低到達(dá)角方向的網(wǎng)格密度畢竟AoA的物理分辨率受天線間距限制掃得再密也提不了真實(shí)分辨率。6. 實(shí)驗(yàn)效果與邊界條件6.1 我記憶里的實(shí)驗(yàn)配置具體參數(shù)請(qǐng)以原文為準(zhǔn)論文的實(shí)驗(yàn)用的是典型的商用WiFi網(wǎng)卡接收方案發(fā)射端一臺(tái)筆記本接收端一臺(tái)筆記本配三根天線工作在5GHz頻段、802.11n協(xié)議。追蹤區(qū)域是普通的室內(nèi)環(huán)境包含直視LOS和非直視NLOS兩種場(chǎng)景地面真值我記得是通過(guò)攝像頭式動(dòng)捕系統(tǒng)標(biāo)定的。需要強(qiáng)調(diào)一下單鏈路指的是單條發(fā)射-接收鏈路接收端仍然保有多根天線這并不違背論文的核心賣點(diǎn)——畢竟目前隨便一個(gè)商用AP都至少有兩根天線。6.2 精度數(shù)字與對(duì)比如果我沒(méi)記錯(cuò)論文報(bào)告的中位跟蹤誤差在0.7米上下90分位大約在1.5米左右。這個(gè)數(shù)字放在今天看也許不算驚艷但放在當(dāng)時(shí)的環(huán)境下很能說(shuō)明問(wèn)題前代Widar要三條鏈路才能達(dá)到的精度Widar2.0用一條鏈路就拿到了。論文里還有不少對(duì)比實(shí)驗(yàn)包括不同行走路線、不同房間、LOS/NLOS切換這里不一一列舉。下面這張類比表格是我自己整理的用來(lái)理解不同方案的本質(zhì)差異方案鏈路/設(shè)備典型精度參考主要約束多鏈路CSI追蹤3條WiFi鏈路米級(jí)到亞米級(jí)部署節(jié)點(diǎn)多、同步復(fù)雜單鏈路CSI追蹤Widar2.0類1條WiFi鏈路多天線接收亞米級(jí)需要離線方向模板、限單人攝像頭動(dòng)捕多個(gè)相機(jī)毫米級(jí)布置昂貴、隱私敏感6.3 它的邊界哪些場(chǎng)景會(huì)露餡第一人必須保持正常步態(tài)的行走。站立不動(dòng)、原地踏步、爬行這類低速非周期運(yùn)動(dòng)多普勒信息太弱BVP匹配基本失效。這也決定了Widar2.0定位在追蹤而不是存在感知。第二只支持單人。兩個(gè)人的BVP在速度域疊加在一起模板匹配會(huì)直接錯(cuò)亂后續(xù)第三代系統(tǒng)才把多目標(biāo)問(wèn)題撿起來(lái)做。第三存在多普勒盲區(qū)。移動(dòng)方向恰好垂直于鏈路角平分線時(shí)速度投影趨近于零速度估計(jì)的置信度會(huì)明顯下降軌跡在那一片區(qū)域會(huì)抖動(dòng)。第四依賴環(huán)境離線標(biāo)定。搬動(dòng)家具、改變房間布局后靜態(tài)分量變了BVP模板需要重新采集這是所有指紋方案的通病。7. 讀完之后我的實(shí)操體會(huì)與這條線的后續(xù)7.1 如果要復(fù)現(xiàn)我覺(jué)得最容易踩的幾個(gè)坑第一個(gè)坑在數(shù)據(jù)采集階段發(fā)射端和接收端必須保持物理靜止。哪怕接收網(wǎng)卡被碰到一毫米靜態(tài)分量也會(huì)變比值模型里那個(gè)固定圓心就不成立了。第二個(gè)坑在天線選擇上比值模型需要兩根天線同時(shí)看到相近強(qiáng)度的靜態(tài)路徑選天線時(shí)最好看一下兩個(gè)CSI的幅度基線差異過(guò)大就得換一對(duì)。第三個(gè)坑在時(shí)間窗長(zhǎng)度窗太短MUSIC分辨不出低頻成分窗太長(zhǎng)轉(zhuǎn)彎這種快速變化會(huì)被平滑掉。我當(dāng)時(shí)用大概0.3秒的窗長(zhǎng)試下來(lái)效果不錯(cuò)但最優(yōu)值還得根據(jù)你的具體場(chǎng)景調(diào)。第四個(gè)坑是離線模板的采集質(zhì)量采集時(shí)要?jiǎng)蛩僦本€走不要刻意放慢或者邊走邊停否則模板里會(huì)混入異常速度分布匹配時(shí)反而干擾方向判斷。如果一開(kāi)始就在真實(shí)房間里連續(xù)走各種復(fù)雜路徑調(diào)試出了問(wèn)題很難定位是預(yù)處理、譜估計(jì)還是匹配環(huán)節(jié)的鍋。更穩(wěn)妥的做法是先在可控場(chǎng)景里復(fù)現(xiàn)論文的最簡(jiǎn)實(shí)驗(yàn)——讓目標(biāo)在鏈路正前方沿已知方向直線往返把每一步的中間輸出比值相位、多普勒譜、BVP全部打印出來(lái)檢查。哪一步和理論對(duì)不上就在哪一步修。7.2 從這篇往后看一條研究路線的延伸Widar2.0的影響不止于追蹤本身。它建立的速度輪廓這一中間表示后來(lái)被廣泛挪用到了WiFi手勢(shì)識(shí)別、身份識(shí)別等方向——本質(zhì)上都是讓人體運(yùn)動(dòng)在速度域留下可區(qū)分的痕跡。它的Ratio模型更是成了WiFi感知社區(qū)的一種標(biāo)準(zhǔn)預(yù)處理模塊。再往后同一系列的后續(xù)工作把研究對(duì)象從單目標(biāo)擴(kuò)展到多人、從走路擴(kuò)展到細(xì)粒度手勢(shì)還引入了跨環(huán)境泛化的問(wèn)題但細(xì)看的話核心模塊還是當(dāng)年那套相位清理高分辨譜估計(jì)模式匹配的組合。我覺(jué)得這篇論文最值得學(xué)習(xí)的地方不是某一個(gè)算法的精度數(shù)字而是它看問(wèn)題的角度不要把被追蹤者當(dāng)成一個(gè)點(diǎn)目標(biāo)去定位而是把他當(dāng)成一個(gè)持續(xù)產(chǎn)生速度信號(hào)的一團(tuán)散射體先恢復(fù)速度場(chǎng)再通過(guò)積分和約束把軌跡找回來(lái)。這個(gè)先測(cè)速度再定位置的框架比直接用深度學(xué)習(xí)做端到端回歸要有解釋力得多。7.3 一個(gè)讀論文的小建議最后分享一個(gè)我自己用下來(lái)的習(xí)慣讀這類信號(hào)處理系統(tǒng)論文拿到文章先別急著看實(shí)驗(yàn)花二十分鐘把第3章的幾何圖親手畫一遍——把發(fā)射機(jī)、接收機(jī)、人的散射區(qū)域畫在紙上然后自己寫出多普勒頻率的表達(dá)式。畫完你就會(huì)發(fā)現(xiàn)后面所有算法模塊都是為了解決這張圖上暴露出來(lái)的某一個(gè)具體問(wèn)題。這個(gè)過(guò)程比通讀十遍正文都管用我也建議你試試。