境搭建與數(shù)據(jù)采集實(shí)戰(zhàn):從硬件選型到無線感知實(shí)驗(yàn)設(shè)計(jì))
1. 從“信號(hào)指紋”到環(huán)境感知CSI Tool 究竟是什么如果你對(duì)無線通信、室內(nèi)定位或者環(huán)境感知技術(shù)感興趣那你大概率聽說過“信道狀態(tài)信息”這個(gè)詞。簡(jiǎn)單來說當(dāng)你的手機(jī)連接Wi-Fi時(shí)它和路由器之間并非只有一條看不見的“數(shù)據(jù)管道”而是充滿了反射、折射、散射的復(fù)雜電磁場(chǎng)。CSI就是對(duì)這個(gè)復(fù)雜無線信道進(jìn)行的一次“高精度體檢報(bào)告”。它比我們熟知的接收信號(hào)強(qiáng)度指示要精細(xì)得多RSSI只告訴你信號(hào)強(qiáng)弱而CSI能告訴你信號(hào)從發(fā)射端到接收端每一條路徑的衰減、相位和時(shí)延。這就好比RSSI告訴你“房間里有人”而CSI能告訴你“這個(gè)人在房間的哪個(gè)角落甚至正在做什么手勢(shì)”。CSI Tool正是由斯坦福大學(xué)研究人員開發(fā)的一套開源工具包它讓普通的研究者和開發(fā)者能夠利用廉價(jià)的商用Wi-Fi網(wǎng)卡特別是英特爾5300網(wǎng)卡捕獲并解析出這些寶貴的CSI數(shù)據(jù)。它的出現(xiàn)極大地降低了無線感知研究的門檻。在此之前想玩轉(zhuǎn)CSI你可能需要昂貴的軟件定義無線電設(shè)備和深厚的數(shù)字信號(hào)處理功底。現(xiàn)在有了CSI Tool你就能用一臺(tái)舊筆記本、一塊特定的網(wǎng)卡開啟一扇通往無線感知新世界的大門。無論是想復(fù)現(xiàn)頂會(huì)論文里的“隔墻識(shí)人”實(shí)驗(yàn)還是自己搗鼓一些基于Wi-Fi信號(hào)的創(chuàng)新應(yīng)用比如手勢(shì)識(shí)別、呼吸監(jiān)測(cè)、入侵檢測(cè)這套工具都是絕佳的起點(diǎn)。2. 硬件與軟件搭建CSI捕獲環(huán)境的“硬核”準(zhǔn)備工欲善其事必先利其器。CSI Tool的安裝配置第一步也是最關(guān)鍵的一步就是準(zhǔn)備好正確的“食材”。這一步走錯(cuò)后面所有的步驟都可能白費(fèi)。2.1 核心硬件尋找那塊“傳奇”的網(wǎng)卡CSI Tool的核心依賴是英特爾 5300 無線網(wǎng)卡。這不是隨便一塊英特爾網(wǎng)卡就行必須是特定型號(hào)。為什么是它因?yàn)檠芯咳藛T成功逆向并破解了這款網(wǎng)卡固件中用于傳輸波束成形反饋信息的字段從而能夠從中提取出原始的CSI數(shù)據(jù)。這塊網(wǎng)卡在2010年左右非常流行廣泛搭載于當(dāng)時(shí)的筆記本電腦中比如ThinkPad T410、T420戴爾E6410等經(jīng)典商務(wù)本。現(xiàn)在你可以在二手平臺(tái)輕松淘到一塊Mini PCI-E接口的英特爾5300 AGN網(wǎng)卡價(jià)格非常低廉。注意務(wù)必確認(rèn)網(wǎng)卡型號(hào)為“Intel Ultimate N WiFi Link 5300 AGN”產(chǎn)品代碼通常是“6235ANHMW”或類似。市面上有大量仿冒或型號(hào)相近的卡如5100它們是無法工作的。對(duì)于臺(tái)式機(jī)用戶你需要一個(gè)Mini PCI-E轉(zhuǎn)PCI-E的轉(zhuǎn)接卡將筆記本網(wǎng)卡插到臺(tái)式機(jī)主板上。同時(shí)確保你的電腦主板支持從U盤或外置硬盤啟動(dòng)因?yàn)槲覀儗⒁\(yùn)行一個(gè)定制化的Linux系統(tǒng)。2.2 軟件基石定制化的Linux內(nèi)核與驅(qū)動(dòng)CSI Tool并非一個(gè)在Windows或普通Linux發(fā)行版上直接安裝的軟件。它是一套深度定制化的系統(tǒng)包括一個(gè)修改過的Linux內(nèi)核、專用的無線網(wǎng)卡驅(qū)動(dòng)以及用戶空間的采集程序。官方提供了兩種方式一種是預(yù)編譯好的Linux系統(tǒng)鏡像.img文件另一種是內(nèi)核與驅(qū)動(dòng)的源代碼包。對(duì)于絕大多數(shù)初學(xué)者和研究者強(qiáng)烈推薦直接使用預(yù)編譯的系統(tǒng)鏡像。這個(gè)鏡像基于Ubuntu 12.04 LTS但內(nèi)核和關(guān)鍵驅(qū)動(dòng)都已被修改。你需要將這個(gè)鏡像寫入到一個(gè)U盤至少8GB或移動(dòng)硬盤中你的電腦將從這塊外置存儲(chǔ)設(shè)備啟動(dòng)進(jìn)入一個(gè)為CSI采集量身定做的操作系統(tǒng)環(huán)境。這樣做的好處是環(huán)境純凈、依賴齊全避免了自行編譯內(nèi)核和驅(qū)動(dòng)時(shí)可能遇到的無數(shù)依賴庫(kù)和版本沖突問題那是真正的“深水區(qū)”。你需要準(zhǔn)備以下軟件工具鏡像寫入工具如dd命令Linux/macOS、Win32 Disk ImagerWindows或 Etcher跨平臺(tái)。CSI Tool系統(tǒng)鏡像從官方GitHub倉(cāng)庫(kù)的Release頁面下載最新的.img文件。一個(gè)8GB或以上的U盤寫入后其中的所有數(shù)據(jù)將被清空請(qǐng)?zhí)崆皞浞荨?. 步步為營(yíng)系統(tǒng)鏡像的寫入與首次啟動(dòng)這是將理論變?yōu)楝F(xiàn)實(shí)的第一步操作需要仔細(xì)。3.1 寫入系統(tǒng)鏡像到U盤以在Windows下使用Win32 Disk Imager為例插入你的U盤記下它對(duì)應(yīng)的盤符例如G:。以管理員身份運(yùn)行Win32 Disk Imager。在Image File處選擇你下載好的.img文件。在Device下拉菜單中非常謹(jǐn)慎地選擇你的U盤對(duì)應(yīng)的盤符。選錯(cuò)盤符可能會(huì)覆蓋你的系統(tǒng)硬盤點(diǎn)擊Write按鈕確認(rèn)警告后等待寫入完成。在Linux或macOS下使用dd命令需要更小心。首先用diskutil list(macOS) 或lsblk(Linux) 確認(rèn)U盤的設(shè)備標(biāo)識(shí)符如/dev/sdb絕對(duì)不是/dev/sda那通常是你的系統(tǒng)盤。然后使用命令sudo dd ifpath/to/csi_tool.img of/dev/sdb bs4M statusprogress。完成后使用sync命令確保數(shù)據(jù)完全寫入。3.2 首次啟動(dòng)與硬件配置將寫入好的U盤插入目標(biāo)電腦已安裝好英特爾5300網(wǎng)卡的電腦開機(jī)進(jìn)入BIOS/UEFI設(shè)置界面將啟動(dòng)順序設(shè)置為首先從U盤啟動(dòng)。成功啟動(dòng)后你會(huì)進(jìn)入一個(gè)命令行界面的Linux系統(tǒng)。默認(rèn)用戶名和密碼通常是ubuntu。登錄后第一件事是配置網(wǎng)絡(luò)以便后續(xù)安裝額外軟件或傳輸數(shù)據(jù)。你可以使用sudo dhclient eth0如果有線網(wǎng)卡是eth0來獲取IP地址或者編輯/etc/network/interfaces文件進(jìn)行靜態(tài)配置。接下來需要驗(yàn)證網(wǎng)卡是否被正確識(shí)別。運(yùn)行l(wèi)spci | grep -i network你應(yīng)該能看到關(guān)于“Intel Corporation Ultimate N WiFi Link 5300”的信息。然后運(yùn)行CSI Tool提供的測(cè)試命令例如進(jìn)入工具目錄通常位于/home/ubuntu/sdk/tools運(yùn)行sudo ./log_to_file看看是否有錯(cuò)誤輸出。如果出現(xiàn)關(guān)于“No such device”或“Invalid argument”的錯(cuò)誤很可能是網(wǎng)卡沒有被正確的驅(qū)動(dòng)加載需要檢查內(nèi)核模塊是否加載lsmod | grep iwlwifi。4. 核心工具鏈解析從數(shù)據(jù)采集到初步分析成功啟動(dòng)系統(tǒng)后你面對(duì)的不是一個(gè)圖形化軟件而是一系列命令行工具。理解每個(gè)工具的作用是有效使用CSI Tool的關(guān)鍵。4.1 數(shù)據(jù)采集“三劍客”CSI Tool的用戶空間工具主要包含以下幾個(gè)核心程序它們位于/home/ubuntu/sdk/tools目錄下log_to_file這是最常用的數(shù)據(jù)采集工具。它負(fù)責(zé)將網(wǎng)卡實(shí)時(shí)捕獲的CSI數(shù)據(jù)記錄到二進(jìn)制文件中。你需要以root權(quán)限運(yùn)行它并指定網(wǎng)卡接口如wlan0和輸出文件名。sudo ./log_to_file wlan0 ../datasets/your_test.dat運(yùn)行后它會(huì)在后臺(tái)持續(xù)采集。采集的數(shù)據(jù)是原始的、未解析的二進(jìn)制流包含了每個(gè)數(shù)據(jù)包、每個(gè)子載波上的復(fù)數(shù)CSI值幅度和相位。linux-80211n-csitool-supplementary中的工具這是一個(gè)補(bǔ)充工具包需要單獨(dú)下載編譯。其中最重要的兩個(gè)是nexutil用于配置網(wǎng)卡的高級(jí)參數(shù)。例如你可以設(shè)置信道帶寬20/40 MHz、中心信道頻率、發(fā)射天線數(shù)等。這些設(shè)置會(huì)直接影響CSI數(shù)據(jù)的維度和質(zhì)量。makecsiparams/inject_80211用于生成并發(fā)送特定的數(shù)據(jù)包。在主動(dòng)感知場(chǎng)景比如你既控制發(fā)射端也控制接收端下你可以用這些工具定制發(fā)送的數(shù)據(jù)包結(jié)構(gòu)。matlab或python解析腳本采集到的.dat文件是二進(jìn)制的無法直接閱讀。官方提供了MATLAB腳本read_bf_file.m來解析這些文件。解析后你會(huì)得到一個(gè)結(jié)構(gòu)體里面包含了時(shí)間戳、CSI矩陣維度為數(shù)據(jù)包數(shù) × 發(fā)射天線數(shù) × 接收天線數(shù) × 子載波數(shù)等信息?,F(xiàn)在也有非常成熟的Python解析庫(kù)如pycsi方便在更通用的數(shù)據(jù)分析棧中使用。4.2 一個(gè)完整的采集示例流程假設(shè)我們想在5GHz頻段、信道36上以40MHz帶寬采集數(shù)據(jù)配置網(wǎng)卡模式首先需要將網(wǎng)卡設(shè)置為監(jiān)聽模式并關(guān)閉可能干擾的管理進(jìn)程。sudo ifconfig wlan0 down sudo iwconfig wlan0 mode monitor sudo ifconfig wlan0 up設(shè)置信道參數(shù)使用nexutil進(jìn)行精確配置。sudo ./nexutil -Iwlan0 -s500 -b -l34 -v 0x132 -f 0x8001這條命令看起來復(fù)雜其實(shí)是在設(shè)置特定寄存器值。-l34指定了信道帶寬等相關(guān)參數(shù)34代表40MHz-v和-f是具體的配置字。這些“魔法數(shù)字”需要參考CSI Tool的文檔或源碼中的示例這是新手最容易卡住的地方之一。我個(gè)人的經(jīng)驗(yàn)是先在工具目錄下尋找現(xiàn)成的腳本比如set_profile之類的腳本看看別人是怎么設(shè)置常用信道的而不是自己從頭拼寫這些十六進(jìn)制數(shù)。開始采集sudo ./log_to_file wlan0 ../datasets/ch36_40mhz.dat執(zhí)行測(cè)試動(dòng)作在采集期間在無線信號(hào)覆蓋的區(qū)域內(nèi)進(jìn)行你的實(shí)驗(yàn)例如走動(dòng)、揮手、靜止等。停止采集按CtrlC終止log_to_file進(jìn)程。解析數(shù)據(jù)將.dat文件拷貝到有MATLAB或Python環(huán)境的機(jī)器上使用解析腳本將其轉(zhuǎn)換為可分析的數(shù)據(jù)。5. 避坑指南那些官方文檔沒寫的“血淚”經(jīng)驗(yàn)安裝配置CSI Tool的過程遠(yuǎn)非一帆風(fēng)順。下面這些坑是我和許多同行都真實(shí)踩過的希望能幫你節(jié)省大量時(shí)間。5.1 硬件兼容性“暗礁”網(wǎng)卡固件版本即使是同一型號(hào)的5300網(wǎng)卡不同批次的固件版本也可能有細(xì)微差異。有些固件版本可能無法穩(wěn)定提取CSI或?qū)е孪到y(tǒng)崩潰。如果遇到奇怪的不穩(wěn)定現(xiàn)象可以嘗試尋找不同版本的網(wǎng)卡驅(qū)動(dòng).ucode文件進(jìn)行替換。通常系統(tǒng)鏡像里自帶的是經(jīng)過測(cè)試的版本不要輕易更換。天線連接與增益三根天線必須正確連接到網(wǎng)卡的三個(gè)接口上。天線質(zhì)量、線纜損耗、連接器松動(dòng)都會(huì)極大影響CSI數(shù)據(jù)的質(zhì)量。表現(xiàn)為信號(hào)幅度異常低、噪聲極大。建議使用原裝的筆記本天線或購(gòu)買標(biāo)明天線并確保接口擰緊。一個(gè)簡(jiǎn)單的驗(yàn)證方法是在采集數(shù)據(jù)時(shí)用手靠近或遠(yuǎn)離天線觀察解析后CSI幅度的變化是否明顯。主機(jī)USB供電不足如果你使用USB外接硬盤盒來運(yùn)行CSI Tool系統(tǒng)可能會(huì)因?yàn)楣╇姴蛔銓?dǎo)致系統(tǒng)運(yùn)行不穩(wěn)定甚至突然掉盤。優(yōu)先使用有獨(dú)立供電的硬盤盒或者直接使用U盤。5.2 軟件配置中的“陷阱”信道配置錯(cuò)誤這是最高頻的錯(cuò)誤。nexutil的命令參數(shù)非?;逎R粋€(gè)常見的錯(cuò)誤是帶寬、頻率設(shè)置不匹配導(dǎo)致采集不到任何數(shù)據(jù)或者采集到的數(shù)據(jù)維度不對(duì)例如你期望的是30個(gè)子載波但解析出來是56個(gè)。務(wù)必記錄下你每次成功采集時(shí)所使用的完整nexutil命令并和最終解析數(shù)據(jù)時(shí)的預(yù)期維度進(jìn)行核對(duì)。可以建立一個(gè)“配置備忘”文件。系統(tǒng)時(shí)間同步如果你使用兩臺(tái)電腦分別作為發(fā)射端和接收端那么它們之間的系統(tǒng)時(shí)間必須同步否則數(shù)據(jù)包的時(shí)間戳將失去意義無法進(jìn)行聯(lián)合分析??梢允褂肗TP協(xié)議在局域網(wǎng)內(nèi)進(jìn)行時(shí)間同步。磁盤空間與文件管理CSI數(shù)據(jù)是海量的。一個(gè)持續(xù)幾分鐘的采集生成的數(shù)據(jù)文件可能達(dá)到數(shù)百M(fèi)B甚至GB級(jí)別。確保你的存儲(chǔ)設(shè)備有足夠空間并建立清晰的文件命名和目錄管理規(guī)范例如日期_場(chǎng)景_信道_帶寬.dat否則后期整理數(shù)據(jù)將是噩夢(mèng)。5.3 數(shù)據(jù)質(zhì)量“診斷術(shù)”采集到數(shù)據(jù)文件只是第一步如何判斷數(shù)據(jù)是否“健康”解析腳本報(bào)錯(cuò)首先用MATLAB或Python解析腳本讀一下文件。如果解析失敗大概率是采集過程中斷如CtrlC信號(hào)沒處理好導(dǎo)致文件尾部不完整??梢試L試用truncate命令截?cái)辔募蛘邫z查采集日志。查看數(shù)據(jù)包速率解析后檢查時(shí)間戳。計(jì)算一下平均每秒采集到的數(shù)據(jù)包數(shù)量。在安靜環(huán)境下針對(duì)信標(biāo)幀或特定數(shù)據(jù)流的采集包速率應(yīng)該相對(duì)穩(wěn)定。如果速率波動(dòng)極大或異常低可能是網(wǎng)卡配置或環(huán)境干擾問題??梢暬疌SI幅度簡(jiǎn)單繪制幾個(gè)子載波上的CSI幅度隨時(shí)間變化的曲線。在靜態(tài)環(huán)境下曲線應(yīng)該相對(duì)平穩(wěn)有小幅波動(dòng)這是環(huán)境噪聲。如果有人移動(dòng)你應(yīng)該能看到清晰、持續(xù)的波動(dòng)模式。如果曲線全是高頻毛刺噪聲或者是一條死板的直線都說明數(shù)據(jù)可能有問題。相位信息是否“纏繞”原始CSI相位是纏繞的范圍在 [-π, π] 之間。直接畫出來的相位圖會(huì)是鋸齒狀的。這很正常需要后續(xù)的相位校準(zhǔn)算法來處理。但如果相位看起來是完全隨機(jī)的噪聲沒有任何周期性跳變 pattern也可能有問題。6. 從采集到應(yīng)用你的第一個(gè)CSI實(shí)驗(yàn)設(shè)計(jì)思路安裝配置好工具驗(yàn)證了數(shù)據(jù)質(zhì)量接下來就該做點(diǎn)有意思的事情了。這里提供一個(gè)最簡(jiǎn)單的“人員檢測(cè)”實(shí)驗(yàn)設(shè)計(jì)框架幫你邁出第一步。實(shí)驗(yàn)?zāi)繕?biāo)檢測(cè)一個(gè)房間內(nèi)是否有人進(jìn)入。實(shí)驗(yàn)設(shè)置將裝有CSI Tool的接收端筆記本電腦5300網(wǎng)卡放在房間一角。使用一個(gè)普通的路由器或另一臺(tái)電腦作為發(fā)射端持續(xù)發(fā)送數(shù)據(jù)包可以簡(jiǎn)單地ping一個(gè)不存在的IP來產(chǎn)生流量或者讓路由器正常發(fā)送信標(biāo)幀。接收端配置在固定信道以監(jiān)聽模式捕獲這些數(shù)據(jù)包的CSI。數(shù)據(jù)處理流程數(shù)據(jù)解析使用read_bf_file解析出CSI矩陣csi_data。數(shù)據(jù)清洗選擇子載波并非所有子載波都對(duì)運(yùn)動(dòng)敏感。通常選擇中間頻率的子載波它們受環(huán)境影響相對(duì)穩(wěn)定??梢杂?jì)算所有子載波幅度的方差選擇方差較大的幾個(gè)作為特征。降噪使用簡(jiǎn)單的滑動(dòng)平均濾波器或低通濾波器濾除高頻噪聲。特征提取幅度特征計(jì)算所選子載波幅度的平均值、方差、或者更復(fù)雜的統(tǒng)計(jì)量。相位差特征由于相位纏繞直接使用相位很困難。但可以計(jì)算相鄰天線或相鄰子載波之間的相位差這個(gè)差值有時(shí)對(duì)運(yùn)動(dòng)更魯棒。檢測(cè)算法閾值法在無人狀態(tài)下采集一段背景數(shù)據(jù)計(jì)算幅度特征的平均值μ和標(biāo)準(zhǔn)差σ。設(shè)定一個(gè)閾值例如μ ± 3σ。當(dāng)實(shí)時(shí)數(shù)據(jù)的特征值超過這個(gè)閾值時(shí)就判定為有人進(jìn)入。這是最簡(jiǎn)單的方法?;瑒?dòng)窗口能量法計(jì)算一個(gè)短時(shí)間窗口內(nèi)CSI幅度的總能量平方和。人體移動(dòng)會(huì)導(dǎo)致信號(hào)多徑變化從而引起能量波動(dòng)。通過檢測(cè)能量曲線的峰值可以判斷事件發(fā)生。驗(yàn)證與調(diào)試 在房間無人時(shí)采集一段數(shù)據(jù)作為“背景”然后讓人走進(jìn)房間再采集一段。將兩段數(shù)據(jù)用上述流程處理并繪圖。你應(yīng)該能清晰地看到在人員進(jìn)入的時(shí)刻CSI幅度或能量曲線出現(xiàn)一個(gè)顯著的突變。如果變化不明顯可以嘗試調(diào)整接收端和發(fā)射端的位置、更換信道避免Wi-Fi干擾、優(yōu)化特征選擇試試不同天線對(duì)的組合、或者調(diào)整檢測(cè)算法的參數(shù)。這個(gè)簡(jiǎn)單的實(shí)驗(yàn)?zāi)茏屇阌H身體會(huì)到CSI數(shù)據(jù)如何與環(huán)境互動(dòng)。在此基礎(chǔ)上你可以嘗試更復(fù)雜的任務(wù)比如區(qū)分行走與靜止、識(shí)別簡(jiǎn)單的手勢(shì)方向、甚至估計(jì)人的移動(dòng)速度。每一步的深入都伴隨著對(duì)信號(hào)處理、機(jī)器學(xué)習(xí)算法更深的探索。整個(gè)CSI Tool的安裝配置之旅就像在組裝一臺(tái)精密的顯微鏡。硬件是鏡頭和載物臺(tái)軟件是調(diào)焦旋鈕和成像系統(tǒng)。過程可能充滿調(diào)試的繁瑣但當(dāng)你第一次從那些看似雜亂的數(shù)字中清晰地“看”到人的移動(dòng)軌跡時(shí)那種穿透物理世界的成就感會(huì)讓你覺得所有的折騰都是值得的。它不僅僅是一個(gè)工具更是一個(gè)讓你親手觸摸無線信號(hào)背后豐富信息的橋梁。