《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Android的手機(jī)分貝儀設(shè)計(jì)與實(shí)現(xiàn)
基于Android的手機(jī)分貝儀設(shè)計(jì)與實(shí)現(xiàn)
2016年微型機(jī)與應(yīng)用第16期
李金林,代品宣,李震
江蘇科技大學(xué) 電子信息學(xué)院,江蘇 鎮(zhèn)江 212003
摘要: 為了提高室內(nèi)外環(huán)境中噪聲監(jiān)測的便捷性,針對Android平臺,設(shè)計(jì)手機(jī)分貝儀軟件。研究Android系統(tǒng)音頻架構(gòu)和錄音原理,實(shí)時(shí)處理麥克風(fēng)采集到的PCM編碼的音頻流,使用聲壓級公式計(jì)算分貝值大小。按照軟件開發(fā)流程,對手機(jī)分貝儀進(jìn)行需求分析、界面設(shè)計(jì)、模塊設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì),最終編碼實(shí)現(xiàn)。詳細(xì)介紹了Android平臺上音頻采集、儀表盤、噪聲值曲線的實(shí)現(xiàn)方法。測試結(jié)果表明,手機(jī)分貝儀軟件基本達(dá)到普通聲級計(jì)精度要求,有效降低了噪聲監(jiān)測工作的成本。
Abstract:
Key words :

  李金林,代品宣,李震
 ?。ńK科技大學(xué) 電子信息學(xué)院,江蘇 鎮(zhèn)江 212003)

       摘要:為了提高室內(nèi)外環(huán)境中噪聲監(jiān)測的便捷性,針對Android平臺,設(shè)計(jì)手機(jī)分貝儀軟件。研究Android系統(tǒng)音頻架構(gòu)和錄音原理,實(shí)時(shí)處理麥克風(fēng)采集到的PCM編碼的音頻流,使用聲壓級公式計(jì)算分貝值大小。按照軟件開發(fā)流程,對手機(jī)分貝儀進(jìn)行需求分析、界面設(shè)計(jì)、模塊設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì),最終編碼實(shí)現(xiàn)。詳細(xì)介紹了Android平臺上音頻采集、儀表盤、噪聲值曲線的實(shí)現(xiàn)方法。測試結(jié)果表明,手機(jī)分貝儀軟件基本達(dá)到普通聲級計(jì)精度要求,有效降低了噪聲監(jiān)測工作的成本。
  關(guān)鍵詞:Android;音頻系統(tǒng);分貝儀;聲壓級  

0引言
  隨著現(xiàn)代工業(yè)、建筑業(yè)和交通運(yùn)輸業(yè)的迅速發(fā)展,噪聲污染日益嚴(yán)重,它影響和破壞了人們的正常生活和工作,危害人體健康,已成為當(dāng)今社會四大公害之一。聲級計(jì)是聲學(xué)測量中常用的基本儀器,可廣泛用于環(huán)境噪聲、機(jī)器噪聲、車輛噪聲以及其他各種噪聲的測量[1]。隨著現(xiàn)代數(shù)字信號處理和芯片技術(shù)的進(jìn)步,電子音頻技術(shù)已經(jīng)廣泛應(yīng)用到移動終端中,把手機(jī)作為聲級計(jì),是計(jì)算機(jī)技術(shù)與聲學(xué)領(lǐng)域的有益結(jié)合。
  Android是Google公司推出的一款專門為移動平臺定制的、到目前為止最熱門的嵌入式手機(jī)操作系統(tǒng) [2]。2015年上半年中國智能手機(jī)市場分析報(bào)告中指出,Android機(jī)型關(guān)注量高達(dá)71.9%。為了提高室內(nèi)外環(huán)境中噪聲監(jiān)測的便捷性,在Android上進(jìn)行音頻信號處理相關(guān)的研究與開發(fā)成為一種必要。本文以Android移動終端為平臺,設(shè)計(jì)手機(jī)分貝儀軟件。
