岑林澤,徐一祺,楊宇帆,溫懷疆
(浙江傳媒學院 媒體工程學院,浙江杭州,310018)
本系統主要由控制模塊、麥克風矩陣模塊、云臺控制模塊、幅度相位檢測模塊和電源模塊組成。系統總體設計框圖如圖1所示。其中,控制模塊我們選用樹莓派4B,能夠很好地滿足該系統對于處理、便攜、高速收發數據等的需求。同時考慮到樹莓派的I/O口較少而功能模塊引腳較多的情況,我們決定在此基礎上再搭載Arduino UNO 單片機,用于數據的采集和接收。傳感器我們選擇Gy-max4466 駐極體話筒放大器和科大訊飛六麥環形陣列分別作為聲源粗定位和細定位。該系統能實現定位聲源、動態追蹤聲源,計算并顯示檢測裝置和“聲源”距離、夾角的功能。該裝置能夠應用在機械系統的在線狀態監測和故障診斷、遠場語音拾取、工業產品噪聲檢測等場景中,有效解決了部分作業中的痛點和難點問題。

圖1 系統總體框圖
聲源定位的模型一般可以分為遠場模型和近場模型,假設聲源到麥克風的距離為r,麥克風之間的距離為d,聲音的波長為λ,則有,通常當r遠大于θ時認為符合遠場模型,反之認為符合近場模型。根據題目要求,聲源到麥克風的距離r約為3 米,考慮到實際作品安裝位置的限制,假設麥克風之間的距離為0.1米到0.5米,聲音的波長在0.17米到17 米之間,根據公式推算應該選擇近場模型進行定位分析。
在近場模型中,聲源到麥克風陣列的波形通常當作球面波處理,假設近場模型中三個麥克風與聲源之間的位置關系如圖2所示(其中τ12,τ13 分別為第二和第三個麥克風與第一個麥克風的時間長度)。

圖2 三個麥克風與聲源關系圖
經過簡單的計算分析后,可以得出聲音波長約為0.48米,即可計算出聲源的頻率:。
本單元由樹莓派4B(Raspberry Pi 4B)和Arduino UNO 來實現整個系統的數據處理和輸出控制。其中,樹莓派4B 是一款“即插即用”的單板計算機,它同時也是學習AI人工智能項目很好的起點。基于Linux操作系統的樹莓派,可以使用大量Linux 下的免費軟件和工具,它實質上是一臺迷你的嵌入式計算機,支持雙頻WiFi、藍牙5.0、提供2個Micro HDMI2.0 接口、千兆網口、MIPI DSI 顯示屏接口、MIPI CS 攝像頭接口、立體聲耳機接口、2個USB2.0 接口、2個USB 3.0 接口以及40 針擴展GPIO 接口。
在核心處理器的選擇上,相較于我們在預期考慮選擇的STM32 單片機,樹莓派4B 具有更加強的移植性、更高的性價比,同時功能、性能也更加強大,能夠很好地滿足該系統對于靈敏、便攜、高速數據處理等的需求。同時考慮到樹莓派的I/O口較少,而功能模塊引腳較多的情況,我們決定在此基礎上再搭載Arduino UNO 單片機,用于數據輸出的控制 和 顯 示。Arduino UNO 是 基 于ATmega328P的Arduino開發板。它有14個數字輸入/輸出引腳(其中6個可用于PWM 輸出)、6個模擬輸入引腳,一個16 MHz的晶體振蕩器,一個USB 接口,一個DC 接口,一個ICSP 接和一個復位按鈕。它包含了微控制器所需的一切,只用簡單地用電池供電就可以驅動它。并且它非常的小巧便攜,不會給使用者帶來負擔。同時,Arduino 搭載了相當豐富的標準庫和第三方庫,這也讓我們在使用各個功能模塊采集數據時獲得了極大的便利。
最終,我們通過串口將樹莓派和Arduino 連接以實現數據的傳輸和通信。一旦麥克風傳感器檢測音頻信號,就會把相關信息以數據流的形式傳輸給樹莓派,樹莓派接收到數據后將對數據進行分析處理和運算,并對當前的情況傳達相關的指令,由Arduino UNO 單片機控制三維云臺做出指示反應。這樣既解決了樹莓派I/O口不夠用的問題的,也大大提高了接收數據和數據處理的效率。具體的設計流程如圖3所示。

圖3 控制處理單元設計框圖
電源由變壓部分、濾波部分、穩壓部分組成。為整個系統提供±5V 和±12V 電壓,使電路的正常穩定工作。供電由四節串聯的18650 電池以及格氏一節ace 航模飛機電池組成。其中,18650 鋰電池的容量在1200mAh~3600mAh之間,比一般的電池容量(800mAh 左右)要高,能夠滿足整個系統的供電需求。同時,該鋰電池具有壽命長、安全性能高、電壓高、內阻小等優點。同樣,該系統中使用的航模電池也具有電池容量高,續航時間長,動力強勁穩定,散熱效果好,不易鼓脹,循環性能好,使用壽命長等優點。
我們使用TPS54360 芯片制作開關電源模塊,實現電壓DC-DC 轉換,把12V 電壓轉化為5V 電壓輸出。該模塊正壓最大帶載電流可達3.5A,理論轉換效率可達91%。芯片內部具有過熱、過壓和頻率折返保護。該降壓模塊的原理圖如圖4所示。

