周飛飛,李翔宇
(清華大學 微電子學研究所,北京 100084)
基于超聲波或毫米波雷達探測技術,可以實現對于精細手勢的識別。但是,現有文獻對于系統在實際場景中的手勢自動檢測問題和雜波問題都沒有考慮。手勢檢測用于探測是否存在操作手勢,并在必要時啟動手勢識別功能。谷歌Soli項目[1,2]通過連續發射,連續識別的方式避免了手勢檢測的步驟,但是提取出的手勢的有效信號片段存在不完整或者冗余的情況,會降低手勢識別的精度。而通過人工手動方式開啟和關閉手勢識別流程[3]會導致每次采集的手勢數據長度不同,不利于識別算法處理,同時會降低系統的實用性。雜波來自工作環境中的非手物體,如人體其它部位、附近的家具、墻壁等,現有的文獻中,沒有對其做單獨處理,只依靠分類器的魯棒性降低雜波的影響[3,4],因此,當運用于真實的復雜環境中時,手勢識別精度會顯著降低。
針對上述問題,本文提出了一套基于相參脈沖串、RDM(range doppler map)[5,6]圖特征和隨機森林分類器的手勢識別算法,其中,包括了手勢檢測和雜波濾除算法。手勢檢測算法基于動態能量閾值,能夠適應真實環境變化,當檢測到手勢時,自動觸發手勢識別流程。而雜波濾除算法通過目標分割的方式,濾除RDM圖中的雜波,只提取出有效目標的特征用于識別,提高了系統在復雜環境中的識別率。
本文的手勢識別系統基于40 kHz超聲波信號,超聲波收發器采用村田制作所的MA40S4R(T)。發射信號體制采用相參脈沖串信號,通過信號處理,得到RDM圖,進而獲得目標的距離和速度信息。為了識別三維運動,本文使用了一個發射器,3個接收器。系統直接對原始回波信號進行采樣的全數字化信號處理,信號解調和正交化等處理均在數字域中完成。
處理流程如圖1所示,當沒有手勢進入檢測區域時,系統一直處于手勢檢測階段,手勢檢測算法只基于能量值的變化,不需要經過復雜的信號處理,具有低功耗、實時性高的優點。只有當檢測到手勢出現時才切換到手勢識別模式,完成一次手勢識別流程后,系統又自動重新回到手勢檢測階段。手勢檢測和手勢識別兩種模式相互切換的方式,提高了用戶體驗,降低了系統的整體功耗。

圖1 手勢識別處理流程
本文采用了一種基于動態能量閾值的手勢檢測算法代替傳統的恒虛警率(CFAR)檢測方式,這樣可以不需要解調直接進行手勢檢測,實時性更高。算法流程見表1。系統通過不斷發射和接收單脈沖信號,根據其能量值判斷是否有手進入檢測區域。單脈沖信號采用脈沖寬度為0.1 ms的40 kHz超聲波信號。
在實際的應用中,系統所處的環境在不斷發生變化,所以每完成一次手勢識別流程后,會回到初始化的階段,重新采集背景回波。為了提高檢測算法的魯棒性,系統初始化時需要采集L個脈沖回波信號作為背景數據,手勢檢測直接在未經解調的原始回波信號上進行,未經解調的信號包含正負值,所以將每個回波能量的最大值(正值的最大值和負值的最小值)分別存入長度為L的列表An1和An2中。而在檢測階段時,如果經過判斷,當前脈沖回波信號只有背景回波,則會更新An1和An2,即刪除An1和An2的第一個元素,并將最新的背景回波數據的最值加入到列表的末尾。保證了An1和An2中存放的是最新的L個背景回波的數據,系統中L設為100。

表1 手勢檢測算法偽代碼

(1)
實際上,特征值p1~p4統計了脈沖回波中能量值高于背景回波的采樣點個數,以及高于背景回波這部分采樣點能量的平均值。將每個脈沖回波的特征值p1~p4分別存入列表Ap1~Ap4中。與An1和An2類似,列表Ap1~Ap4也是實時更新。動態閾值參數p1*~p4*分別取列表Ap1~Ap4中的最大值,如式(2)所示,動態閾值參數描述了能量值最高的背景回波信號的特征
(2)
在采集并處理完背景數據之后,系統會逐一判斷最新接收到的每個單脈沖的回波,根據式(1)計算待測脈沖的特征值p′1~p′4, 并根據式(3),計算當前的狀態status,其中α為虛警率調節參數,本文中設為1.1。如果status為0,表示沒有檢測到手勢,當前為背景回波數據,更新列表Ap1~Ap4,An1,An2和動態閾值參數p1*~p4*
(3)
需要連續10個脈沖回波的status都為1,才判斷為有手勢產生。這樣,可以減小因為背景回波的隨機波動帶來的虛警率。
手勢檢測算法能夠動態更新能量閾值,可以很好地適應環境的變化,通過增加連續檢出條件提高檢測的魯棒性。
相比于連續波信號[7,8],單脈沖信號[9],相參脈沖串信號克服了連續波信號無法測距、單脈沖信號無法同時保證高距離分辨率和速度分辨率的缺點。如圖2所示,脈沖寬度Tp為0.1 ms,脈沖重復周期Tr為1.5 ms,取64個Tr為一幀,根據一幀的信號做FFT(fast fourier transformation),得到RDM圖,與文獻中直接切分方式[10]不同的是,我們使用滑動窗口的方式切分數據,提高了系統的幀率,滑動窗口大小取32個Tr,那么,1 s的手勢可以劃分為19幀。系統的距離分辨率和速度分辨率分別為
(4)
(5)
其中,u為聲速,λ為超聲波的波長,N為一幀數據包含的脈沖重復周期個數。

