張 瑞, 陳友榮, 陳 浩, 劉半藤, 周駿華
(1.浙江樹人大學(xué) 信息科技學(xué)院,浙江 杭州 310015;2.中國移動(杭州)信息技術(shù)有限公司,浙江 杭州 311100)
通過運(yùn)動獲得健康的理念深入人心。智能手表和健康追蹤器等可穿戴設(shè)備因其具有便攜性且能滿足用戶記錄步數(shù)、運(yùn)動配速和卡路里等功能,而被越來越多的人們接受。因此部分學(xué)者選擇加速計(jì)和陀螺儀等傳感器實(shí)現(xiàn)跑步、靜止和蹲下等簡單運(yùn)動狀態(tài)的識別[1~4]。但是目前此類產(chǎn)品需要攜帶用戶手機(jī),如華為運(yùn)動健康的步數(shù)和熱量計(jì)算,導(dǎo)致運(yùn)動較不方便。而部分手環(huán)類等可穿戴設(shè)備也只是根據(jù)人們移動的步數(shù)等信息進(jìn)行跑步,靜止和蹲下等簡單運(yùn)動狀態(tài)分析,方法較簡單且沒有深入分析用戶的運(yùn)動狀態(tài)。在心率檢測方面,存在緊貼手腕、毛發(fā)不能過于旺盛與不能出汗等限制條件。
相比上述加速度等數(shù)據(jù),聲音數(shù)據(jù)可直接方便地采集,而且其大小一定程度上反映著周圍環(huán)境變化的強(qiáng)烈程度。因此目前很多學(xué)者根據(jù)聲音數(shù)據(jù)實(shí)現(xiàn)各種應(yīng)用,如文獻(xiàn)[5]的用戶肺水腫檢測,文獻(xiàn)[6]的呼吸道痰液檢測。文獻(xiàn)[7]為有效解決原有MCRA(minima controlled recursive averaging)算法中存在的噪聲估計(jì)延時等問題和異常類型較多的情況,分別提出一種改進(jìn)的最小值控制遞歸平均噪聲估計(jì)算法和以改進(jìn)能熵比值為特征值的異音檢測算法。文獻(xiàn)[8,9]根據(jù)研究對象的聲音特點(diǎn),選用小波變換對聲音信號進(jìn)行處理,從而實(shí)現(xiàn)特征提取并且將特征值輸入到結(jié)合反向傳播(back propagation,BP)神經(jīng)網(wǎng)絡(luò)來完成訓(xùn)練和識別。文獻(xiàn)[10~12]在針對聲音進(jìn)行一定降噪處理后,再對聲音進(jìn)行不同類型的特征值提取,最后通過傳統(tǒng)或改進(jìn)的SVM分類器進(jìn)行識別??傊?文獻(xiàn)[5~12]利用聲音信號實(shí)現(xiàn)各種應(yīng)用,但其在完成聲音數(shù)據(jù)的初步特征提取后直接輸入到神經(jīng)網(wǎng)絡(luò)或分類器中進(jìn)行處理,而沒有對特征值采取進(jìn)一步處理,并且其在樣本庫的設(shè)置上沒能考慮到更新問題??紤]到不同運(yùn)動狀態(tài)會有不同頻率的呼吸聲音。同時目前很多語音識別算法都是將人體產(chǎn)生的語音信號傳輸給云服務(wù)器進(jìn)行在線識別。在線識別對設(shè)備的能耗和網(wǎng)絡(luò)帶寬要求較高,難以應(yīng)用到對能耗要求較低的可穿戴設(shè)備中。根據(jù)聲音采集耳機(jī)采集的呼吸聲音,研究基于呼吸聲音的用戶運(yùn)動狀態(tài)離線識別算法(off-line recognition algorithm,OLRA)。該算法通過初始化、分幀、小波包去噪、特征值提取、改進(jìn)K-means聚類、神經(jīng)網(wǎng)絡(luò)建模、識別和樣本更新等步驟實(shí)現(xiàn)不同用戶的三種運(yùn)動狀態(tài)(慢走,慢跑,快跑)的識別,從而對用戶疲勞狀態(tài)進(jìn)行精確識別。
如圖1所示,用戶運(yùn)動時可穿戴聲音采集耳機(jī)設(shè)備。
圖1 聲音采集耳機(jī)設(shè)備方案
基于聲音采集耳機(jī)設(shè)備,利用用戶的呼吸聲音,提出一種用戶運(yùn)動狀態(tài)離線識別算法。如圖2所示,首先利用聲音采集耳機(jī)和手機(jī)收集呼吸聲音信號,建立呼吸聲音樣本庫和采集需要識別的呼吸聲音。接著對聲音信號分幀、能量檢測、小波包去噪、歸一化等預(yù)處理,分析特征,進(jìn)行改進(jìn)K-means聚類等特征處理,最后通過神經(jīng)網(wǎng)絡(luò)的訓(xùn)練、識別和樣本更新,輸出識別結(jié)果??紤]針對圖1設(shè)備的能耗問題,在更新樣本數(shù)量達(dá)到閾值且設(shè)備處于充電狀態(tài)下才進(jìn)行神經(jīng)網(wǎng)絡(luò)的模型訓(xùn)練。當(dāng)用戶使用設(shè)備時該設(shè)備只完成數(shù)據(jù)的采集、預(yù)處理、特征處理、狀態(tài)識別和樣本更新。但仍需要解決2個問題:如何進(jìn)行針對呼吸聲音的預(yù)處理和特征處理;如何采用神經(jīng)網(wǎng)絡(luò)訓(xùn)練和識別聲音,并根據(jù)輸出結(jié)果,更新樣本,從而實(shí)現(xiàn)離線狀態(tài)識別,提高基于本地信息的不同用戶運(yùn)動狀態(tài)識別率。
圖2 原理流程框圖
通過圖1設(shè)備采集用戶運(yùn)動過程中的呼吸聲音信號并進(jìn)行分幀和能量檢測。若連續(xù)出現(xiàn)3個幀的能量較大,則從第一個幀開始采集T秒的聲音信號,并經(jīng)過分幀、小波包去噪和歸一化的處理。
1.1.1 分 幀
聲音信號具有短時平穩(wěn)特性。因此,采用漢寧窗公式將聲音信號分成幀,幀與幀的非重疊部分稱為幀移
w(k)=0.5(1-cos(2πk/(Nf-1)))
(1)
式中Nf為幀長。
1.1.2 能量檢測
計(jì)算該幀的能量
(2)
式中xf(m)為一幀的第m個呼吸聲音數(shù)據(jù),Ef為一幀呼吸聲音的能量。若Ef小于能量閾值Eyu,則認(rèn)為該幀無聲音,不需要進(jìn)行以后操作,否則記錄該幀有聲音。當(dāng)連續(xù)出現(xiàn)3個幀都有聲音,則認(rèn)為采集到呼吸聲音,從第一個幀開始采集T秒的聲音信號。
1.1.3 小波包去噪法
針對聲音數(shù)據(jù)采集過程中的外部干擾噪聲,通過將聲音采集模塊靠近嘴巴和增加防風(fēng)罩等方法來降低干擾。針對電磁噪聲(白噪聲),則選擇小波包閾值去噪法實(shí)現(xiàn)聲音信號的去噪。小波包閾值去噪法主要包括三個參數(shù)(小波基、分解層數(shù)和小波包閾值)的選擇。假設(shè)x(n)是一個帶噪的原始聲音信號,則小波包閾值去噪法的具體步驟如下:1)初始化程序,選擇db4小波基并設(shè)定小波包分解層數(shù) ;2)多尺度小波包分解,對聲音信號x(n)進(jìn)行Nx層小波包分解,得到2Nx個小波包系數(shù);3)多尺度閾值去噪,若每一層高頻小波包系數(shù)的絕對值小于自適應(yīng)閾值,則該小波包系數(shù)變?yōu)?,否則,保持不變;4)根據(jù)小波包分解得到經(jīng)過處理的低頻系數(shù)和高頻小波包系數(shù),進(jìn)行小波包重構(gòu)聲音信號,最終可得到去噪后的聲音信號。
1.1.4 歸一化
1.2.1 MFCC參數(shù)提取
梅爾倒譜系數(shù)(Mel-frequency cepstral coefficients,MFCC)是在低頻到高頻這一段頻帶內(nèi)按臨界帶寬的大小設(shè)置由密到疏的一組帶通濾波器,并對輸入信號進(jìn)行濾波。將每個帶通濾波器輸出的信號能量經(jīng)過進(jìn)一步處理后就可以作為聲音的輸入特征。修正MFCC參數(shù)是在給定頻率域的倒譜特征參數(shù),其計(jì)算的具體步驟如下:
1)對每一幀進(jìn)行離散傅里葉變換(discrete Fourier transformation,DFT),獲得頻譜
(3)
式中y(n)為預(yù)處理后的時域信號,Y(k)為DFT后的頻域信號。
2)計(jì)算Y(k)中每一個點(diǎn)的平方,得到能量譜,再使用M個Mel帶通濾波器進(jìn)行濾波。其中,第m個濾波器的傳遞函數(shù)為
(4)
表1 帶劃分表
3)對所有的濾波器輸出數(shù)據(jù)做對數(shù)運(yùn)算。第m個濾波器組的對數(shù)能量為
(5)
式中Y(k)為DFT后的頻域信號,Hm(k)為三角濾波器的頻率響應(yīng),M為Mel濾波器的個數(shù)。
4)經(jīng)過離散余弦變換(DCT)得到M個修正MFCC參數(shù)
(6)
1.2.2 改進(jìn)K-means聚類
結(jié)合聚類算法減小MFCC參數(shù)的數(shù)據(jù)量,從而提高算法的運(yùn)算效率。K-means聚類是以歐氏距離作為數(shù)據(jù)分類的標(biāo)準(zhǔn)。但是常規(guī)K-means聚類存在初始中心選取因隨機(jī)化而導(dǎo)致聚類時間過長等問題,因此對K-means聚類進(jìn)行以下修改:
根據(jù)式(7)計(jì)算每幀中MFCC系數(shù)的平均值,可表示為
(7)
式中αj,k為第k個幀中第j個MFCC系數(shù)的平均值。βj,k為第k個幀中第j個MFCC系數(shù)的值。m為一幀中MFCC系數(shù)的個數(shù)。根據(jù)式(9)選擇K個初始簇中心
(8)
式中δj,k為初始所選擇的第k個簇中心的第j個維度的值,εj,k為第k個幀中第j個MFCC系數(shù)的最大值與最小值之間的差值,K為簇個數(shù),φ為從1到簇個數(shù)一半的正序號且包括乘以-1的負(fù)序號,若簇個數(shù)為奇數(shù),則在正序號后面增加1位,μ為差值的修正值。
采用簇中心的變化度作為衡量簇中心收斂的標(biāo)準(zhǔn)
(9)
式中τ為簇中心的變化度,?為當(dāng)前時刻前后簇中心變化的距離,?′為上一時刻前后簇中心變化的距離,δ′j,k為前一次簇中心,ρ為變化度閾值。若變化度小于閾值ρ,則判定簇中心的選取收斂,直接選取距離當(dāng)前簇中心最近的MFCC系數(shù)作為特征值,輸入到后續(xù)神經(jīng)網(wǎng)絡(luò)中。否則,返回重新計(jì)算簇中心。
1.3.1 模型學(xué)習(xí)
BP網(wǎng)絡(luò)的精髓是將網(wǎng)絡(luò)的輸出與期望輸出間的誤差歸結(jié)為權(quán)值和閾值的“過錯”,通過反向傳播把誤差“分?jǐn)偂苯o各個神經(jīng)元的權(quán)值和閾值。設(shè)一樣本對,X為輸入,Y為期望輸出,X=[x1,x2,…,xm]′,Y=[y1,y2,…,yn]′,隱含層神經(jīng)元為o=[o1,o2,…,ol]。則隱含層神經(jīng)元的輸出為
(10)
輸出層神經(jīng)元的輸出為
(11)
1.3.2 狀態(tài)識別
輸入測試樣本S=[s1,s2,…,sm]′,通過模型學(xué)習(xí)計(jì)算的參數(shù)和以下公式計(jì)算各個狀態(tài)的比配值
(12)
式中R為一個1×n維的向量。根據(jù)R的值,選擇最大元素且其大于指定閾值時,則該樣本確定為該類裝狀態(tài)。
1.3.3 樣本庫更新
離線識別可以有效降低可穿戴設(shè)備的能耗且硬件復(fù)雜度。但是由于人們的呼吸聲音相差較大且可穿戴設(shè)備存儲量有限,不能存儲呼吸聲音的所有類型,因此,在算法中考慮樣本庫的更新。即對每一個樣本,標(biāo)記其存儲時間、樣本類別和識別值。樣本類別分成初始樣本和本地樣本,其中初始樣本不可更新,本地樣本可更新。當(dāng)一個測試聲音開始識別時,首先判斷它屬于哪一類聲音信號,再把其識別值與指定閾值進(jìn)行比較。當(dāng)識別值大于所設(shè)閾值時,表示該聲音信號為高匹配聲音信號。如果本地樣本的數(shù)量小于指定閾值,則直接將其保存到樣本庫的本地樣本中,否則判斷本地樣本的識別值和存儲時間,替換存儲時間較長且識別值較低的本地樣本;反之,該聲音信號將不被保存到樣本庫。同時,樣本更新后,當(dāng)設(shè)備處于充電狀態(tài)下重新進(jìn)行模型學(xué)習(xí),更新相關(guān)參數(shù)。
讓運(yùn)動員佩戴上述中的聲音采集耳機(jī),分別經(jīng)歷慢走、慢跑和快跑三種運(yùn)動狀態(tài),并采集這三種運(yùn)動狀態(tài)聲音數(shù)據(jù)。同時將聲音采集耳機(jī)靜置于戶外,采集運(yùn)動時的環(huán)境聲音。其中參數(shù)選擇如下:采集時長T為5 s,幀長Nf為512,幀移為256,能量閾值Eyu為1,聚類類數(shù)K為3,中心向量的變化度τ為0.03,差值修正值μ為0.5,小波包分解層數(shù)Nx為3,修正MFCC系數(shù)個數(shù)為20,濾波器的濾波器組數(shù)M為100,測試樣本為130,數(shù)據(jù)樣本為200。定義正確識率和錯誤接受率為:正確識別率=(正確識別的測試聲音個數(shù)/測試聲音總數(shù))×100 %;錯誤接受率=(被接受的非本狀態(tài)測試聲音個數(shù)/測試聲音總數(shù))×100 %。
2.2.1 MFCC系數(shù)提取結(jié)果分析
如圖3(a)所示,對慢跑呼吸聲音進(jìn)行MFCC參數(shù)提取,發(fā)現(xiàn)聲音在前部有一個快速的上升,在達(dá)到最高峰20左右后,經(jīng)過了一個中等的下降,穩(wěn)定在-5~5的范圍之內(nèi)。同樣在對慢走和快跑聲音經(jīng)過MFCC參數(shù)提取后,可以發(fā)現(xiàn)慢走呼吸聲音在達(dá)到最高峰值15左右后緩慢下降,穩(wěn)定在-5~5的范圍之內(nèi)。而快跑呼吸聲音在達(dá)到最高峰值20左右后,經(jīng)過一個快速的下降,穩(wěn)定在-5~5的范圍之內(nèi)。因此這三種運(yùn)動狀態(tài)聲音數(shù)據(jù)在MFCC特征值存在較為明顯差異。
2.2.2 簇類結(jié)果分析
選擇簇類個數(shù)為3,并運(yùn)行改進(jìn)型K-means聚類,獲得聲音數(shù)據(jù)的聚類結(jié)果。如圖3(b)所示,慢跑呼吸聲音在完成MFCC參數(shù)提取和聚類處理后,尋找到3個簇中心的MFCC系數(shù)。慢跑呼吸聲音的MFCC系數(shù)主要峰值分別達(dá)到15,7和5左右。而慢走呼吸聲音與快跑呼吸聲音經(jīng)過相同處理后,可以發(fā)現(xiàn)慢走呼吸聲音的MFCC系數(shù)主要峰值分別達(dá)到11,5和3左右??炫芎粑曇舻腗FCC系數(shù)主要峰值分別達(dá)到12,11和7左右。并且這三種聲音的聚類結(jié)果圖,保留了不同狀態(tài)聲音之間的明顯差異。
圖3 慢跑呼吸數(shù)據(jù)的MFCC特征值和聚類結(jié)果
分析改進(jìn)K-mean聚類對離線識別算法(offline recognition algorithm,OLRA)算法的影響,通過選擇400個樣本數(shù)據(jù)(100個慢走呼吸數(shù)據(jù)樣本、100個慢跑呼吸數(shù)據(jù)樣本、100個快跑呼吸數(shù)據(jù)樣本和100個環(huán)境聲音樣本)作為訓(xùn)練集,選擇另外由80個運(yùn)動員運(yùn)動呼吸聲音和50個環(huán)境聲音所組成的測試集。首先分析簇類個數(shù)對OLRA正確識別率的影響。起初在簇類個數(shù)為1和2時,正確識別率達(dá)到87 %左右。當(dāng)簇類個數(shù)等于3時,正確識別率達(dá)到最大值93 %左右,但隨著簇類個數(shù)的增加,后期又出現(xiàn)正確識別率小幅度下降。這主要原因是由于K-means算法的局部最優(yōu)解的局限性,若強(qiáng)行滿足簇個數(shù)的需求,導(dǎo)致輸入到后續(xù)神經(jīng)網(wǎng)絡(luò)的部分特征向量為異常向量,從而使正確識別率出現(xiàn)小幅度的下降。因此,當(dāng)簇類個數(shù)為3時,能取得較好的正確識別率。
其次,分析聚類算法對OLRA運(yùn)行時間的影響。如表2所示,OLRA-II 表示對聲音進(jìn)行MFCC特征值提取后,直接進(jìn)行神經(jīng)網(wǎng)絡(luò)識別。雖然兩者在錯誤接受率上較為接近,但在運(yùn)行時間和正確識別率上OLRA要明顯優(yōu)于OLRA-II算法。其中主要是因?yàn)榫垲愃惴▽υ械腗FCC特征值進(jìn)行降維,從而直接縮短了后續(xù)BP神經(jīng)網(wǎng)絡(luò)處理所需要的時間,并且在提高正確識別率上,為神經(jīng)網(wǎng)絡(luò)提供了具有一定代表性的特征值。
表2 OLRA算法有無聚類情況分析
2.2.3 識別結(jié)果
選擇400個樣本數(shù)據(jù)(100個慢走呼吸數(shù)據(jù)樣本、100個慢跑呼吸數(shù)據(jù)樣本、100個快跑呼吸數(shù)據(jù)樣本和100個環(huán)境聲音樣本)作為訓(xùn)練集,選擇另外的80個運(yùn)動人員運(yùn)動呼吸的聲音和50個環(huán)境聲音作為測試集,仿真比較MC-LBG(Linde Buzo Gray vector quantization algorithm based on Mel-frequency cepstral coefficients),MC-SVM(support vector machine algorithm based on Mel-frequency cepstral coefficients)和OLRA三種算法的正確識別率和錯誤接受率。其中MC-LBG和MC-SVM算法均選擇MFCC作為特征,因此,前綴名為MC。其中,LBG表示為矢量量化降維,主要根據(jù)測試數(shù)據(jù)的特征值到類中心的距離,選擇作為識別結(jié)果。而MC-SVM算法則選擇SVM作為分類器,且核函數(shù)為高斯核函數(shù),進(jìn)行分類識別。如圖4(a)所示,采用同一個人的聲音信號做識別時,由于開始的測試信號個數(shù)中有少數(shù)信號誤判斷且測試信號個數(shù)較少,因此,三種算法的識別率不高,只大于70 %以上,但是隨著測試信號個數(shù)的增加,誤判斷個數(shù)較少,三個算法的正確率到達(dá)85 %以上。由于OLRA除了采用小波包去噪法排除噪聲所對聲音帶來的干擾外,還采用了改進(jìn)型K-mean聚類和BP神經(jīng)網(wǎng)絡(luò)進(jìn)行識別。同LBG與SVM算法相比,有一定的有自學(xué)能力和推廣概括的能力。因此,其識別率始終高于MC-LBG算法和MC-SVM算法,可達(dá)到95 %以上。
如圖4(b)所示,當(dāng)樣本數(shù)據(jù)和測試數(shù)據(jù)不是同一個人發(fā)出的呼吸聲音時,計(jì)算算法的識別率和錯誤接受率。由于測試數(shù)據(jù)的聲音特征與樣本數(shù)據(jù)的聲音特征有一定的差異,且其特征相對較難區(qū)分,因此MC-LBG算法和MC-SVM算法的識別率低于73 %。雖然OLRA的樣本數(shù)據(jù)和測試數(shù)據(jù)存在差異,開始的識別率較低,但其加入了樣本庫更新機(jī)制,具有很強(qiáng)的適應(yīng)能力,從而提高其識別率。因此隨著測試數(shù)量的增加,OLRA的識別率上升,最終可達(dá)到93 %以上。
如圖4(c)所示,OLRA的錯誤接受個數(shù)小于MC-LBG碼本和MC-SVM算法的錯誤接受個數(shù),OLRA錯誤接受率只有3.4 %,與 MC-LBG碼本和MC-SVM算法的錯誤接受率相比,相對較低。
圖4 識別結(jié)果
提出一種基于呼吸聲音的用戶運(yùn)動狀態(tài)OLRA。首先,提出了一種聲音采集耳機(jī)的硬件方案。并在該設(shè)備上,提出了初始化、分幀、能量檢測、小波包去噪、歸一化、修正MFCC特征提取、改進(jìn)型K-means聚類、神經(jīng)網(wǎng)絡(luò)建模和識別、樣本更新等步驟,實(shí)現(xiàn)三種短時間運(yùn)動狀態(tài)(慢走,慢跑,快跑)的識別。
總之,OLRA考慮了運(yùn)動人員發(fā)出的呼吸聲音,可有效識別運(yùn)動人員的3種行為聲音。相比MC-LBG和MC-SVM算法,OLRA提高了正確識別率和降低了錯誤接受率。但是,OLRA利用本地樣本離線識別呼吸信號,雖然需要存儲的本地樣本空間要求較少,但是也存在一定的識別誤差,下一階段目標(biāo)是利用多個用戶的上傳運(yùn)動數(shù)據(jù),研究云端用戶運(yùn)動狀態(tài)識別算法,提高識別的準(zhǔn)確率。