1Android音頻系統(tǒng)
  Android設(shè)備的音頻系統(tǒng)[35]由ALSA框架實(shí)現(xiàn),該框架在Linux內(nèi)核中為聲卡提供了OSS驅(qū)動組件,輸入/輸出組件負(fù)責(zé)播放PCM聲音輸出和從外部獲取的PCM聲音,用Java層管理聲音設(shè)備和對應(yīng)的屬性設(shè)置。ALSA自上而下由Audio應(yīng)用程序、Audio Java框架層、Audio本地框架層、Audio Flinger、Audio硬件抽象層、ALSALIB和底層Audio驅(qū)動組成。
  1.1錄音功能實(shí)現(xiàn)
  Android錄音工作亦通過分層的方法實(shí)現(xiàn),如圖1所示,每層向上提供對應(yīng)的調(diào)用接口,并調(diào)用下層提供的接口,保證了Android音頻系統(tǒng)的健壯性和穩(wěn)定性。
 

圖像 001.png

  Android使用錄音功能時(shí),先設(shè)置輸入源、采樣格式等參數(shù),然后建立音軌,獲得服務(wù)代理端。
  在Android音頻相關(guān)類中,Audio Record和Audio Track分別完成音頻數(shù)據(jù)的采集和輸出。
  Audio Track提供兩種數(shù)據(jù)加載模式,即流模式和靜態(tài)模式,及多種音頻流類型,如Alarm等,通過共享內(nèi)存方式完成與Audio Flinger之間的數(shù)據(jù)傳遞。
  而Audio Flinger是Audio系統(tǒng)的核心,它處理各種數(shù)據(jù)并最終寫入Audio的硬件抽象層。Audio Flinger包含Duplicating Thread、Record Thread、Direct Output Thread三個(gè)內(nèi)部類和一些外部類(如Mixer Thread、Client等)。Audio Flinger駐留于Media Server。
  Audio Policy Service是控制Audio系統(tǒng)的,包括HAL對象Audio Policy Interface,它與硬件相關(guān),提供一切設(shè)備切換管理和音量控制接口。
  Android音頻錄入系統(tǒng)動建立過程如圖2所示。
 

圖像 002.png

  1.2音頻格式
  音頻流的數(shù)據(jù)經(jīng)過編碼后對應(yīng)的音頻文件分別為AMR格式和PCM格式,前者數(shù)據(jù)是被壓縮的,后者可以直接讀取音頻數(shù)據(jù)。WAV文件(*.wav)中存放的就是PCM數(shù)據(jù)。文件格式分為3個(gè)部分:Riff塊描述、FMT子塊、Data子塊。MP3文件(*.mp3)由3部分組成:TAG_V2(ID3V2),F(xiàn)rame,TAG_VI(ID3V1)。這3部分順序存放在文件,但并不是所有的MP3文件都同時(shí)具有這3部分。
2分貝儀原理
  噪聲測量技術(shù)中直接測量噪聲的聲強(qiáng)是比較困難的,而聲壓則是比較容易測量的物理量[1]。
  人耳是對聲壓產(chǎn)生反應(yīng)的,同時(shí)聲波的傳輸規(guī)律也主要是由聲壓的變化規(guī)律來描述。
  一般的聲壓測量系統(tǒng)由傳聲器、聲級計(jì)、示波器、數(shù)據(jù)記錄儀、信號分析儀組成。傳聲器將聲壓信號轉(zhuǎn)換為電壓信號;聲級計(jì)將電壓信號放大、加權(quán)、倍頻程濾波、均方根檢波和對數(shù)轉(zhuǎn)換,最后給出噪聲的聲壓級、計(jì)權(quán)聲壓級或倍頻聲壓級;示波分儀器則將聲壓測量結(jié)果可視化,并有效存儲和管理[6]。
  聲壓級的定義為,均方根聲壓與基準(zhǔn)聲壓之比的以10為底的對數(shù)乘以20,以分貝(dB)表示[7]。對于空氣中的聲音傳播,基準(zhǔn)聲壓量通常定為20 μPa,即0 dB。
  時(shí)間計(jì)權(quán)的定義是規(guī)定時(shí)間常數(shù)的時(shí)間指數(shù)函數(shù),該函數(shù)是針對瞬時(shí)聲壓的平方而進(jìn)行計(jì)算[8]。對于任何瞬時(shí)時(shí)間上的A計(jì)權(quán)和時(shí)間計(jì)權(quán)聲級用LAτ(t)表示:
     QQ圖片20160921182722.png

  式(1)表明,聲學(xué)測量的聲壓級是交變聲壓的有效值,有效值指的是一段時(shí)間內(nèi)信號的均方值根。
  對于起伏的或者是不連續(xù)的噪聲,很難確定A聲級的大小,為此可用能量平均的方法來評價(jià)噪聲對人的影響。以一個(gè)A聲級表示間歇變化出現(xiàn)的A聲級,即:
  QQ圖片20160921182729.png

  在公式(2)中,LA是變化的A聲級瞬時(shí)值,單位為dB;T是某段時(shí)間內(nèi)的總量。
  在電子線路中可以采用積分電路對信號進(jìn)行一段時(shí)間內(nèi)的平均。但是實(shí)際測量噪聲時(shí),是通過不連續(xù)的采樣進(jìn)行測量[8]。在計(jì)算機(jī)系統(tǒng)中,采樣時(shí)間間隔相等,則:
   QQ圖片20160921182733.png

  在公式(3)中:N是測量的聲級總個(gè)數(shù)。本文設(shè)計(jì)的分貝儀軟件通過等效聲壓級公式計(jì)算出分貝值。將聲音緩存中的數(shù)據(jù)取出,用平方和除以總數(shù)據(jù)長度,得到分貝值大小。
