楊遠(yuǎn)文,張子煜,李勁柯,劉會衡(通訊作者)
(湖北文理學(xué)院物理與電子工程學(xué)院,湖北襄陽,441053)
在日常生活中,對于聲源的利用已經(jīng)十分普遍,在某些專業(yè)領(lǐng)域已有了十分廣泛的應(yīng)用。例如,“吃雞”游戲通過游玩者對敵方腳步聲音的判斷來識別敵方所位于的方向以及距離;唐朝著名詩人賀知章筆下膾炙人口的詩句:“少小離家老大回,鄉(xiāng)音無改鬢毛衰?!边@些都是人們對聲源信號信息的相關(guān)利用。如今,利用帶有聲源定位系統(tǒng)的電子設(shè)備以及相關(guān)的聲音采集裝置,可以增強(qiáng)目標(biāo)源的聲源質(zhì)量,削減非目標(biāo)源以及環(huán)境噪聲,可以達(dá)到傳統(tǒng)濾波法難以達(dá)到的濾波效果,可以實現(xiàn)高保真語音通訊。目前,市面上的成熟的關(guān)于聲源定位的解決方案主要依靠于十分復(fù)雜的算法和高性能的CPU或是昂貴的DSP實現(xiàn)的,對于精度要求相對較低,成本限制的解決方案寥寥無幾。基于此,設(shè)計了一款低成本的聲源定位系統(tǒng)。
系統(tǒng)的整體結(jié)構(gòu)框圖如圖1所示,該系統(tǒng)以基于Cotex-m4內(nèi)核的STM32F4系列單片機(jī)為核心控制單元,連接著輸入,顯示,輸出等各個模塊。利用STM32F4單片機(jī)16bit高精度ADC實時采集目標(biāo)源的原始聲源信號,再利用內(nèi)部高速DMA通道傳輸 ,開啟FPU后計算目標(biāo)聲源的方位以及距離,得到的結(jié)果實時的顯示在彩色屏幕上讓用戶對當(dāng)前方位一目了然,同時配合特定的通訊協(xié)議,可以實現(xiàn)儀器與PC機(jī)或是其他一些單片機(jī)或處理器進(jìn)行有效通訊。
核心處理器電路如圖2所示,它由STM32F4及其外圍電路組成。STM32F4單片機(jī)有以下優(yōu)點:
圖1 系統(tǒng)框圖
(1)主頻高達(dá)168MHz,能夠很容易且快速的計算出結(jié)果;
(2)擁有大容量存儲空間,能夠存儲豐富的數(shù)據(jù)量;
(3)擁有豐富的外設(shè)資源如IIC總線,DMA,16bit高精度ADC等;
(4)成本低廉,相對于CPU和DSP成本極為低廉;
(5)I/O豐富,支持拓展許多外設(shè)模塊。
選擇使用STM32F4系列單片機(jī),在不僅價格上十分低廉,有利于將該模塊應(yīng)用到對成本敏感的產(chǎn)品上。而且,片上集成的Cotex-m4內(nèi)核和FPU高精度計算單元對數(shù)據(jù)的處理及時且有效。所以,本系統(tǒng)使用STM32F4單片機(jī)的性價比是非常高的,既能夠滿足數(shù)據(jù)采集的需求,又可以對信號進(jìn)行高速處理,對于控制成本是十分有利的。
圖2 核心處理器電路
麥克風(fēng)模塊如圖3所示,選用的是MAX9814芯片。MAX9814包含低噪聲放大器、輸出放大器、麥克風(fēng)偏置電壓發(fā)生器和自動增益控制(AGC)等內(nèi)部電路。麥克風(fēng)放大器的總增益可選擇40dB、50dB或60dB而無壓縮。MAX9814利用壓縮/限幅電路將麥克風(fēng)輸出限制為設(shè)定電壓。
圖3 麥克風(fēng)模塊
該模塊具有以下特點:
(1)自動增益控制(AGC);
(2)3種增益設(shè)置(40dB、50dB、60dB);
(3)低THD:0.04% (典型值可編程動作和釋放時間比;
(4)2.7V至5.5V電源電壓范圍;
(5)低輸入噪聲密度30nV/。
使用MAX9814相比于常規(guī)的晶體管放大電路而言,在價格上并沒有優(yōu)勢,但是其帶來的性能提升是常規(guī)晶體管放大電路無法比擬的,對于微弱且不穩(wěn)定的聲源信號,采用包含低噪聲放大器、輸出放大器、麥克風(fēng)偏置電壓發(fā)生器和自動增益控制的IC是十分有必要的。
顯示模塊電路如圖4所示,本設(shè)計使用中景園所生產(chǎn)的0.96寸160×80分辨率TFT彩屏,該顯示屏顏色豐富細(xì)膩,分辨率高,顯示字體清晰,價格低廉。
圖4 顯示模塊
系統(tǒng)軟件設(shè)計流程如圖5所示。程序執(zhí)行的流程主要分為三部分,第一部分是單片機(jī)片上外設(shè)的初始化,第二部分是對采集的信號的數(shù)字信號處理,第三部分是結(jié)果顯示以及數(shù)值的輸出。
圖5 程序流程圖
主要工作流程如下:初始化單片機(jī)ADC外設(shè),使其以固定的速率采集聲源信號;開啟初始化單片機(jī)DMA外設(shè),使其工作在循環(huán)模式;初始化單片機(jī)SPI外設(shè),使其工作在主機(jī)模式,初始化TFT彩屏模塊,顯示初始化界面;ADC啟動采集信號樣本通過高速DMA搬運至待處理區(qū),處理器接收到DMA完成標(biāo)志后,啟動聲源信號處理函數(shù)對聲源信號進(jìn)行處理,完成后在屏幕上顯示并將結(jié)果發(fā)送至上位機(jī)。
其中,單片機(jī)片上外設(shè)初始化代碼部分如下:
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();
//系統(tǒng)時鐘初始化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);//設(shè)置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);
通過本聲源定位系統(tǒng),能夠以較低成本完成聲源方位的確認(rèn)。用戶使用操作簡單,效果明顯。配合相關(guān)協(xié)議,用戶可以輕松的集成到相關(guān)項目中,具有很好的兼容性和二次開發(fā)性。本設(shè)計改變了傳統(tǒng)定位系統(tǒng)復(fù)雜昂貴的現(xiàn)狀,將會有很大的市場前景。