孫浩楠,仝志民,謝秋菊,李嘉熙
(黑龍江八一農(nóng)墾大學(xué)工程學(xué)院,黑龍江大慶,163000)
疾病檢測是生豬集約化養(yǎng)殖的主要問題之一。在密集的飼養(yǎng)條件下,患病豬的叫聲可能表明呼吸系統(tǒng)疾病[1]。為了最大限度地減少各種呼吸道疾病對集約化養(yǎng)豬產(chǎn)業(yè)造成的損害,可以通過對豬咳嗽聲音進行監(jiān)測,達到對豬早期呼吸道疾病預(yù)警的效果??人允菑V泛呼吸道疾病的初期癥狀之一,也是篩查和診斷的核心要素。咳嗽是由氣道突然排出的空氣引起的,這種聲音具有特征性,可以將其與其他聲音表現(xiàn)區(qū)分開來[2]。
目前在集約化生豬產(chǎn)業(yè)中對呼吸道疾病的檢測方法一般使用人工檢測,人工檢測的缺點是識別率低,成本過高。因此為了解決這些問題,研究豬咳嗽聲檢測系統(tǒng)具有重要意義。
國外在豬聲音識別研究方面開展的較早。Chung等[3]從預(yù)處理之后的豬聲音數(shù)據(jù)中提取梅爾頻率倒譜系數(shù)(MFCC),以支持向量機(SVM)和稀疏表示分類器(SRC)對豬聲音和呼吸道疾病進行分類,通過試驗數(shù)據(jù)表明,分類精度分別為91%和94%,這種方法可以準確地檢測豬的呼吸道疾病。Mitchell等[4]經(jīng)研究發(fā)現(xiàn)健康豬和患有呼吸道疾病的豬咳嗽聲音的短時能量有明顯區(qū)別,健康豬咳嗽聲音持續(xù)時長為0.21 s,而患有呼吸道疾病的豬咳嗽聲音持續(xù)時長為0.3 s。Ferrari等[5]通過提取聲音的時域和頻域特征,對健康豬和患有呼吸道疾病豬的咳嗽聲音進行識別和區(qū)分,設(shè)計在線咳嗽聲計數(shù)算法對呼吸道疾病進行預(yù)警。Guarino等[6]設(shè)計一種基于動態(tài)時間規(guī)整(DTW)的豬聲音識別與分析算法,咳嗽聲誤識別率和非咳嗽聲誤識別率都在15%以下,識別效果明顯。
國內(nèi)在聲音識別方面尚處于起步階段。黎煊等[7]將具有時域特征的短時能量和具有頻域特征的Mel倒譜系數(shù)(MFCC)的維數(shù)相結(jié)合,組合成具有新維度的豬聲音特征參數(shù),以新的特征參數(shù)構(gòu)建深度信念網(wǎng)絡(luò)(DBN)豬咳嗽聲識別模型,識別誤差為6.83%。徐亞妮等[8]用無線多媒體傳感器網(wǎng)絡(luò)采集豬聲音樣本,對采集到的樣本進行去噪等預(yù)處理,通過5種豬聲音的功率譜密度曲線的波動性不同提取聲音功率譜密度(power spectral density,PSD)特征,并以PSD的特征作為聚類中心,運用改進的模糊C均值聚類算法(fuzzy C-means,F(xiàn)CM)對豬咳嗽聲和豬非咳嗽聲進行分析識別,識別率為84.1%。宣傳忠等[9]利用改進的Mel倒譜系數(shù)(MFCC)和支持向量機(SVM)對母羊的咳嗽聲、打架聲、饑餓聲、撕咬聲和尋伴聲進行識別和分析。識別率分別為85.0%、86.7%、85.0%、81.7%和83.0%。董紅松等[10]提出用隱馬爾可夫模型對豬咳嗽聲進行識別,識別率為80%。綜上所述,國內(nèi)外在豬聲音識別研究方面存在去噪效果不明顯、識別率低、識別模型復(fù)雜等問題。
針對上述問題,在現(xiàn)有咳嗽聲音識別算法的基礎(chǔ)之上,本文對豬的咳嗽聲識別算法做了進一步的研究,其中包括用麥克風陣列對聲音的獲取,F(xiàn)IR濾波器對采集的5種聲音(咳嗽聲、尖叫聲、咆哮聲、哼哼聲、打呼嚕聲)進行去噪,用窗函數(shù)法對聲音數(shù)據(jù)進行端點檢測,以梅爾頻率倒譜系數(shù)為特征參數(shù),利用單隱層BP神經(jīng)網(wǎng)絡(luò)對其進行識別,為長白豬在集約化養(yǎng)殖過程中豬咳嗽聲的識別提供全新的思路。
本研究的試驗地點在黑龍江省哈爾濱市亞布力豬場,試驗對象為10頭75 kg左右的長白豬。豬聲音數(shù)據(jù)采集時間為2020年11月。試驗豬飼養(yǎng)于2.1 m×3.2 m的豬舍內(nèi),舍內(nèi)有溫度、濕度調(diào)節(jié)器、食槽等。試驗期間,豬舍內(nèi)的溫度一直保持在23 ℃ 左右。自然光照時間從早晨7點至下午16點。
豬聲音采集設(shè)備為樹莓派3B與7寸HDMIips觸摸屏搭建Linux系統(tǒng)微型計算機,連接四麥克風陣列進行采樣,該設(shè)備具有空間選擇性、不需要移動就可以改變接收方向拾取多路信號、拾音范圍大等優(yōu)點,如圖1所示。采樣頻率為48 kHz,采樣精度為16位,可不間斷錄音24 h。
圖1 豬聲音數(shù)據(jù)采集設(shè)備
試驗設(shè)備采集的豬聲音在豬場飼養(yǎng)員的指導(dǎo)下進行人工分類標記,選取豬咳嗽聲、豬打呼嚕聲、豬尖叫聲、豬咆哮聲、豬哼哼聲作為聲音樣本數(shù)據(jù)。得到1 200 個有效豬聲音樣本,其中包括豬的咳嗽聲樣本為412個,豬的打呼嚕聲樣本為165個,豬的尖叫聲樣本為243個,豬的咆哮聲樣本為208個,豬的哼哼聲樣本為172個,保存為wav格式。
在豬舍環(huán)境下采集到的聲音數(shù)據(jù)不僅有我們所需要的樣本,還包含了環(huán)境噪聲和無效聲音。因此,在提取豬聲音主要特征之前需進行去噪和端點檢測。
1.3.1 去噪處理
由于豬舍環(huán)境中使用通風、調(diào)溫調(diào)濕等設(shè)備,以及金屬互相碰撞聲等,會使采集到的聲音信號中含有噪音,因此要消除噪聲信號對樣本特征參數(shù)提取的影響。試驗用窗函數(shù)法設(shè)計了FIR低通濾波器實現(xiàn)濾波的目的。
本試驗選用漢寧窗(升余弦窗),其計算公式如式(1)所示。
(1)
式中:w(n)——漢寧窗;
n——濾波器階數(shù);
N——窗函數(shù)長度。
得到聲音信號的時域波形后,最常用的步驟是快速傅里葉變換,以獲得聲音信號的頻譜特征[11]。
設(shè)計FIR低通濾波器,并給定其性能指標,對豬聲音信號進行去噪處理,得到去噪后波形圖,并與原始波形圖對比,分析去噪情況。其計算公式如式(2)所示。
(2)
式中:x(n)——輸入;
h(k)——FIR低通濾波器濾波系數(shù);
y(n)——濾波處理后的信號;
C——FIR低通濾波器的抽頭數(shù);
C-1——FIR低通濾波器的階數(shù)。
圖2為基于FIR低通濾波器處理豬聲音樣本前后對比圖,通過濾波前后的波形比較,豬聲音樣本的去噪效果明顯,波形幾乎沒有失真。
(a) 咳嗽聲原始波形圖
1.3.2 端點檢測
人工切割的聲音數(shù)據(jù)無法準確地找出聲音的起始和聲音的終止,端點檢測的目的就是去除靜音的部分,最后得到有效的聲音內(nèi)容。
本文采用短時能量和短時平均過零率的雙閾值算法進行語音端點檢測,這種算法可以準確地確定聲音樣本中有效信號的起始和結(jié)束的位置,將有效的聲音信號從環(huán)境噪聲中分離出來,加快預(yù)處理時間,提高效率[12]。豬聲音端點檢測如圖3所示。經(jīng)過分幀處理得到第a幀的聲音信號設(shè)為Ya(m),其短時能量計算如式(3)所示。
(a) 豬咳嗽聲端點檢測圖
(3)
式中:E——短時能量;
A——窗長;
v——分幀后的總幀數(shù)。
經(jīng)過分幀處理得到第a幀聲音信號Ya(m)的短時平均過零率(一幀信號的波形通過水平軸的次數(shù)),其計算如式(4)所示。
(4)
式中:Z——短時平均過零率;
經(jīng)過預(yù)處理之后得到了理想狀態(tài)的豬聲音數(shù)據(jù),為了將聲音信號轉(zhuǎn)換為計算機能夠有效處理的語音特征向量,對聲音數(shù)據(jù)進行特征參數(shù)的提取。梅爾頻率倒譜系數(shù)(Mel Frequency Cepstral Coefficients,MFCC)是聲音識別中最廣泛的頻域特征參數(shù)之一。
Mel倒譜系數(shù)的分析是以人類聽覺為基礎(chǔ),并根據(jù)人類聽覺試驗的結(jié)果來分析聲音的頻譜特性[13-14]。Mel倒譜系數(shù)具有計算簡單、識別性能好、抗噪能力強等優(yōu)點[15]。MFCC提取流程如圖4所示。
圖4 MFCC特征提取流程
1) 分幀加窗。聲音信號是一種瞬態(tài)、非周期、離散性大的信號,它由諧波成分和瞬態(tài)分量成分組成,但短時間內(nèi)可以看做是穩(wěn)定的、連續(xù)的信號,聲音分析的基礎(chǔ)就是短時分析[16]。因此可以把聲音信號分割為以幀為單位的短段信號,每一短段為一幀(一幀為1/12 s),要把完整的聲音信號進行多段分幀操作。
(5)
式中:B——窗長。
一般信號幀為20~40 ms,這里取25 ms。以豬咳嗽聲為例:豬咳嗽聲頻率在4 000~8 000 Hz之間,這就要求信號幀的長度為0.025×8 000=200個采樣點。幀移=10 ms(共計80個從采樣點)。
2) 快速傅里葉變換。將具有時域特性的聲音信號轉(zhuǎn)化為頻域特性,觀察能量分布。采用D點快速傅里葉變換得到每幀的頻譜,D=512。其計算如式(6)所示。
(6)
3) 計算梅爾濾波器能量。通過快速傅里葉變換得到了聲音信號每一幀的頻譜能量Yi(p),經(jīng)濾波器組的計算求出Mel濾波器的能量,本文選擇三角濾波器組,其計算如式(7)所示。
(7)
式中:Hm(p)——Mel頻率濾波器組;
N——快速傅里葉變換的點數(shù);
Si(m)——第i幀聲音信號第p條譜線經(jīng)過第m個梅爾濾波器后的能量。
4) 計算每個濾波器組輸出的對數(shù)能量。在離散余弦變換之前需要計算和分析每個三角濾波器組輸出的對數(shù)能量H(m),其計算如式(8)所示。
(8)
式中:M——三角濾波器個數(shù)。
5) 離散余弦變換。將上述的濾波器組輸出對數(shù)能量帶入離散余弦變換C(n),求出L階的梅爾頻率倒譜系數(shù)參數(shù),這里濾波器個數(shù)Q取最大值24,L=12。其計算如式(9)所示。
n=1,2,…,L
(9)
最終梅爾頻率倒譜系數(shù)的維度為12維,特征圖如圖5所示。
圖5 豬咳嗽聲MFCC特征圖
BP神經(jīng)網(wǎng)絡(luò)的原理是利用反向傳播算法(信息向前傳遞,誤差反向傳遞)來不斷調(diào)整整個網(wǎng)絡(luò)的權(quán)值和閾值,以減小誤差的平方和,使輸出值和期望輸出值接近[18]。BP神經(jīng)網(wǎng)絡(luò)模型包括3個部分:輸入層、隱含層和輸出層。圖6為單隱層BP神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。
圖6 單隱層BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖
BP神經(jīng)網(wǎng)絡(luò)建立時隱含層數(shù)的選取對豬咳嗽聲識別率有著重要的影響。隱含層數(shù)目的選取目前沒有穩(wěn)定的方案。如果隱含層數(shù)過多,就會增加訓(xùn)練的時間,模型復(fù)雜化,效率降低。如果隱含層數(shù)過少又無法反映復(fù)雜的映射關(guān)系。為了解決上述問題,本文采用單隱層BP神經(jīng)網(wǎng)絡(luò),同時增加隱含層節(jié)點數(shù)的方法。
把維梅爾頻率倒譜系數(shù)作為輸入,輸入層節(jié)點選擇梅爾頻率倒譜系數(shù)的維數(shù)設(shè)為12,隱層節(jié)點數(shù)設(shè)為10,輸出為聲音標簽,輸出層節(jié)點設(shè)為1。本文在Windows 10系統(tǒng)下,利用MATLAB軟件建立了12-10-1三層BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),如圖7所示。
圖7 BP神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)
在對BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練之前,為了加快BP神經(jīng)網(wǎng)絡(luò)的快速收斂,防止奇異樣本(與有效輸入樣本相比較,相差特別大或者相差特別小的樣本向量)影響試驗結(jié)果,需對豬聲音數(shù)據(jù)進行歸一化處理,將表達式之間進行轉(zhuǎn)換,把有量綱表達式全部轉(zhuǎn)換為無量綱表達式[19]。本文采用max-min歸一化方法。其計算如式(10)所示。
(10)
式中:Xj——歸一化之后的輸入數(shù)據(jù);
Xmax——歸一化之前輸入數(shù)據(jù)的最大值;
Xmin——歸一化之前輸入數(shù)據(jù)的最小值。
通過激活函數(shù)的比較,本文選擇sigmoid為激活函數(shù),初始權(quán)值賦值是隨機的,每次聲音數(shù)據(jù)訓(xùn)練的結(jié)果不同,所以設(shè)置最大訓(xùn)練次數(shù)為1 000次。其計算如式(11)所示。
(11)
設(shè)X1,X2,…,Xj為神經(jīng)元的輸入,W1,W2,…,Wj為連接權(quán)值,Wj調(diào)節(jié)各個輸入量的占重比。神經(jīng)元的凈輸入由線性加權(quán)求和,計算如式(12)所示。
(12)
把神經(jīng)元的凈輸入和閾值相比較,再通過sigmoid激活函數(shù)處理就能得到神經(jīng)元的輸出。其計算如式(13)所示。
yj=f(Netin-θj)
(13)
式中:θj——神經(jīng)元的閾值。
設(shè)第一個輸入值為θ,權(quán)值為-1,簡化上述公式如式(14)所示。
yj=f(Netin)
(14)
式中:f——sigmoid激活函數(shù)。
Netin中w0=0,X0=θj。
預(yù)測結(jié)果的誤差本文用最小二乘法表示,其計算如式(15)所示。
(15)
式中:l——輸出神經(jīng)元閾值。
在試驗中建立的BP神經(jīng)網(wǎng)絡(luò)有d個輸入神經(jīng)元,q個隱含神經(jīng)元,l個輸出神經(jīng)元,因此有q個隱含神經(jīng)元閾值,l個輸出神經(jīng)元閾值。所以要使預(yù)測結(jié)果的誤差縮小,需要調(diào)整(d+l+1)q+l各參數(shù)的值,一步步縮小Ek。
迭代結(jié)束后完成對BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,然后對豬聲音樣本中測試集進行識別。
本文采用兩個指標對試驗結(jié)果進行分析:豬咳嗽聲音識別率(識別出的豬咳嗽聲音樣本占測試集中豬咳嗽聲音樣本總數(shù)的百分比)、豬非咳嗽聲識別率(識別出的豬非咳嗽聲音樣本占測試集中豬非咳嗽聲樣本總數(shù)的百分比)。本文采用五折交叉驗證(5-fold cross-validation)的方法來測試識別的準確性,步驟如下:(1)將豬聲音數(shù)據(jù)集平均分為5組;(2)選取1組作為測試集,另外4組作為訓(xùn)練集;(3)重復(fù)步驟(2)5次,每一次選取的訓(xùn)練集不同,結(jié)果如表1所示。
表1 五折交叉驗證結(jié)果
通過五折交叉驗證結(jié)果可知,5組豬咳嗽聲音識別率和豬非咳嗽聲音識別率平均值分別為85.33%和86.24%,均在85%以上,說明本文采用BP神經(jīng)網(wǎng)絡(luò)模型來識別豬咳嗽聲是有效的。表1中第2組數(shù)據(jù)豬咳嗽聲音識別率為88.52%,豬非咳嗽聲音識別率為87.11%,為效果最佳試驗組。
1) 以樹莓派連接四麥克風陣列作為豬聲音采集設(shè)備,滿足連續(xù)采樣的功能和精度,能快速、穩(wěn)定的獲取所需要的豬聲音樣本。
2) 提出基于BP神經(jīng)網(wǎng)絡(luò)模型來識別豬咳嗽聲的方法,采用FIR濾波器對豬聲音樣本進行去噪,通過快速傅里葉變換等處理提取Mel倒譜系數(shù),把Mel倒譜系數(shù)進行歸一化處理,進行BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。通過5-fold cross-validation的驗證方法驗證結(jié)果,得到五組豬咳嗽聲音識別率和豬非咳嗽聲音識別率,平均識別率在85%以上。
3) 本文以長白豬為試驗對象,種類單一,同時采樣環(huán)境較好,對于其他種類的豬聲音識別效果有待驗證,這也是后期豬聲音識別算法的研究方向。