孔乾坤
(重慶市長壽區(qū)大數(shù)據(jù)應(yīng)用發(fā)展管理局,重慶 401220)
隨著無線通信技術(shù)的發(fā)展和物聯(lián)網(wǎng)在各行業(yè)的推廣應(yīng)用,智能終端及智能設(shè)備逐漸普及,對室內(nèi)環(huán)境下獲取終端或設(shè)備位置的需求日益增多?;谖恢玫姆?wù)(Location-Based Services,LBS)已成為定位導(dǎo)航、應(yīng)急搜救、搶險救災(zāi)的必備功能[1]。室內(nèi)定位技術(shù)是LBS 的核心,LBS 依賴于人員、貨物或資產(chǎn)的精確位置,但NLOS 環(huán)境影響定位精度的進(jìn)一步提高[2]。自從2016 年谷歌“阿爾法狗”圍棋系統(tǒng)以5:0 全勝韓國圍棋大師李世石以來,CNN受到人們的廣泛關(guān)注并取得了迅速發(fā)展。本文研究利用CNN 識別NLOS 信號的具體過程,將CNN 技術(shù)用于NLOS 識別,不需要人工提取信號特征,只需要將原始CIR 信號作為輸入,將是否為NLOS 信號作為輸出,模型訓(xùn)練完成后就能用于識別NLOS信號[3],識別NLOS 信號后只利用LOS 信號做定位,結(jié)果表明該方法能顯著提高定位精度。
CNN 是一類包含卷積計算且具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò),可用于圖像識別、信號識別、自然語言處理等領(lǐng)域。使用CNN 識別信號的步驟:(1)卷積層提取初步特征;(2)池化層提取主要特征;(3)全連接層匯總特征并進(jìn)行分類預(yù)測。
1.1.1 卷積層
對輸入數(shù)據(jù)矩陣中每個元素點,計算卷積核矩陣每個元素與卷積核矩陣覆蓋范圍內(nèi)對應(yīng)元素點的乘積,并累加所有乘積,累加和即為卷積層輸出。
1.1.2 池化層
池化層利用局部相關(guān)性原理對信號進(jìn)行下采樣,作用是保證生成的特征圖在特征不變的情況下降低數(shù)據(jù)維度,保留有用信息的同時,減少模型的參數(shù)數(shù)量和計算復(fù)雜度。
1.1.3 全連接層
全連接層中神經(jīng)元不經(jīng)過卷積運算直接連接到相鄰層的神經(jīng)元上。對全連接層輸入加權(quán)求和并經(jīng)過激活函數(shù),就可得到對應(yīng)的輸出。為了防止過擬合,全連接層中一般采用dropout 方法。
隨機失活[4](dropout)是指在訓(xùn)練模型過程中按照一定的概率使隱藏層部分神經(jīng)元失活,失活的神經(jīng)元不參與下一步的網(wǎng)絡(luò)訓(xùn)練,從而避免過擬合的發(fā)生。對某層神經(jīng)元,訓(xùn)練階段以概率p隨機將該神經(jīng)元失活,測試階段所有神經(jīng)元全部為激活狀態(tài),但其權(quán)重需要乘1-p以保證訓(xùn)練和測試階段各自的權(quán)重有相同的期望。假設(shè)dropout 輸入為x,對應(yīng)的輸出為y,該層權(quán)值用w表示,依據(jù)特定概率隨機選取的w矩陣的子集用w′表示,于是dropout運算過程可表示如下。
訓(xùn)練過程:
測試過程:
dropout 方法緩解過擬合現(xiàn)象的原因是:訓(xùn)練CNN 時,每次得到的子網(wǎng)絡(luò)是按照概率對權(quán)值矩陣隨機采樣后得到,多次訓(xùn)練后,每次參與訓(xùn)練的神經(jīng)元有所不同,避免了某個網(wǎng)絡(luò)參數(shù)過多導(dǎo)致的模型過于復(fù)雜,從而抑制過擬合。
卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程分為兩個階段。第一階段是數(shù)據(jù)由低層次向高層次傳播的階段,即前向傳播階段。第二階段是當(dāng)前向傳播得出的結(jié)果與預(yù)期不相符時,將誤差從高層次向底層次傳播訓(xùn)練的階段,即反向傳播階段。
訓(xùn)練過程如下。
步驟1:初始化卷積神經(jīng)網(wǎng)絡(luò)的權(quán)值;
步驟2:輸入數(shù)據(jù)經(jīng)過卷積層、池化層、全連接層,前向傳播得到輸出值;
步驟3:求出卷積神經(jīng)網(wǎng)絡(luò)輸出值與理想輸出值之間的誤差;
步驟4:將誤差傳回網(wǎng)絡(luò)中,依次求得全連接層、池化層和卷積層的誤差;
步驟5:按照誤差最小化準(zhǔn)則,通過反向傳播調(diào)整卷積神經(jīng)網(wǎng)絡(luò)的權(quán)值,然后進(jìn)入第二輪重復(fù)訓(xùn)練,直到誤差小于設(shè)定值或者達(dá)到最大訓(xùn)練次數(shù)時,結(jié)束訓(xùn)練過程。
本文使用的CNN 包括4 層卷積層、2 層池化層、1 層全連接層和1 層輸出層,網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。
網(wǎng)絡(luò)中的數(shù)據(jù)維度和參數(shù)設(shè)置[5]:Conv1 層輸入數(shù)據(jù)為1 024,從時域和頻域上看是2 個維度,輸入數(shù)據(jù)為2×1 024×1,Conv1 層卷積核大小為1×3,通道數(shù)目為32,輸出數(shù)據(jù)為2×1 024×32,激活函數(shù)為Relu;Conv2 層卷積核大小為1×3,通道數(shù)目為16,輸出數(shù)據(jù)為2×1 024×16,卷積層后繼續(xù)連接卷積層可以提取更加抽象的特征;Pool1層池化核大小1×2,池化層輸入為2×1 024×16,經(jīng)過池化層后數(shù)據(jù)維度變成原來的一半;同樣的方法得到Conv3 層輸入和輸出分別為2×512×16 和2×512×16,Conv4 層輸入和輸出分別為2×512×16 和2×512×16,Pool2 層輸入和輸出為2×512×16 和2×256×16,特征圖的大小為2×256;全連接層中使用了dropout 方法,輸出數(shù)據(jù)的維度是256;最后是輸出層,它建立特征到分類的映射,判斷輸入信號是否為NLOS 信號。根據(jù)信號的類型,最終輸出為1 或0。
圖1 本文神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
2.2.1 數(shù)據(jù)來源
本文使用的數(shù)據(jù)來源于歐盟“地平線2020”研究計劃的子課題eWINE(elastic Wireless Networking Experimentation,eWINE)。該計劃是利用人工智能知識解決當(dāng)前密集和動態(tài)無線網(wǎng)絡(luò)中存在的問題[6]。數(shù)據(jù)使用DW1000 超寬帶收發(fā)芯片測量,芯片配置為通道4(帶寬為500 MHz,中心頻率為3 993.6 MHz)數(shù)據(jù)長度為1 024,數(shù)據(jù)速率110 kb/s。數(shù)據(jù)集總樣本數(shù)量為42 000 個,共分為7 個不同的測量場景——辦公環(huán)境1、辦公環(huán)境2、公寓、車間、客廳、臥室和鍋爐房。本文根據(jù)研究需要重點分析辦公環(huán)境數(shù)據(jù),樣本數(shù)量為12 000 個。數(shù)據(jù)集中每行數(shù)據(jù)的長度為1 024,其中包含CIR0-CIR1015 共1 016 個信道沖激響應(yīng)數(shù)據(jù)和是否為NLOS 等信號參數(shù)。本文將原始CIR 作為輸入,將是否為NLOS作為輸出訓(xùn)練CNN。
2.2.2 硬件仿真平臺簡介
計 算 機CPU 為Intel(R) Core(TM)i5-4670 3.4 GHz,沒有使用GPU,安裝內(nèi)存8 GB,硬盤512 GB。
2.2.3 軟件仿真平臺簡介
軟件仿真平臺采用Windows7 64 位操作系統(tǒng)、Python3.6.5、Anaconda Navigator5.0.1、pip10.0.1、scikit-learn0.19.1、tensorflow1.9.0 和Keras2.1.6。程序運行過程中使用了大量第三方開發(fā)包,主要有用于科學(xué)計算和數(shù)據(jù)分析的軟件庫numpy1.14.0和scipy0.19.0,用于繪圖的python開發(fā)包matplotlib2.2.2。Anaconda是一款Python集成開發(fā)環(huán)境,是在Windows 上執(zhí)行Python 數(shù)據(jù)科學(xué)和機器學(xué)習(xí)的最便捷工具。Anaconda 包含了Conda、Python 等180 個科學(xué)包及其依賴項,可以方便地用于數(shù)據(jù)分析與處理。scikit-learn 算法庫中集成了主流機器學(xué)習(xí)算法,適用于中小型實用機器學(xué)習(xí)項目。tensorflow1.9.0 是一個支持Python 語言的開源軟件庫,適合于進(jìn)行神經(jīng)網(wǎng)絡(luò)方面的研究。Keras2.1.6 是基于Theano 和tensorboard 的深度學(xué)習(xí)庫,具有高度模塊化、極簡和可拓展性等特點,支持CNN 和RNN。此外,還用到了可視化工具tensorboard1.9.0,將tensorflow 程序運行過程中權(quán)值更新、損失函數(shù)值變化、模型性能評估函數(shù)值等重要數(shù)據(jù)以圖像的方式顯示出來,方便調(diào)試與優(yōu)化。
為驗證所提方法的效果,設(shè)置了3 組仿真實驗。實驗1 是觀察不同dropout 值對CNN 識別效果的影響,實驗2 是觀察不同訓(xùn)練次數(shù)對CNN 識別效果的影響,實驗3 是觀察不同激活函數(shù)對CNN 識別效果的影響,最后對比NLOS 識別前后定位效果。經(jīng)過實驗分析可知,采用NLOS 識別的定位能夠顯著提高定位精度。
實驗1 觀察不同dropout 值對系統(tǒng)識別性能的影響。將網(wǎng)絡(luò)中的訓(xùn)練次數(shù)保持為20 000,改變不同的dropout 值,觀察不同dropout 值對NLOS 信號識別率的影響。從表1 中可以看出,不同dropout值會影響識別效果,過大或過小都會導(dǎo)致NLOS 識別率降低,本文選擇的dropout 值為0.5。
表1 不同dropout 值對識別率的影響
實驗2 觀察不同訓(xùn)練次數(shù)對識別性能的影響。將網(wǎng)絡(luò)中的dropout 值保持為0.5,網(wǎng)絡(luò)每訓(xùn)練1 000 次輸出一次結(jié)果,觀察不同訓(xùn)練次數(shù)對NLOS 信號識別率的影響。從表2 可以看出,隨著訓(xùn)練次數(shù)的增加,NLOS 識別率也在增加,最終識別率穩(wěn)定在89.20%。
表2 不同訓(xùn)練次數(shù)對識別率的影響
實驗3 觀察不同激活函數(shù)對識別性能的影響。本文設(shè)計的CNN 網(wǎng)絡(luò)結(jié)構(gòu)使用5 個激活函數(shù),分別在4 個卷積層和1 個輸出層中。表3 的激活函數(shù)是指卷積層和輸出層中的全部的激活函數(shù),網(wǎng)絡(luò)中的dropout 值保持為0.5,觀察不同激活函數(shù)對NLOS 信號的識別率的影響。從表3 可以看出,當(dāng)激活函數(shù)為relu6 時,識別效果最好為89.20%。
表3 不同激活函數(shù)對識別率的影響
激活函數(shù)為relu6 時識別效果最好,此時識別率隨著訓(xùn)練次數(shù)的變化曲線如圖2 所示。
分析完NLOS 識別后,研究識別后的定位。NLOS 信號識別后的定位有兩種方法:一種是將NLOS 信號直接丟棄,只采用LOS 信號做定位;另一種是根據(jù)CIR 建立信號與測距誤差之間的模型,根據(jù)模型預(yù)測信號對應(yīng)的測距誤差,測距值減去模型預(yù)測出的測距誤差得到校正后的測距值,然后利用校正后的測距值做定位。本文只分析第一種定位方法。
圖2 識別率隨著訓(xùn)練次數(shù)的變化
本文使用的定位算法為LS 算法和WLS 算法,算法的推導(dǎo)過程在此不具體闡述,算法定位效果如圖3 所示。
圖3 NLOS 識別前后定位效果對比
由圖3 可知,采用NLOS 信號識別的定位能夠顯著提高定位精度。當(dāng)存在10 個信標(biāo)節(jié)點時,NLOS 信號識別前后的定位誤差分別為40 cm 和20 cm??梢姡摲椒ㄓ行Ы档土硕ㄎ徽`差,提高了定位精度。
本文以CNN 技術(shù)為基礎(chǔ),針對室內(nèi)環(huán)境下影響UWB 定位精度的主要原因是NLOS 傳播,研究了使用CNN 技術(shù)對NLOS 信號的識別,并給出識別之后的定位。文章首先介紹CNN 的理論知識,其次建立所需要的CNN 分類模型,最后基于CNN,用從真實環(huán)境中測量的原始CIR 訓(xùn)練NLOS 信號分類模型。仿真結(jié)果表明,使用原始CIR 的NLOS 識別效果良好。此外,本文還研究了NLOS 識別后的定位。結(jié)果表明該方法能顯著提高定位精度。