3手機(jī)分貝儀設(shè)計(jì)
  3.1界面設(shè)計(jì)

  分貝儀的功能包括:分貝值、儀表盤、環(huán)境判別、噪聲曲線。頁面分為3部分,上部為儀表盤,中部為文字,下部為曲線圖。中部的左半部分為實(shí)時(shí)數(shù)值顯示,中部的右半部分為當(dāng)前環(huán)境的判別顯示結(jié)果。
  3.2音頻采集
  在Eclipse中, DB Activity.java對應(yīng)db_screen.xml視圖。在清單文件中加入RECORD _AUDIO 、RESTART_PACKAGE等權(quán)限,同時(shí)聲明最低SDK版本、硬件支持和音頻轉(zhuǎn)換所需的函數(shù)庫。
  DB Activity初始化后,調(diào)用getNoiseLevel()函數(shù)。函數(shù)中不斷循環(huán)地啟動mAudioRecord線程,使用getMinBufferSize方法創(chuàng)建音頻數(shù)據(jù)緩沖區(qū),該對象的3個(gè)參數(shù)分別為采樣頻率、聲道設(shè)置和編碼制式。根據(jù)公式(3),將buffer中內(nèi)存取出,進(jìn)行平方和運(yùn)算,把實(shí)時(shí)分貝值賦值給公共變量DB Value。延時(shí)100 ms后,結(jié)束mAudioRecord線程。
  3.3儀表盤設(shè)計(jì)
  手機(jī)分貝儀的儀表盤使用needle圖片作為指針、panel圖片作為背景表盤,它們在db_screen.xml視圖上中心位置重合在一起。在DB Activity初始化后,同時(shí)啟動一個(gè)定時(shí)器,設(shè)置進(jìn)度表為100 ms,在這個(gè)子線程中發(fā)送數(shù)據(jù)消息給handler,就在handle中配合主線程更新分貝儀的UI。本文使用的儀表盤的最大角度是172°,而儀表盤實(shí)際刻度是從0到100均勻的,因此把公共變量DB Value乘以1.72賦值角度變量Degree,然后使用旋轉(zhuǎn)RotateAnimation方法更新needleview視圖,最終實(shí)現(xiàn)實(shí)時(shí)分貝值在儀表盤上的精確顯示。
  3.4環(huán)境判定
  根據(jù)實(shí)際測得的分貝值,對一般噪聲的危險(xiǎn)接觸級別進(jìn)行劃分,進(jìn)而判定用戶所處噪音環(huán)境,比如0~20 dB是非常安靜,20~40 dB是低語等,在儀表盤所依賴的定時(shí)器中,用if…else進(jìn)行判定,并使用SpannableString Builder方法高亮顯字文本字段。實(shí)時(shí)分貝值也是在這一線程更新到分貝儀UI中的TextView上。
  3.5噪聲值曲線
  在儀表盤功能實(shí)現(xiàn)所依賴的定時(shí)器中,實(shí)現(xiàn)噪聲值曲線的繪制功能。在DB Activity中定義DBValueChart數(shù)組,使用移位方法進(jìn)行數(shù)據(jù)更新。把該數(shù)組中的內(nèi)容賦給PathViewChart,調(diào)整好線、點(diǎn)、文字、連接線的類型以及間隔、比例尺后,在Canvas上繪制橫軸、縱軸和曲線實(shí)現(xiàn)曲線圖。噪聲值曲線的定時(shí)器每隔100 ms自動更新一次,從而實(shí)現(xiàn)曲線的快速動態(tài)變化。
  3.6數(shù)據(jù)庫設(shè)計(jì)
 
 為便于離線分析,在手機(jī)分貝儀中建立采集結(jié)果SQLite數(shù)據(jù)庫。以當(dāng)前天數(shù)為表名, 將實(shí)時(shí)采集分貝數(shù)值存入表中。因?yàn)閿?shù)據(jù)采集量大,全部存入會導(dǎo)致內(nèi)存溢出,所以設(shè)計(jì)按鍵,長按時(shí),音頻才會保存。