圖4 DC-DC 降壓模塊原理圖
聲源使用蜂鳴器,喇叭等出聲器件制作,考慮到音源所處的環境可能會有大量雜音干擾,因此該系統采用了功率為5W的喇叭制作聲源,再通過TPA3138d2 數字功放模塊作為前級推動。在獨立的情況下,我們利用18650 電池供電,以此達到聲源可以高效率地發出聲音的效果。同時,我們選擇NE555 振蕩器產生的方波輸入到數字功放的信號輸入端,然后通過PWM 調制來實現聲音大小的調節。聲源子系統的具體設計流程如圖5所示。數字功放電路如圖6所示。

圖5 聲源子系統框圖
麥克風矩陣我們選用的是科大訊飛的六麥環形陣列,該模塊能夠對聲場的空間特性進行采樣并處理。該模塊能夠實現抑制背景噪聲、干擾、混響、回聲,信號提取與分離等功能,且效果非常顯著。
信號的提取與分離是指在期望方向上有效地形成一個波束,僅拾取波束內的信號,從而達到同時提取聲源和抑制噪聲的目的;此外利用麥克風陣列提供的信息基于深度神經網絡可實現有效的混響去除,從而極大程度上提升了真實應用場景中語音交互的效果。
該麥克風陣列板載系統為Linux 系統,采用平面式分布結構,包含6個麥克風,可實現360 度等效拾音,主機與麥克風陣列之間的通信方式為基于USB的自定義通信協議。在使用時,我們可以在主機端進行諸如麥克風板開機、獲取音頻、設置主麥方向、獲取喚醒角度等操作。
麥克風陣列結構如圖7所示,其中0~5 表示麥克風的編號,LED 燈編號從 0 號麥克風開始,順時針編號依次為0~11。

圖7 麥克風陣列結構圖
在麥克風陣列中,我們需要設定一個主麥來實現指定方向聲音加強,其他方向抑制的目的,且降噪音頻的獲取也基于該主麥方向的。若未主動設置主麥,則主麥方向隨機,其獲取到的降噪音頻不一定基于你說話的方向,這時生成的降噪音頻可能不是最優的。如圖8所示,我們設置該麥克風陣列的主麥為0 號麥克風,測試角度分別為289 度(點亮10 號燈)、73 度(點亮2 號燈)、268 度(點亮9 號燈),該角度定義從0 號麥克風位置起始軸,按順時針方向繞行分別為0 度~360 度(見圖7)。

圖8 麥克風陣列測試結果輸出圖
該三維云臺模塊由2個K20 金屬數字舵機安裝完成,拆解示意如圖9所示,只要把激光筆固定安裝在1 號舵機上,即可實現云臺對激光筆全方位的控制,可以讓激光筆指示在空間的任意位置。其中1 號舵機繞水平X 軸方向轉動,控制激光筆上下方向(即Z 軸方向)指示移動;2 號舵機繞豎直Y 軸方向轉動,控制激光筆左右方向(即X 軸方向)指示移動。

圖9 三維云臺解構示意圖
我們使用Arduino UNO 單片機來控制這三維云臺。在麥克風矩陣接收到音源,由樹莓派處理得出結果后,通過串口將該結果傳輸給Arduino 單片機,由Arduino 單片機來控制三維云臺,實現激光筆的指示工作。
該部分由三個Gy-max4466 駐極體話筒放大器和三個AD8302 幅度相位檢測模塊組成。
Gy-max4466 駐極體話筒放大器是一款可調放大器,該放大器具有的電源噪聲抑制能力,不像其他麥克風放大器那樣嘈雜或刮擦。該放大器還包括一個小的微調電位器來調節增益,可以將增益從25 倍設置為125 倍。
AD8302 內部包含2個精密匹配的寬帶對數放大器、1個寬帶相位檢測器、1.8V 精密基準源,以及模擬標定電路和接口電路,能同時測量從低頻到2.7GHz 頻率范圍內2個輸入信號之間的增益(亦稱幅度比)和相位差。AD8302 是一款完全集成的RFIC,用于測量兩個獨立輸入信號之間的幅度和相位。該器件的工作頻率可從低頻到2.7GHz。此模塊具有優秀的幅度、相位測量性能,采用的電源濾波。在兩路信號的幅度差測上面,能夠達到很高的測量精度,相位差測量上面在0~180 度內,都是每度步進1mV的效果。
如圖10所示,該模塊從接收陣列各話筒放大器所接收之電壓信號的幅度與相應放大器到待測聲源的距離兩者之間存在的關系出發,通過AD8302 模塊計算出每兩個話筒放大器的電壓差,建立電壓差和距離為參量的約束條件表達式,從而進行聲源定位。具體算法如圖2所示。