圖2 信號處理方案
每個手勢的回波信號長度為1 s,將采集到的回波信號解調后,劃分為多幀,對每一幀信號做FFT,得到每一幀的RDM圖。
一幀的信號包含64個脈沖重復周期Tr的數據,將64個Tr信號的值排列成64行,如圖3所示,每行表示一個脈沖重復周期內信號的值,然后針對每一列,即不同脈沖周期同一位置的值做FFT,就可以得到這一幀手勢數據的RDM圖,它反映了回波能量在不同距離和多普勒頻率(徑向速度)上的分布,RDM圖中,距離維和速度維中的最小單位分別定義為距離單元和速度單元。與FMCW(frequency modulated continuous wave)方式不同[4,5],相參脈沖串信號只需經過1-D FFT就能獲得RDM圖。

圖3 RDM圖生成過程
超聲波回波信號中包含有外界環境中的不感興趣的目標的散射波,包括靜止和運動的,這一部分回波會對手勢識別造成干擾。
對于靜止物體雜波,因為使用了手勢檢測模塊,手一旦進入檢測區域,立刻采集回波信號,那么手勢的第一幀數據一定是運動的,即手勢的運動信息出現在第一幀RDM圖中頻率非0的部分,那么第一幀RDM圖中0頻(速度為0)部分的能量為系統當前的靜態雜波,每幀數據都減去靜態雜波的能量,以此來抑制靜態雜波分量。
對于運動物體的雜波,則使用目標分割(segmentation)的方式來濾除——通過算法找到感興趣的前景目標,只保留有效目標的信息。在近距離的手勢識別應用中,手勢一般在距離裝置5 cm到25 cm內完成,在這段距離內,假設沒有大反射面的其它運動目標,這在實際應用場景中是合理的。那么,在濾除靜止雜波分量以后,手作為距離裝置最近的運動目標,其反射的能量遠高于背景。在運動的過程中,手的同一個部位在徑向上的距離和速度都是連續分布的,所以在RDM圖中會呈現出一個高能量值的跨越多個距離單元和速度單元的連通域(亮斑)。對于手的不同部位,如果速度和距離都相近,那么其連通域是連的,如果速度或者距離相差比較大,則會形成分立的幾個連通域。這幾個分立的能量值較高的連通域反映了手的各個部位的運動,是我們關心的目標,而RDM圖中的其它部分的能量是由雜波引起的,需要濾除。本文中采用目標分割算法,能夠快速找到RDM圖中表示手勢運動的部分,目標分割算法如圖4所示。

圖4 目標檢測算法流程
目標分割算法主要是通過在RDM圖中找到能量較大的幾個分立的連通域的方法來實現,具體算法是,首先找到當前RDM圖(減掉靜止雜波,將已找到的目標處的能量值置為零后)中的最高能量值E所在的位置I,作為當前目標中的第一個點,然后,通過廣度優先搜索(BFS)迭代搜索目標點的相鄰位置,找到以I為中心的一個連通域,滿足連通域中每個點的能量值都大于等于β2E, 把整個連通域作為一個目標。然后把RDM圖中已找到的目標區域置零,重復前面算法,繼續尋找下一個目標,直到當前目標能量的最大值小于β1Emax, 這樣,就找到了所有的前景目標,β1和β2均小于1。最后,去除尺寸(距離跨度)太小的目標,保留主要目標。得到所有目標的像素坐標后,只保留RDM圖中目標處的值,非目標處都置為0。
從一幀回波信號中提取的特征主要分為3類[6]:散射中心特征,RDM圖的低維描述特征,多通道交叉特征。
(1)散射中心特征:
RDM圖中能量最大值的點對應的速度vc,距離rc,加速度ac,以及反射能量大小ρc。其中,加速度ac為相鄰兩幀vc的差。
(2)RDM圖低維描述特征:
(3)多通道交叉特征:

