岳 蒂, 欒 峰, 佘黎煌, 丁 山, 張立立
(東北大學(xué) 計算機科學(xué)與工程學(xué)院,沈陽 110169)
近年來,隨著科學(xué)技術(shù)和生活水平的提高,人們越來越注重對聲音進行控制和處理。而正確的確定聲音位置是實現(xiàn)聲音控制的前提,因此聲源定位技術(shù)應(yīng)運而生[1]。多年來聲源定位是國內(nèi)外研究的重點課題,初期的研究主要應(yīng)用于雷達、聲吶等軍事系統(tǒng)[1]。隨著時代的發(fā)展,聲源定位技術(shù)也逐漸地應(yīng)用到民用和工業(yè)系統(tǒng)中,比如:視頻電話會議、智能機器人聽覺[2]、機器故障診斷、降噪等。隨著嵌入式技術(shù)的迅速發(fā)展,當(dāng)前市場上的聲源定位類產(chǎn)品,在設(shè)計實現(xiàn)上仍存在一些問題[3],例如,如何降低成本,如何縮小體積以提高可移動與便攜性等[4-5]。因此,聲源定位的研究與開發(fā)具有較強的實際價值和理論意義。本文以聲源定位算法為核心,設(shè)計了一個基于嵌入式平臺的聲源定位及成像系統(tǒng)。
系統(tǒng)的主控制器使用同類產(chǎn)品中性能較高的增強型STM32單片機,其時鐘頻率達到168 MHz、功耗低、具有更快的模數(shù)轉(zhuǎn)換速度、更強大的輸入/輸出端口 (input/output, I/O)復(fù)用功能以及更快的通用同步/異步串行接收/發(fā)送器(Universal Synchronous / Asynchronous Receiver / Transmitter, USART)和串行外設(shè)接口(Serial Peripheral Interface, SPI)通信速度[6]。系統(tǒng)主要包括FPGA模塊、TF卡模塊、FSMC接口、USB模塊和Qt上位機等模塊。
整體框架如圖1所示。TF卡模塊負責(zé)存儲數(shù)據(jù)、USB模塊負責(zé)下位機與Qt上位機之間的數(shù)據(jù)通信、Qt上位機負責(zé)將系統(tǒng)得到的聲源信息通過圖形用戶界面顯示出來。綜合設(shè)計實現(xiàn)了對空間區(qū)域內(nèi)進行聲源定位并通過上位機進行聲源成像顯示的功能。
圖1 系統(tǒng)的整體框架圖
由于系統(tǒng)所需數(shù)據(jù)量大、占用空間多,而STM32自身的內(nèi)存空間有限,大多數(shù)情況下需要從外部設(shè)備讀取數(shù)據(jù)再做處理,因此系統(tǒng)需要引入數(shù)據(jù)存儲單元。針對小型嵌入式系統(tǒng),大多都使用SD卡或TF卡。開發(fā)板板載的是TF卡接口,STM32系列芯片上帶有SDIO 控制器[7],iCore3 核心板上將SDIO 連接到TF卡座上,硬件連接如圖2所示。
圖2 TF卡模塊
雖然STM32已經(jīng)有一定的運算速度,但是由于該系統(tǒng)工程計算量和數(shù)據(jù)量較大,如果運算速度低,實時性和工程實現(xiàn)效果將不能得到保證。FPGA擁有時鐘頻率高、內(nèi)部延遲小、工作效率高、并行運行、存儲方式多樣、設(shè)計靈活通用和全部的控制邏輯由硬件完成等優(yōu)點[8-9]。因此系統(tǒng)采用FPGA模塊實現(xiàn)系統(tǒng)中運算量比較大的矩陣自相關(guān)計算。
綜合使用鎖相環(huán)(Phase Locked Loop, PLL)倍頻、雙口隨機存取存儲器(Random Access Memory, RAM)、乘法器等模塊,并通過Verilog HDL語言編程實現(xiàn)此功能。FPGA模塊中的整體電路架構(gòu)如圖3所示。
圖3 FPGA模塊的整體電路架構(gòu)圖
iCore3開發(fā)板的USB接口通過調(diào)用STM32的庫來實現(xiàn)STM32的USB設(shè)備通信,由于STM32 芯片不帶高速物理層(Physical Layer,PHY),這里用STM32和USB330連接的方式來實現(xiàn)數(shù)據(jù)的高速傳輸,硬件連接示意圖如圖4所示。
圖4 USB模塊
可變靜態(tài)存儲控制器FSMC是STM32系列采用一種新型的存儲器擴展技術(shù),在外部存儲器擴展方面具有獨特的優(yōu)勢,可根據(jù)系統(tǒng)的應(yīng)用需要,方便地進行不同類型大容量靜態(tài)存儲器的擴展[10]。本系統(tǒng)主要用FSMC來實現(xiàn)STM32與FPGA 間高速并行的數(shù)據(jù)傳輸。STM32自帶FSMC 控制器,本系統(tǒng)為實現(xiàn)FSMC 與FPGA 之間的通信,在FPGA 內(nèi)部建立一個RAM塊,F(xiàn)PGA橋接STM32和RAM塊,通過FSMC總線從STM32向RAM塊中寫入數(shù)據(jù),然后FPGA讀取RAM 中的數(shù)據(jù)進行運算。FSMC總線連接的原理圖如圖5所示。
圖5 FSMC接口原理圖
本文利用基于STM32與FPGA搭建的系統(tǒng)來實現(xiàn)聲源定位成像,數(shù)據(jù)包含聲音和圖像。上位機主要是將計算得到的聲源位置信息通過圖形用戶界面顯示出來。本系統(tǒng)采用Qt圖形界面框架作為上位機顯示軟件,設(shè)計如圖6所示的界面,實現(xiàn)如下功能:上位機點擊連接按鈕向下位機發(fā)送連接請求,下位機進行連接,連接成功后,上位機通過向下位機發(fā)送命令完成數(shù)據(jù)傳輸,上位機接收數(shù)據(jù)并進行處理和顯示。
圖6 Qt上位機圖形界面
本系統(tǒng)中,上位機接收兩個類型數(shù)據(jù):一是當(dāng)前的圖片數(shù)據(jù),二是經(jīng)系統(tǒng)運算得到的聲音強度數(shù)據(jù)。圖片數(shù)據(jù)不做任何處理,在聲音強度數(shù)據(jù)經(jīng)過均值濾波后,使用RGB888類型的調(diào)用函數(shù)將聲音強度數(shù)據(jù)與圖像數(shù)據(jù)的紅(Red,R)、綠(Green,G)、藍(Blue,B)3個分量按照顯色原理進行疊加,最后將合成后的圖像進行顯示。
本系統(tǒng)的主程序流程圖如圖7所示,主要由初始化程序、數(shù)據(jù)調(diào)用程序、聲源定位算法、數(shù)據(jù)傳輸程序、均值濾波算法、數(shù)據(jù)成像程序等幾部分組成。系統(tǒng)上位機為Qt,下位機主要為STM32,F(xiàn)PGA歸STM32控制。系統(tǒng)啟動后,首先進行初始化。然后由Qt發(fā)起信號建立連接,STM32處于連接檢測狀態(tài),直至連接成功。成功后STM32將TF卡內(nèi)的聲音原始數(shù)據(jù)按照要求提取,并將數(shù)據(jù)做簡單處理后送入FPGA進行自相關(guān)運算,再經(jīng)過算法處理后, STM32將得到的數(shù)據(jù)做索引排序后將有用數(shù)據(jù)保留并寫入TF卡中。接下來STM32將處理完后的結(jié)果和圖像數(shù)據(jù)送入上位機。上位機接收到聲音強度數(shù)據(jù)和圖像數(shù)據(jù)后,先進行均值濾波再進行成像顯示,至此,系統(tǒng)實現(xiàn)了聲源定位及成像顯示的全過程。
圖7 系統(tǒng)的主程序流程圖
在麥克風(fēng)陣列聲源定位方法中,基于到達時間差(Time Difference of Arrival,TDOA)的聲源定位算法有著運算原理易于理解、定位精度較高等特點,因此適用于在嵌入式設(shè)備上實現(xiàn)?;赥DOA的聲源定位算法實現(xiàn)過程,一般分為延時估計和聲源定位兩個部分,時延估計的精確度直接決定了聲源定位的精度,所以是算法的核心部分[11-12]。時延估計方法有很多,應(yīng)用較為廣泛的是基于相關(guān)分析的估計方法[13]。
(1) TDOA時延估計算法原理。聲波在空氣中以一定的速度傳播,不同位置的麥克風(fēng)接收到的聲音信號有不同的相位,利用彼此間的相位差可獲取同一個聲源信號到達每個麥克風(fēng)的時間延遲。在近場模型中,聲源的時延如圖8所示。Mi、Mj為兩個麥克風(fēng),M0為參考麥克風(fēng),Xi(n)、Xj(n)為兩個麥克風(fēng)接收到的聲音信號,d為兩個麥克風(fēng)之間的距離,t為信號到達兩麥克風(fēng)之間的時間延遲,c為聲音在空氣中的傳播速度,c·t為聲程差,為任意點聲源到達各個麥克風(fēng)的距離,為任意點聲源到達參考麥克風(fēng)的距離。
圖8 聲源的時延原理圖
(2) TDOA 時延估計算法中的自相關(guān)。已知聲源所在平面與麥克風(fēng)所在平面平行,且距離、麥克風(fēng)的坐標(biāo)已知,假設(shè)聲源處在圖像的某一塊區(qū)域內(nèi),則可計算出任意點聲源到達各個麥克風(fēng)的距離L和參考原點的距離L0:
從而計算出聲源到達每個麥克風(fēng)與參考原點的相對距離差[14]:
ΔL=L-L0
(3)
在已知聲音在空氣中的傳播速度v和采樣頻率f就可以得出每個麥克風(fēng)相對于參考原點的相對時延:
(4)
將實際的聲音數(shù)據(jù)按照每一區(qū)域內(nèi)相對于參考原點的相對時延做延遲后取出每一區(qū)域的多通道數(shù)據(jù)分別構(gòu)成矩陣A,將這些矩陣分別自相關(guān),歸一化后構(gòu)成聲音強度矩陣SP,聲音強度矩陣中的值越大則對應(yīng)的區(qū)域是聲源位置的可能性就越大[15]。
SP=ATA
(5)
通常情況下,矩陣自相關(guān)按照定義的方法編碼即可,但是在FPGA中需要一次性用矩陣兩列對應(yīng)位置上的元素同時相乘,而如果矩陣每一列的元素數(shù)量比較大,一般的 FPGA 芯片的資源有限,難以滿足要求。因此將的自相關(guān)運算簡化為的任意一行數(shù)據(jù)和的每一列數(shù)據(jù)的相關(guān)運算,經(jīng)實驗驗證此方法歸一化后與完整的自相關(guān)歸一化后定位效果一致。
TF卡中存儲的數(shù)據(jù)類型是浮點型,在Quartus II中,兩個浮點數(shù)相乘至少需要5個時鐘周期,這樣對程序運行速度、時間以及設(shè)計難度產(chǎn)生了負面影響。為了加快運行速度,又由于FSMC是16位的數(shù)據(jù)線,因此將浮點數(shù)處理為16位整型數(shù)據(jù)進行運算。為了節(jié)省FPGA內(nèi)的資源,最終選擇用乘累加的方法來實現(xiàn)該運算,基本流程如圖9所示。I1和I2是乘法器的兩個輸入,矩陣的元素按照行的順序依次流入通道,每一行的第一個元素賦給I1,剩下的幾個元素依次賦給I2,逐次依此進行乘累加和運算,即可得到自相關(guān)結(jié)果。
圖9 自相關(guān)數(shù)據(jù)流動圖
為了驗證此套設(shè)計方案的合理性,先對設(shè)計聲源成像系統(tǒng)進行分模塊的功能測試,再對整體進行性能測試。
在FPGA內(nèi)部建立RAM塊,通過FSMC總線從STM32向RAM塊中寫入0~511的字符型數(shù)據(jù),然后將RAM內(nèi)數(shù)據(jù)讀取后并進行取反顯示。結(jié)果如圖10所示。
圖10 FSMC總線測試結(jié)果
STM32通過USB上傳一幅圖片到上位機,顯示圖片并測試傳輸速度。結(jié)果如圖11所示,并得到傳輸速度為32.7 m/s。圖片選用系統(tǒng)測試時使用攝像頭從聲源場采集到的圖片,圖中實驗人員通過手機播放聲音設(shè)置聲源點,手機下方即為聲源處,系統(tǒng)通過多通道麥克風(fēng)陣列采集聲音數(shù)據(jù)。
圖11 USB傳輸測試結(jié)果
系統(tǒng)的最終運行結(jié)果如圖12和13所示,圖中紅色矩形為麥克風(fēng)采集的聲音數(shù)據(jù)經(jīng)過系統(tǒng)運算處理得到的聲源圖像。通過將聲源圖像疊加到攝像頭采集的圖片上,可以驗證系統(tǒng)的定位成像結(jié)果準(zhǔn)確。
圖12 自相關(guān)運算由STM32中完成
對比聲源成像效果可得,矩陣自相關(guān)運算由FPGA和STM32的處理結(jié)果基本一致。在FPGA晶振為25 MHz的前提下,進一步的實際測試表明,由STM32和FPGA完成成像計算耗時分別為0.8 s和0.6 s。因此,本套系統(tǒng)的設(shè)計方案在完成聲源定位和成像功能的基礎(chǔ)上,通過合理的使用FPGA,縮短了算法的計算時間、提高了系統(tǒng)的成像效率,達到了由STM32和FPGA 協(xié)同完成聲源定位及成像的預(yù)期設(shè)計目標(biāo)。
本文根據(jù)聲源定位研究現(xiàn)狀以及現(xiàn)有聲源定位產(chǎn)品存在的不足,結(jié)合嵌入式技術(shù)的發(fā)展成果,通過分析現(xiàn)有的定位方法,研究并設(shè)計了基于STM32和FPGA的聲源定位和成像系統(tǒng)。利用STM32外設(shè)豐富、易于實現(xiàn),F(xiàn)PGA并行運行、運行速度快的優(yōu)勢,采用STM32作為主控制器,利用FPGA實現(xiàn)復(fù)雜的矩陣自相關(guān)運算,并在此基礎(chǔ)上將聲源可視化,完成成像顯示。本文的意義在于應(yīng)用嵌入式技術(shù),通過STM32與FPGA的協(xié)同設(shè)計,在硬件平臺上實現(xiàn)了聲源定位與成像系統(tǒng)。此嵌入式聲源成像系統(tǒng)有效地提高了系統(tǒng)的運行速度,增加了聲源定位的效率,而且其硬件集成度高、功耗低,這些都為聲源定位系統(tǒng)的小型化和便攜化的開發(fā)與設(shè)計提供了參考。