圖10 相位幅度檢測模塊示意圖
基于時間差的方法與基于聲壓幅度比的方法在理想情況下均能進行定位。但是,實際情況下,語音信號通常會含有噪聲,求取時間差的算法對噪聲比較敏感,計算出的時間差不易達到需要的精度,因而造成聲源的錯誤定位。與此對應,由于聲壓幅度比對噪聲不敏感,因此相位幅度檢測法定位具有良好的抗噪性能。
該系統的程序設計分為兩部分:樹莓派4B 部分和Arduino UNO 部分。以樹莓派4B 作為數據處理計算中心,以Arduino UNO 作為數據采集和控制中心。樹莓派采用TDOA 算法對信號進行處理,能夠較為準確地獲得音源的位置。Arduino UNO 使用幅度相位檢測算法對信號進行處理并與樹莓派獲得的數據進行對比檢測,以形成正反饋系統,同時Arduino UNO 負責云臺和激光筆的控制。
該部分程序采用Python 語言編寫,整體程序主要由信息采集處理、計算分析聲源位置、結果串口輸出三部分組成。利用PyCharm 平臺對程序進行編譯、調試,實現各個部分的功能。
具體程序流程如下:上電后,系統進入初始化程序,麥克風矩陣模塊啟動,當接收到聲源信號后,六個麥克風把接收到的信號傳給矩陣模塊進行預處理。樹莓派調用該預處理結果進行進一步計算,最后把結果通過串口傳給Arduino UNO 單片機。
在該數據處理過程中,我們用到了TDOA 算法。TDOA算法的基本原理就是根據信號到達監測區域中的幾對節點之間的時間差,求得距離差來確定聲源的位置。對于一個傳感器網絡,知道了信號源到幾對傳感器的距離差,通過幾何處理就可以得到聲源位置。該程序設計主要分為兩步,第一步首先通過時延估計算法估計出信號在不同傳感器之間的TDOA(到達時間差)。第二步,利用TDOA(到達時間差)結合已知的節點位置進行定位估計。總的來說,TDOA 算法能夠較為準確的檢測到音源傳給各個麥克風的時間差,并計算出音源的位置,彌補了相位幅度檢測算法的不足,使得聲源定位的精準度得到極大的提升。
該部分程序采用C 語言編寫,整體程序主要由接收串口信息和電壓差值、數據處理和輸出控制顯示三部分組成。利用Arduino IDE 平臺對程序進行編譯、調試,實現各個部分的功能。
具體程序流程如下:上電后,系統進入初始化程序,實時接收三個AD8302 幅度相位檢測模塊傳來的數據值,把數據進行處理后可以得到一個聲源的位置參數,把該參數與串口傳來的參數進行對比矯正后,控制三維云臺把激光筆指示到該位置以及在LED 屏幕上顯示最終的位置參數。
在處理幅度相位檢測模塊得到的數據值時,用到了幅度-相位聯合檢測算法,該算法可以根據麥克風之間的相位差即可大致確定聲源的大致位置。因為此算法只能粗略得到聲源位置,所以還需要結合TDOA 算法來尋找聲源的確切位置。
該系統的整體程序部分設計合理,簡潔有序,為整個系統的穩定性和精確性提供了堅實的保障。該系統的程序設計流程圖如圖11所示。

圖11 程序設計流程圖
本系統能夠對聲源進行實時定位以及顯示聲源位置和方向夾角。在測試過程中,啟動聲源指示控制裝置后,我們將聲源擺放在3 米以外位置并用細繩牽引,以0.2m/s 左右的速度移動聲源,激光筆光點能夠較為準確和即時地跟著聲源的位置移動,跟蹤反應速度較快。由此可見,我們的設計方案是可行的,而且該系統具有較高的準確度和靈敏度,能夠快速指示和顯示出聲源的位置。該作品在實驗測試中示波器所顯示的三個麥克風接收到的聲源波形如圖12(左圖)所示,經過計算液晶屏幕顯示出聲源的位置和角度,如圖12(右圖)所示,單位分別為度和米(即聲源位于激光筆正方向153 度、距離2.64 米處)。該裝置實物圖如圖13所示。

圖12 三麥克風接收聲源波形圖和音源位置顯示圖

圖13 作品實物圖
隨著時代的發展,聲源定位技術在軍事、工業、航空航天、智能制造行業都有了越來越強烈的應用需求。例如測量在地面作戰的炮兵陣地、找到隱藏在某地的狙擊手位置、測量彈藥試驗火炮的著落點和空中炸點等。尤其是隨著現在隱身技術的迅速發展,原本應用在軍事坦克和直升機上的傳統檢測技術已經喪失作用,在這種情況下,被動聲源探測技術將發揮巨大的優勢。伴隨著近些年城市智慧化建設的需要,與工廠自動化升級的推動,聲源定位技術的發展空間遠比想象的廣闊。可見聲源定位技術具有非常現實的研究意義和應用前景。