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