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

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

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

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

圖像 001.png

  Android使用錄音功能時,先設置輸入源、采樣格式等參數(shù),然后建立音軌,獲得服務代理端。
  在Android音頻相關類中,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三個內(nèi)部類和一些外部類(如Mixer Thread、Client等)。Audio Flinger駐留于Media Server。
  Audio Policy Service是控制Audio系統(tǒng)的,包括HAL對象Audio Policy Interface,它與硬件相關,提供一切設備切換管理和音量控制接口。
  Android音頻錄入系統(tǒng)動建立過程如圖2所示。
 

圖像 002.png

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

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

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

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

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

圖像 005.png

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

圖像 003.png

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

圖像 004.png

  中華人民共和國城市區(qū)域環(huán)境噪聲標準規(guī)定[12],居住、文教機關為主的區(qū)域,白天噪音不得超過55 dB,夜間不超過45 dB。根據(jù)上述測量結果,應在夢溪路上采取禁止鳴笛、安裝隔音板等措施,以降低教學環(huán)境中的交通噪音污染。
6結論
  本文基于Android平臺設計與實現(xiàn)手機分貝儀。首先介紹Android音頻系統(tǒng)的分層結構和錄音原理,接著分析APP實現(xiàn)的理論基礎及聲壓級計算公式,然后進行需求分析、模塊設計、界面設計、數(shù)據(jù)存儲設計,最后詳細敘述了分貝值儀表盤和分貝值曲線的實現(xiàn)方法并生成APK安裝包。
  本文將Android分貝儀與TES52A噪音計對比使用,達到了普通聲級計的精度要求。Android分貝儀的便捷性、廣泛性、普適性遠遠高于普通聲級計。
  本文對Android分貝儀的位置獲取、網(wǎng)絡傳輸、閾值告警的功能進行擴展,應用到校園環(huán)境噪聲監(jiān)控系統(tǒng)。試驗結果表明,本方案能有效減低環(huán)境噪聲監(jiān)測工作的成本。
  參考文獻
 ?。?] 張紹棟. 聲級計的原理和應用[M]. 北京:計量出版社,1986.
 ?。?] EVERY S V. Android多媒體開發(fā)高級編程[M]. 巢文涵,譯.北京:清華大學出版社,2012.
  [3] 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.
 ?。?] 林東海.基于ALSA的Android音頻系統(tǒng)設計與實現(xiàn)[D].廈門:廈門大學,2013.
 ?。?] 李寧. Android深度探索[M].北京:人民郵電出版社,2015.
 ?。?] 楊昌棋, 秦樹人. 虛擬式噪聲分析儀的數(shù)字計權與開發(fā)[J]. 重慶大學學報(自然科學版), 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.
 ?。?] 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)真實噪聲環(huán)境下聲音事件在線檢測與識別[D].北京:北京大學,2013.
 ?。?0] 趙大磊, 張正平, 賀松,等. 基于Android的移動互聯(lián)網(wǎng)健康監(jiān)測系統(tǒng)的研究[J]. 微型機與應用, 2014, 33(8):1012.
 ?。?1] 代品宣,李震,盧超,等. 基于Android的校園導游和定位系統(tǒng)設計與實現(xiàn)[J]. 江蘇科技大學學報(自然科學版),2015,29(4):378381.
  [12] 中華人民共和國城市區(qū)域環(huán)境噪聲標準[J]. 環(huán)境保護,1996(12):7.

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