楊遠文,張子煜,李勁柯,劉會衡(通訊作者)
(湖北文理學院物理與電子工程學院,湖北襄陽,441053)
在日常生活中,對于聲源的利用已經十分普遍,在某些專業領域已有了十分廣泛的應用。例如,“吃雞”游戲通過游玩者對敵方腳步聲音的判斷來識別敵方所位于的方向以及距離;唐朝著名詩人賀知章筆下膾炙人口的詩句:“少小離家老大回,鄉音無改鬢毛衰。”這些都是人們對聲源信號信息的相關利用。如今,利用帶有聲源定位系統的電子設備以及相關的聲音采集裝置,可以增強目標源的聲源質量,削減非目標源以及環境噪聲,可以達到傳統濾波法難以達到的濾波效果,可以實現高保真語音通訊。目前,市面上的成熟的關于聲源定位的解決方案主要依靠于十分復雜的算法和高性能的CPU或是昂貴的DSP實現的,對于精度要求相對較低,成本限制的解決方案寥寥無幾。基于此,設計了一款低成本的聲源定位系統。
系統的整體結構框圖如圖1所示,該系統以基于Cotex-m4內核的STM32F4系列單片機為核心控制單元,連接著輸入,顯示,輸出等各個模塊。利用STM32F4單片機16bit高精度ADC實時采集目標源的原始聲源信號,再利用內部高速DMA通道傳輸 ,開啟FPU后計算目標聲源的方位以及距離,得到的結果實時的顯示在彩色屏幕上讓用戶對當前方位一目了然,同時配合特定的通訊協議,可以實現儀器與PC機或是其他一些單片機或處理器進行有效通訊。
核心處理器電路如圖2所示,它由STM32F4及其外圍電路組成。STM32F4單片機有以下優點:

圖1 系統框圖
(1)主頻高達168MHz,能夠很容易且快速的計算出結果;
(2)擁有大容量存儲空間,能夠存儲豐富的數據量;
(3)擁有豐富的外設資源如IIC總線,DMA,16bit高精度ADC等;
(4)成本低廉,相對于CPU和DSP成本極為低廉;
(5)I/O豐富,支持拓展許多外設模塊。
選擇使用STM32F4系列單片機,在不僅價格上十分低廉,有利于將該模塊應用到對成本敏感的產品上。而且,片上集成的Cotex-m4內核和FPU高精度計算單元對數據的處理及時且有效。所以,本系統使用STM32F4單片機的性價比是非常高的,既能夠滿足數據采集的需求,又可以對信號進行高速處理,對于控制成本是十分有利的。

圖2 核心處理器電路
麥克風模塊如圖3所示,選用的是MAX9814芯片。MAX9814包含低噪聲放大器、輸出放大器、麥克風偏置電壓發生器和自動增益控制(AGC)等內部電路。麥克風放大器的總增益可選擇40dB、50dB或60dB而無壓縮。MAX9814利用壓縮/限幅電路將麥克風輸出限制為設定電壓。

圖3 麥克風模塊
該模塊具有以下特點:
(1)自動增益控制(AGC);
(2)3種增益設置(40dB、50dB、60dB);
(3)低THD:0.04% (典型值可編程動作和釋放時間比;
(4)2.7V至5.5V電源電壓范圍;
(5)低輸入噪聲密度30nV/。
使用MAX9814相比于常規的晶體管放大電路而言,在價格上并沒有優勢,但是其帶來的性能提升是常規晶體管放大電路無法比擬的,對于微弱且不穩定的聲源信號,采用包含低噪聲放大器、輸出放大器、麥克風偏置電壓發生器和自動增益控制的IC是十分有必要的。
顯示模塊電路如圖4所示,本設計使用中景園所生產的0.96寸160×80分辨率TFT彩屏,該顯示屏顏色豐富細膩,分辨率高,顯示字體清晰,價格低廉。

圖4 顯示模塊
系統軟件設計流程如圖5所示。程序執行的流程主要分為三部分,第一部分是單片機片上外設的初始化,第二部分是對采集的信號的數字信號處理,第三部分是結果顯示以及數值的輸出。

圖5 程序流程圖
主要工作流程如下:初始化單片機ADC外設,使其以固定的速率采集聲源信號;開啟初始化單片機DMA外設,使其工作在循環模式;初始化單片機SPI外設,使其工作在主機模式,初始化TFT彩屏模塊,顯示初始化界面;ADC啟動采集信號樣本通過高速DMA搬運至待處理區,處理器接收到DMA完成標志后,啟動聲源信號處理函數對聲源信號進行處理,完成后在屏幕上顯示并將結果發送至上位機。
其中,單片機片上外設初始化代碼部分如下:
ADC_HandleTypeDef hadc1;
ADC_HandleTypeDef hadc2;
DMA_HandleTypeDef hdma_adc1;
SPI_HandleTypeDef hspi1;
extern float voice[522];
void SystemClock_Config(void);
GPIO_InitTypeDef GPIO_InitStruct = {0};
ADC_ChannelConfTypeDef sConfig = {0};
HAL_Init();//hal庫初始化
SystemClock_Config();
//系統時鐘初始化168M
//多通道ADC初始化
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
HAL_ADC_Init(&hadc1);//設置DMA通道
Config.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
__HAL_RCC_DMA2_CLK_ENABLE();
HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0);
通過本聲源定位系統,能夠以較低成本完成聲源方位的確認。用戶使用操作簡單,效果明顯。配合相關協議,用戶可以輕松的集成到相關項目中,具有很好的兼容性和二次開發性。本設計改變了傳統定位系統復雜昂貴的現狀,將會有很大的市場前景。