徐紹峰 陳靜軒 劉都鑫 蔡希昌 鮑志平 陳鈺婷 劉通 于東池 喬子凌
摘? ?要: 為解決多路音頻信號的采集傳輸及后續(xù)信息處理問題,研究一種高性能前端與嵌入式AI后端相結(jié)合的系統(tǒng)設(shè)計。硬件設(shè)計方面,前端采用樹莓派4B及6麥克的環(huán)形麥克風(fēng)陣列實現(xiàn)采集及預(yù)處理,并通過Wi-Fi進(jìn)行語音傳輸;后端處理采用Jetson Nano模塊,作為實現(xiàn)語音處理的嵌入式AI平臺。軟件設(shè)計方面,采用C/S架構(gòu),進(jìn)行Linux下的C++編程,其中樹莓派作為服務(wù)器,實現(xiàn)麥克風(fēng)信號的采集、編碼和網(wǎng)絡(luò)傳輸;Jetson Nano模塊作為客戶機(jī),實現(xiàn)網(wǎng)絡(luò)通信及實時語音處理功能。測試結(jié)果表明,多聲道音頻處理系統(tǒng)運(yùn)行穩(wěn)定,架構(gòu)合理,具有良好的工程應(yīng)用潛力。
關(guān)鍵詞: 嵌入式AI平臺;音頻傳輸;樹莓派;Jetson Nano模塊;多聲道音頻處理系統(tǒng)
中圖分類號:TN91? ? 文獻(xiàn)標(biāo)識碼:A? ? 文章編號:2095-8412 (2020) 06-040-05
工業(yè)技術(shù)創(chuàng)新 URL: http://gyjs.cbpt.cnki.net? ? DOI: 10.14103/j.issn.2095-8412.2020.06.007
引言
在當(dāng)前的音頻測量領(lǐng)域,麥克風(fēng)陣列技術(shù)逐漸成為主流,其多聲道輸出的特性在語音識別、聲源定位和聲音監(jiān)測等應(yīng)用場景中被廣泛使用[1-3]。但是,由此也會帶來多路音頻信號傳輸?shù)膯栴}。原始傳感器(麥克風(fēng))的輸出信號一般為模擬信號或者TDM數(shù)字信號,難以直接進(jìn)行長線傳輸[4]。常見的I2S及PCM等數(shù)字總線屬于板內(nèi)信號傳輸,不能滿足長線傳輸?shù)囊骩5-6]。對于嵌入式設(shè)備來說,陣列大小及麥克風(fēng)個數(shù)也會受到一定的限制[7]。為解決上述問題,途徑之一是利用具備較高性能的微處理器進(jìn)行前端信號采集、數(shù)據(jù)傳輸及預(yù)處理。
基于以上應(yīng)用需求,本文從硬件上對嵌入式AI、多路音頻采集及傳輸系統(tǒng)進(jìn)行了研究,提出了一種基于樹莓派4B及Jetson Nano的多路音頻采集傳輸系統(tǒng)。軟件方面,應(yīng)用樹莓派4B和Jetson Nano模塊及TCP/IP協(xié)議,實現(xiàn)麥克風(fēng)陣列的多聲道音頻數(shù)據(jù)實時傳輸、實時采集以及實時播放等功能。
1? 需求分析
為了實現(xiàn)多路音頻數(shù)據(jù)實時傳輸、實時采集以及實時播放的功能,需要系統(tǒng)具有較高的性能和進(jìn)行網(wǎng)絡(luò)通信的能力。同時作為嵌入式音頻采集和傳輸系統(tǒng),整個系統(tǒng)應(yīng)具備小型化、低功耗和易部署的特點(diǎn)?;谝陨弦?,選擇了樹莓派和Jetson Nano作為主要模塊。
樹莓派作為嵌入式前端設(shè)備,采用ARM系列的處理器,具備體積小、功耗低、性能強(qiáng)大等特點(diǎn)。同時,集成了無線網(wǎng)卡和40 Pin的擴(kuò)展IO接口,方便進(jìn)行語音信號的無線傳輸和多聲道麥克風(fēng)的連接。因此選擇樹莓派作為音頻信號的前端采集及傳輸設(shè)備。
后端處理部分則需要強(qiáng)大的數(shù)據(jù)處理能力和AI計算能力,可以運(yùn)行目前主流的Tensorflow、Pytorch和Keras等深度學(xué)習(xí)框架,因此選擇了Jetson Nano開發(fā)套件。該套件由NVIDIA在2019年NVIDIA GPU技術(shù)大會(GTC)發(fā)布,具有強(qiáng)大的AI處理性能,能夠滿足后續(xù)對多路音頻的實時處理。
為保證音頻信號采集的清晰和完整性,音頻采集的硬件設(shè)備應(yīng)具有多聲道、兼容性好、靈敏度高等特點(diǎn)。因此,選擇了矽遞科技的ReSpeaker 6-Mic圓形麥克風(fēng)陣列,作為音頻采集的硬件設(shè)備。
軟件設(shè)計方面,一方面需要滿足數(shù)據(jù)實時傳輸?shù)囊螅硪环矫嫘枰^高的傳輸帶寬以滿足無壓縮多路音頻信號傳輸?shù)囊?。因此需要滿足高實時性和高帶寬的要求,并盡量滿足拓展需求。
2? 技術(shù)方案
2.1? 系統(tǒng)架構(gòu)
該多路音頻采集傳輸系統(tǒng)架構(gòu)由三個模塊組成,分別為聲音采集模塊、服務(wù)器模塊及客戶端模塊。系統(tǒng)總體框圖如圖1所示。其中,聲音采集模塊采用基于樹莓派的ReSpeaker 6-Mic圓形陣列套件;服務(wù)器模塊為樹莓派4B;客戶端模塊為嵌入式AI平臺Jetson Nano。
ReSpeaker 6-Mic圓形陣列套件是一款適用于AI和語音應(yīng)用的六聲道麥克風(fēng)擴(kuò)展模塊。該圓形陣列套件包含有兩個ADC芯片和一個DAC芯片,用于聲電信號的相互轉(zhuǎn)換;含有八個輸出通道,用于進(jìn)行數(shù)據(jù)傳輸;含有六個全向麥克風(fēng),可全方位地采集聲音信號;該陣列套件與樹莓派的40 Pin接口兼容。
樹莓派4B的核心處理器為博通BCM2711(四核1.5 GHz,Cortex A72架構(gòu)),其使用LPDDR4內(nèi)存,供電方式為5 V/3 A USB-C或GPIO 5 V。外圍方面,支持雙頻Wi-Fi、藍(lán)牙5.0、2個Micro HDMI 2.0接口、千兆網(wǎng)口、MIPI DSI接口、MIPI CSI相機(jī)接口、立體聲耳機(jī)接口、2個USB 3.0、2個USB 2.0、40 Pin GPIO擴(kuò)展接口。樹莓派的主要任務(wù)是將采集到的音頻數(shù)據(jù)通過無線傳輸發(fā)送給Jetson Nano。
Jetson Nano 的CPU為四核Cortex-A57,而GPU是規(guī)模較小的Maxwell架構(gòu)顯卡,擁有128個CUDA單元。Jetson Nano性能強(qiáng)大,可以提供高達(dá)472 GFLOPS的浮點(diǎn)運(yùn)算能力。此外Jetson Nano支持高分辨率傳感器,可以并行處理多個傳感器的數(shù)據(jù),并且可在每個傳感器數(shù)據(jù)流上運(yùn)行多個神經(jīng)網(wǎng)絡(luò)。Jetson Nano主要任務(wù)是接收樹莓派傳輸?shù)囊纛l數(shù)據(jù)并進(jìn)行處理,最后通過聲卡將接受到的聲信號播放出來。
硬件連接方面,首先將ReSpeaker 適配板與 ReSpeaker 6-Mic通過專用數(shù)據(jù)線進(jìn)行連接;然后再將適配板插到樹莓派的40 pin擴(kuò)展IO接口上,并通過SPI總線將麥克風(fēng)陣列采集到的音頻信號傳輸?shù)綐漭缮?再然后通過Wi-Fi將樹莓派與Jetson Nano互聯(lián);最后Jetson Nano通過信號轉(zhuǎn)換,將接收到的音頻信號進(jìn)行輸出。硬件實物圖如圖2所示。
2.2? 軟件方案
樹莓派和Jetson Nano均運(yùn)行在Linux系統(tǒng)之上,具有很強(qiáng)的擴(kuò)展性能??紤]到運(yùn)行效率,采用C++進(jìn)行編程,實現(xiàn)相關(guān)采集、傳輸與處理功能。由于使用Wi-Fi通信,因此選擇了網(wǎng)絡(luò)編程的技術(shù)路線,并將軟件設(shè)計劃分為客戶端程序和服務(wù)器端程序。編程基本思想如下:
(1)服務(wù)端程序在初始化之后,開始嘗試采集音頻。若從麥克風(fēng)陣列中采集到了音頻數(shù)據(jù),則開始嘗試發(fā)送該音頻信號,確認(rèn)發(fā)送成功后,將繼續(xù)實時發(fā)送從麥克風(fēng)陣列采集到的音頻信號;若采集失敗或發(fā)送失敗則會導(dǎo)致程序自動終止。
(2)客戶端程序在初始化之后,會開始不斷檢測數(shù)據(jù)的接收狀態(tài)。若接收成功則將音頻信號寫入文件并保存為PCM格式,若接收失敗則會結(jié)束程序。同時在程序執(zhí)行時,會監(jiān)聽SIGINT用戶中斷,以方便用戶可隨時終止程序。
3? 程序設(shè)計
程序設(shè)計分為服務(wù)端程序和客戶端程序兩部分。服務(wù)端通過libasound2(ALSA庫)進(jìn)行音頻的采集,客戶端使用librosa庫進(jìn)行音頻數(shù)據(jù)的后續(xù)處理??蛻舳撕头?wù)器端程序都在Linux環(huán)境下進(jìn)行編寫,并分別在樹莓派和Jetson Nano上使用ARM專用的GCC編譯器進(jìn)行編譯。音頻文件格式采用PCM流格式,程序流程圖如圖3所示。服務(wù)器和客戶端工作流程相互配合。
3.1? 服務(wù)器端程序
服務(wù)器端程序在樹莓派上進(jìn)行編譯,并將樹莓派設(shè)置為服務(wù)器端。首先注冊回調(diào)函數(shù),以便在收到用戶中斷(SIGINT)后自行完成收尾工作。隨后設(shè)置音頻采集格式為八通道S32_LE格式等初始化聲卡操作,準(zhǔn)備采集音頻。隨后,啟動TCP套接字,并開始監(jiān)聽。采用阻塞式的監(jiān)聽模式。此模式下,服務(wù)器端會持續(xù)等待連接,只有當(dāng)接收到用戶中斷時才會停止。
當(dāng)有客戶端連接后,服務(wù)器端通過ALSA庫提供的軟件接口持續(xù)采集數(shù)據(jù),并將這些數(shù)據(jù)發(fā)給客戶端。服務(wù)端器會直接向客戶端發(fā)送原始的PCM數(shù)據(jù)流,不會發(fā)送任何額外數(shù)據(jù),它也不從客戶端接收任何數(shù)據(jù)。當(dāng)客戶端斷開連接,服務(wù)器端會在數(shù)據(jù)發(fā)送接口返回失敗狀態(tài)時終止連接。服務(wù)端以單線程工作,即只接受一個客戶端的連接請求,連接結(jié)束后服務(wù)端程序立即退出結(jié)束。服務(wù)端不響應(yīng)除了用戶中斷外的任何鍵盤輸入。
3.2? 客戶端程序
客戶端程序在Jetson Nano上進(jìn)行編譯,并將Jetson Nano配置為客戶端??蛻舳藛雍?,同樣先注冊回調(diào)函數(shù)以便完成收尾。隨后,客戶端會在本地工作目錄下創(chuàng)建一個負(fù)責(zé)接收的PCM文件,準(zhǔn)備以二進(jìn)制寫入數(shù)據(jù)。準(zhǔn)備就緒后,客戶端會嘗試連接預(yù)設(shè)的服務(wù)器端IP地址和端口。如果客戶端先于服務(wù)端啟動,會產(chǎn)生拒絕連接錯誤,不會進(jìn)行阻塞并持續(xù)等待連接成功。連接成功后,客戶端會從服務(wù)端接收數(shù)據(jù),并不斷地寫入文件。若一定時間接收不到數(shù)據(jù)(即產(chǎn)生timeout錯誤),客戶端會主動終止。與服務(wù)端類似,客戶端不響應(yīng)除了用戶中斷外的任何鍵盤輸入。
完成錄音并接收到數(shù)據(jù)后,可以使用ffplay命令播放音頻文件。并在后續(xù)調(diào)用Jetson Nano上的librosa庫生成梅爾倒譜圖,以方便進(jìn)行后續(xù)的音頻處理。
4? 實驗驗證
4.1? 實驗步驟
首先將ReSpeaker 6-Mic 圓形麥克風(fēng)陣列的底板與樹莓派的IO口相連接,并在樹莓派中將麥克風(fēng)配置為樹莓派的音頻采集設(shè)備。隨后將樹莓派和Jetson Nano 連接到同一無線路由器中,并固定兩個設(shè)備的IP地址,為音頻傳輸做好準(zhǔn)備。
啟動樹莓派中的服務(wù)器程序,作為服務(wù)器端,等待Jetson Nano與其進(jìn)行連接。
啟動Jetson Nano中的客戶端程序,并輸入服務(wù)器端的IP地址,作為音頻的接收端。啟啟動程序后Jetson Nano將自動與樹莓派連接,并開始自動接收服務(wù)器端的音頻數(shù)據(jù)。接收完畢后將音頻數(shù)據(jù)保存為PCM格式的音頻文件。
4.2? 實驗結(jié)果與分析
實驗內(nèi)容:在客戶端啟動后,實驗人員在麥克風(fēng)附近講話8 s,隨后關(guān)閉服務(wù)器端。通過ffplay命令實時播放在Jetson Nano中實時接收到的音頻信號的聲紋圖,如圖4所示??梢钥吹?,在前8 s有正常的聲音波形,8 s后服務(wù)器關(guān)閉,不在接收數(shù)據(jù)后,聲音波形消失。
ReSpeaker 6-Mic 圓形麥克風(fēng)陣列中六個麥克風(fēng)所形成的六個聲道在8 s內(nèi)產(chǎn)生的聲音波形圖如圖5所示。從中可以看出,所有麥克風(fēng)工作正常。由于實驗人員距麥克風(fēng)較近,六個麥克風(fēng)的波形圖基本近似。
在Jetson Nano 中將保存的PCM 格式文件轉(zhuǎn)為WAV格式,隨后利用在Jetson Nano中的librosa庫生成錄音的梅爾倒譜圖,以方便之后進(jìn)行深度學(xué)習(xí)或人工智能的應(yīng)用。Jetson Nano生成的梅爾倒譜圖如圖6所示。
5? 結(jié)論
本文通過ReSpeaker 6-Mic 圓形麥克風(fēng)陣列、樹莓派4B與Jetson Nano模塊的配合與編程,實現(xiàn)了一種嵌入式多路音頻采集傳輸系統(tǒng)。該系統(tǒng)具有較高的性能,也具備較高的靈活度,可廣泛應(yīng)用于可智能家居、家庭安防報警、家庭環(huán)境中危險信號檢測等音頻及信號處理領(lǐng)域中。
參考文獻(xiàn)
[1] 張曉娜, 常樂冉, 吳煒等. Linux系統(tǒng)下Socket通信的實現(xiàn)[J]. 電聲技術(shù), 2020, 44(1): 87-89.
[2] 張潤午, 趙海舟, 曾凡瑞等. 基于樹莓派的智能語音提醒系統(tǒng)[J]. 物聯(lián)網(wǎng)技術(shù), 2019, 9(10): 79-81, 83.
[3] 張美平, 吳德平, 王燦杰等. 基于樹莓派的智能家居設(shè)計與實現(xiàn)[J]. 計算機(jī)系統(tǒng)應(yīng)用, 2019, 28(8): 109-114.
[4] 蔣達(dá). 基于Socket的網(wǎng)絡(luò)接口編程[J]. 辦公自動化, 2018, 23(23): 29-30, 32.
[5] 劉華, 田占生, 馮宇飛. 基于樹莓派的智能家居語音控制系統(tǒng)[J]. 制造業(yè)自動化, 2018, 40(10): 128-131.
[6] 嚴(yán)謙, 陽泳. 網(wǎng)絡(luò)編程tcp/ip協(xié)議與socket論述[J]. 電子世界, 2016(8): 68, 70.
[7] 陳奎. 語音PCM編碼通信系統(tǒng)的SIMULINK仿真[J]. 福建電腦, 2012, 28(10): 115-117.
作者簡介:
徐紹峰,本科生。主要研究方向:Linux上的C++軟件開發(fā)及嵌入式AI移植等。
蔡希昌,通信作者,高級工程師。研究方向:微弱信號及其智能處理。
E-mail: caixc20_ncut@126.com
(收稿日期:2020-10-09)