1. 概述
利用麥克風(fēng)陣列進(jìn)行聲源定位在智能降噪、語音增強(qiáng)、語音識(shí)別等領(lǐng)域有廣泛應(yīng)用和研究前景。本文介紹基于AliOS Things + STM32F413H
Discovery開發(fā)板實(shí)現(xiàn)聲源定位算法集成和功能演示。
* 聲源定位算法
本案例集成了STMicroelectronics的Acoustic_SL聲源定位算法。Acoustic_SL是STMicroelectronics開發(fā)的聲源定位算法,支持XCORR、GCC-PHAT、BMPH三種不同算法類型。本案例使用GCC-PHAT算法類型,算法基于到達(dá)時(shí)間差(TDOA)原理實(shí)現(xiàn),通過測量聲音信號(hào)達(dá)到不同麥克風(fēng)的時(shí)間差計(jì)算聲源方向。GCC-PHAT算法作為應(yīng)用最為廣泛的聲位算法,數(shù)據(jù)計(jì)算量和資源消耗較小,并且具有一定的抗噪和抗混響能力。
2. 環(huán)境搭建
開發(fā)板:STM32F413H Discovery(附帶麥克風(fēng)陣列板)
手勢傳感器:Seeed Grove PAJ7620
溫濕度傳感器:HTS221
LED數(shù)碼管:Seeed Grove LED Bar
硬件說明:
使用STM32F413H作為主控芯片,提供音頻輸入接口、I2C接口、GPIO控制接口、顯示控制接口等。
STM32F413H內(nèi)置的DFSDM模塊可以支持最多同時(shí)5路PDM數(shù)字麥克數(shù)據(jù)錄入,并經(jīng)過硬件濾波將PDM數(shù)據(jù)轉(zhuǎn)換成PCM數(shù)據(jù),降低了音頻軟件的復(fù)雜度和資源消耗。
硬件連接:
3. 軟件編譯
軟件:AliOS Things
<https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Falibaba%2FAliOS-Things>
下載AliOS Things后,切換到developer分支。
執(zhí)行如下命令編譯Application:
aos make sensordemo@stm32f413h-discovery
編譯成功后,使用下面命令燒錄鏡像:
aos upload sensordemo@stm32f413h-discovery
4. 軟件介紹
* AliOS Things
AliOS Things是面向IOT領(lǐng)域的輕量級物聯(lián)網(wǎng)嵌入式操作系統(tǒng)。AliOS
Things啟動(dòng)過程中,依次完成內(nèi)核初始化、硬件資源初始化、功能組件初始化、外設(shè)驅(qū)動(dòng)初始化。系統(tǒng)就緒后,通過用戶定義的application_start()函數(shù)進(jìn)入應(yīng)用程序。
* 創(chuàng)建聲位和音量顯示界面
在application_start()函數(shù)中調(diào)用display_init()創(chuàng)建LCD刷新任務(wù)、顯存刷新任務(wù)、定義顯示界面。
聲位顯示界面:
切換到該界面時(shí),聲位識(shí)別算法開始運(yùn)行,屏幕上指示當(dāng)前聲音方位。測試時(shí)建議距離mic陣列水平距離30cm,高度和mic陣列盡量接近,可以獲得最佳效果。
音量顯示界面:
切換到該界面時(shí),計(jì)算mic信號(hào)的大小并轉(zhuǎn)換成音量在屏上顯示音量指示條,即提供聲音強(qiáng)度檢測功能。
* 運(yùn)行聲位算法
<1> 在application_start()函數(shù)中創(chuàng)建聲源定位task,在該task中繼續(xù)調(diào)用acoustic_sl_start()執(zhí)行聲源定位功能。
<2>
在acoustic_sl_start()函數(shù)中調(diào)用DFSDM_Init()和HAL_DFSDM_FilterRegularStart_DMA()初始化并啟動(dòng)DFSDM錄音程序。打開4路DFSDM濾波通道,獲取4個(gè)麥克風(fēng)的PDM數(shù)據(jù),經(jīng)過內(nèi)部處理轉(zhuǎn)換成PCM后通過DMA傳輸?shù)骄彺嬷小?br>
<3> 調(diào)用acoustic_sl_init()庫函數(shù)初始化Acoustic_SL算法。這一步需要設(shè)置算法參數(shù),例如配置算法類型、channel
number、麥克風(fēng)陣列間距以及識(shí)別角度最小單位、聲音檢測門限。
<4> DFSDM錄音程序每次分別從4個(gè)mic錄入512個(gè)采樣點(diǎn)的PDM數(shù)據(jù)數(shù)據(jù),經(jīng)過內(nèi)部處理轉(zhuǎn)換成PCM后通過DMA傳輸?shù)骄彺嬷小?br>
<5> 緩存數(shù)據(jù)到達(dá)后,對PCM數(shù)據(jù)進(jìn)行簡單的High
Pass濾波算法處理,然后調(diào)用AcousticSL_Data_Input()以每次16samples的大小送入算法后,觸發(fā)外部中斷,在中斷函數(shù)中再調(diào)用AcousticSL_Process()進(jìn)行算法處理和聲位計(jì)算,得到代表聲音方位的角度信息。
<6> 根據(jù)角度的范圍可以確定麥克的位置,然后在顯示任務(wù)fb_refresh_task中根據(jù)麥克位置更新顯示界面。
麥克陣列采用2x2矩陣形式,通過這種布局方式可以實(shí)現(xiàn)360度聲音方位的識(shí)別。
另外,AcousticSL算法提供聲音檢測門限和識(shí)別角度最小單位兩個(gè)調(diào)試參數(shù)??梢愿鶕?jù)需要修改參數(shù),適應(yīng)不同的環(huán)境條件和應(yīng)用需求。
* 音量計(jì)算
通過手勢切換到該界面后,首先對DFSDM輸出的512個(gè)采樣點(diǎn)的pcm數(shù)據(jù)先計(jì)算均值,再進(jìn)行對數(shù)計(jì)算,得到對應(yīng)pcm數(shù)據(jù)的音量信息,同時(shí)根據(jù)音量信息在顯示任務(wù)fb_refresh_task刷新界面音量進(jìn)度條。
5. 應(yīng)用演示
視頻觀看:AliOS-Things聲源定位應(yīng)用演示
<http://v.youku.com/v_show/id_XMzg0MDEzMzAwNA==.html?spm=a2h3j.8428770.3416059.1>
6. 更多
參考AliOS Things手勢識(shí)別應(yīng)用演示
<https://yq.aliyun.com/articles/645862?spm=a2c4e.11155435.0.0.82203312HNPa6C>
熱門工具 換一換