4APK生成與測試
  將工程文件導(dǎo)出,生成APK安裝包,安裝到HTC M7手機(jī)上,將手機(jī)分貝儀和TES52A噪音計(jì)進(jìn)行對比測試。以較大的聲音說話,檢測到聲壓大小為61 dB,指針指到儀表盤61刻度的位置上,環(huán)境判別部分60~70 dB這一行文本高亮顯示,同時(shí),下方也留下分貝值軌跡曲線。經(jīng)過吹氣、咳嗽、鼓掌、敲玻璃、說話等操作,得到的噪音測量對比測試結(jié)果如表1所示。

圖像 005.png

5校園環(huán)境噪聲監(jiān)測系統(tǒng)
  近年來,交通行駛、校園活動等所引起的環(huán)境噪聲污染嚴(yán)重影響了高校教職工及學(xué)生們的學(xué)習(xí)、工作和生活。
  噪聲污染具有即時(shí)性和隨機(jī)性,傳統(tǒng)的人工監(jiān)測方式易受到非技術(shù)因素的干擾,實(shí)時(shí)性和準(zhǔn)確性較差。而傳統(tǒng)的有線方式則存在布網(wǎng)困難、成本高、易被破壞等問題[9]。針對上述問題,將該手機(jī)分貝儀用于校園環(huán)境噪聲監(jiān)控系統(tǒng),如圖3所示。
  

圖像 003.png

  校園環(huán)境噪聲檢測系統(tǒng)能夠?qū)崿F(xiàn)對各個(gè)位置站點(diǎn)進(jìn)行7×24小時(shí)的實(shí)時(shí)監(jiān)測,手機(jī)監(jiān)測終端通過3G/4G網(wǎng)絡(luò)接入到服務(wù)器機(jī)房,客戶端采用Web方式實(shí)時(shí)查詢、統(tǒng)計(jì)分析,以及對監(jiān)測終端進(jìn)行管理[10]。當(dāng)出現(xiàn)長時(shí)間的噪聲超標(biāo)或者設(shè)備故障時(shí),系統(tǒng)能夠自動進(jìn)行告警操作,如發(fā)送短信至噪聲排放單位責(zé)任人的另一部手機(jī)上,從而達(dá)到監(jiān)測區(qū)域噪聲防護(hù)的目的。
  依據(jù)需求,對Android分貝儀作如下拓展:
 ?。?)結(jié)合Baidu Maps,使用Location Manager函數(shù)獲取當(dāng)前測量區(qū)域的經(jīng)緯度位置[11],然后添加MAC地址和實(shí)時(shí)分貝值數(shù)據(jù),將所有的數(shù)據(jù)類型轉(zhuǎn)換為XSD格式,以待上報(bào)至服務(wù)器。
 ?。?)通過Web Service實(shí)現(xiàn)監(jiān)測數(shù)據(jù)的上傳功能。通過SOAP協(xié)議將監(jiān)測數(shù)據(jù)封裝后,發(fā)送到網(wǎng)絡(luò)服務(wù)器、應(yīng)用服務(wù)器,服務(wù)器根據(jù)上層的用戶設(shè)置返回消息到Android手機(jī)監(jiān)測終端。終端根據(jù)下發(fā)的指令提示責(zé)任人采取降噪措施。
  使用JavaEE + JBoss + MySQL構(gòu)建校園環(huán)境噪聲監(jiān)測系統(tǒng)的服務(wù)器端,經(jīng)過部署,得到某時(shí)刻東校區(qū)的部分地點(diǎn)的環(huán)境噪聲分布如圖4所示。此時(shí),正門口的夢溪路的噪聲分貝值為79 dB,電信學(xué)院大廳為61 dB,自習(xí)教室為47 db,籃球場上噪音分貝值為50 dB。
  