對于一幀的某一通道數據,散射中心特征共有4個,RDM圖低維描述特征共有6個,這兩類特征都需要在3個通道上分別計算,所以共有 (6+4)×3=30個特征,再加上15個交叉特征,對于一幀數據,共提取出45個特征。
除上述針對一幀數據提取的特征以外,本文還提取了整個手勢序列的統計特征,即針對上述的45維特征中某一維特征,計算其在19幀數據中的均值、標準差、均方根、最大值和最小值。所以,共有5×45=225統計特征,統計特征可以很好地描述每一維特征的變化趨勢。將每一幀RDM圖的特征拼接起來,加上手勢序列的統計特征,共有45×19+225=1080個特征。
為滿足實時性的要求,本文使用了隨機森林用于手勢分類。一共使用了1080維特征,隨機森林能夠自動對特征進行篩選;同時,通過隨機選取訓練樣本和特征子集,隨機森林可以有效防止過擬合;在我們的系統中,對實時性要求很高,隨機森林中各個子樹間相互獨立,可并行化,提高速度。
我們搭建了一個實驗用的原型系統,包含基于FPGA搭建的嵌入式信號采集系統,超聲波前端模塊和負責數據處理與識別算法的PC端程序3個部分[10]。信號采集系統搭建在Digilent公司的Nexys4開發板上,使用FPGA內部的XADC采集數據,存到片外RAM中,然后再通過以太網口將數據發送到PC端。
本文定義了7種不同的手勢,包括左移、右移、遠離、靠近、五指張開、五指閉合和招手動作,如圖5所示。

圖5 手勢
左移和右移用于研究系統的橫向分辨能力,靠近和遠離用于觀察系統徑向分辨能力,五指張開和五指閉合用于研究系統對于包含手指運動的精細手勢的識別能力,而招手需要連續完成手掌閉合、張開、再閉合的動作,用于觀察系統對于往復運動的識別效果。
手勢在距離裝置5 cm到25 cm內完成,共采集了3名實驗人員的手勢數據,每個人每種手勢采集100個數據。將其中80%的數據用于訓練,20%的數據用于測試。
為了降低數據集切分對于模型評估的影響,我們使用了5折交叉驗證(5-fold cross validation),并取其平均值。系統對于7種不同手勢的識別率為97.9%,其混淆矩陣見表2。

表2 7種手勢的識別結果
為了評估雜波濾除在復雜環境下的作用,引入了運轉的電風扇作為干擾因素,如圖6所示,電風扇距離裝置約15 cm,在實驗過程中,由于風扇的左右擺動和扇葉的轉動,會引入大量雜波,在這種實驗條件下,每種手勢采集100個數據,用于測試。

圖6 實驗裝置
對靠近手勢的RDM圖分析,圖7表示在沒有風扇干擾時得到的RDM圖,但是,如果引入了電風扇作為干擾,相同手勢的RDM圖如圖8(a)所示。可以看到,因為風扇基座靜止不動,和圖7相比,圖8(a)中有比較明顯的靜止雜波,同時,因為風扇整體在左右擺動,風扇的扇葉也在轉動,在圖8(a)中多出了運動雜波分量。經過算法濾除雜波后,只保留了有效目標的信息,如圖8(b)所示,可以看到,靜止雜波分量和運動雜波分量都得到了很好的濾除,有效目標的速度為正,表示正在徑向靠近裝置。

圖7 無干擾下靠近手勢的RDM

圖8 強干擾下雜波濾除效果
為評估雜波濾除的作用,訓練數據使用在正常環境中采集的手勢數據,而測試數據使用有電風扇干擾時采集到的數據。如果算法中使用了雜波濾除,測得準確率為96.4%,如果不使用雜波濾除方案,準確率僅為90.7%。可以看到,雖然訓練數據是在正常的環境中采集的,但是因為使用了雜波濾除方案,在變化后的復雜環境中,依然能夠保持很高的準確率;而如果不濾除雜波,當系統環境變化時,識別率明顯下降。
本文提出了一套基于相參脈沖串、RDM圖特征和隨機森林分類器的手勢識別算法,其中包括手勢檢測和雜波濾除算法,對7種不同手勢的識別率為97.9%。基于動態能量閾值的手勢檢測算法使得系統能夠在手勢檢測、手勢識別兩種模式間自動切換,相比于連續識別和人工觸發這兩種方式,降低了系統功耗,提高了用戶體驗。同時,實驗結果表明,相比于不處理雜波的方法,本文通過基于目標分割的雜波濾除算法,只提取出有效目標的特征用于識別,在存在干擾的真實應用環境下手勢識別率提升了5.7%。