圖像 004.png

  中華人民共和國城市區(qū)域環(huán)境噪聲標(biāo)準(zhǔn)規(guī)定[12],居住、文教機(jī)關(guān)為主的區(qū)域,白天噪音不得超過55 dB,夜間不超過45 dB。根據(jù)上述測量結(jié)果,應(yīng)在夢溪路上采取禁止鳴笛、安裝隔音板等措施,以降低教學(xué)環(huán)境中的交通噪音污染。
6結(jié)論
  本文基于Android平臺設(shè)計(jì)與實(shí)現(xiàn)手機(jī)分貝儀。首先介紹Android音頻系統(tǒng)的分層結(jié)構(gòu)和錄音原理,接著分析APP實(shí)現(xiàn)的理論基礎(chǔ)及聲壓級計(jì)算公式,然后進(jìn)行需求分析、模塊設(shè)計(jì)、界面設(shè)計(jì)、數(shù)據(jù)存儲設(shè)計(jì),最后詳細(xì)敘述了分貝值儀表盤和分貝值曲線的實(shí)現(xiàn)方法并生成APK安裝包。
  本文將Android分貝儀與TES52A噪音計(jì)對比使用,達(dá)到了普通聲級計(jì)的精度要求。Android分貝儀的便捷性、廣泛性、普適性遠(yuǎn)遠(yuǎn)高于普通聲級計(jì)。
  本文對Android分貝儀的位置獲取、網(wǎng)絡(luò)傳輸、閾值告警的功能進(jìn)行擴(kuò)展,應(yīng)用到校園環(huán)境噪聲監(jiān)控系統(tǒng)。試驗(yàn)結(jié)果表明,本方案能有效減低環(huán)境噪聲監(jiān)測工作的成本。
  參考文獻(xiàn)
  [1] 張紹棟. 聲級計(jì)的原理和應(yīng)用[M]. 北京:計(jì)量出版社,1986.
  [2] EVERY S V. Android多媒體開發(fā)高級編程[M]. 巢文涵,譯.北京:清華大學(xué)出版社,2012.
 ?。?] Song Maoqiang, Xiong Wenkuo, Fu Xiangling. Research on architecture of multimedia and its design based on android[C].Internet Technology and Applications, IEEE, 2010: 14.
  [4] 林東海.基于ALSA的Android音頻系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].廈門:廈門大學(xué),2013.
 ?。?] 李寧. Android深度探索[M].北京:人民郵電出版社,2015.
  [6] 楊昌棋, 秦樹人. 虛擬式噪聲分析儀的數(shù)字計(jì)權(quán)與開發(fā)[J]. 重慶大學(xué)學(xué)報(bào)(自然科學(xué)版), 2001, 24(5): 5961.
 ?。?] DUMOULIN R, VOIX J. On the use of smartphones for occupational noise monitoring: instrumentation[J]. Canadian Acoustics, 2012, 40(3): 5253.
  [8] MENNITT D J, FRISTRUP K M. Obtaining calibrated sound pressure levels from consumer digital audio recorders[J]. Applied Acoustics, 2012, 73(11): 11381145.
 ?。?] 王一.室內(nèi)真實(shí)噪聲環(huán)境下聲音事件在線檢測與識別[D].北京:北京大學(xué),2013.
 ?。?0] 趙大磊, 張正平, 賀松,等. 基于Android的移動互聯(lián)網(wǎng)健康監(jiān)測系統(tǒng)的研究[J]. 微型機(jī)與應(yīng)用, 2014, 33(8):1012.
  [11] 代品宣,李震,盧超,等. 基于Android的校園導(dǎo)游和定位系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 江蘇科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2015,29(4):378381.
 ?。?2] 中華人民共和國城市區(qū)域環(huán)境噪聲標(biāo)準(zhǔn)[J]. 環(huán)境保護(hù),1996(12):7.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。