孫浩楠,仝志民,謝秋菊,李嘉熙
(黑龍江八一農墾大學工程學院,黑龍江大慶,163000)
疾病檢測是生豬集約化養殖的主要問題之一。在密集的飼養條件下,患病豬的叫聲可能表明呼吸系統疾病[1]。為了最大限度地減少各種呼吸道疾病對集約化養豬產業造成的損害,可以通過對豬咳嗽聲音進行監測,達到對豬早期呼吸道疾病預警的效果。咳嗽是廣泛呼吸道疾病的初期癥狀之一,也是篩查和診斷的核心要素。咳嗽是由氣道突然排出的空氣引起的,這種聲音具有特征性,可以將其與其他聲音表現區分開來[2]。
目前在集約化生豬產業中對呼吸道疾病的檢測方法一般使用人工檢測,人工檢測的缺點是識別率低,成本過高。因此為了解決這些問題,研究豬咳嗽聲檢測系統具有重要意義。
國外在豬聲音識別研究方面開展的較早。Chung等[3]從預處理之后的豬聲音數據中提取梅爾頻率倒譜系數(MFCC),以支持向量機(SVM)和稀疏表示分類器(SRC)對豬聲音和呼吸道疾病進行分類,通過試驗數據表明,分類精度分別為91%和94%,這種方法可以準確地檢測豬的呼吸道疾病。Mitchell等[4]經研究發現健康豬和患有呼吸道疾病的豬咳嗽聲音的短時能量有明顯區別,健康豬咳嗽聲音持續時長為0.21 s,而患有呼吸道疾病的豬咳嗽聲音持續時長為0.3 s。Ferrari等[5]通過提取聲音的時域和頻域特征,對健康豬和患有呼吸道疾病豬的咳嗽聲音進行識別和區分,設計在線咳嗽聲計數算法對呼吸道疾病進行預警。Guarino等[6]設計一種基于動態時間規整(DTW)的豬聲音識別與分析算法,咳嗽聲誤識別率和非咳嗽聲誤識別率都在15%以下,識別效果明顯。
國內在聲音識別方面尚處于起步階段。黎煊等[7]將具有時域特征的短時能量和具有頻域特征的Mel倒譜系數(MFCC)的維數相結合,組合成具有新維度的豬聲音特征參數,以新的特征參數構建深度信念網絡(DBN)豬咳嗽聲識別模型,識別誤差為6.83%。徐亞妮等[8]用無線多媒體傳感器網絡采集豬聲音樣本,對采集到的樣本進行去噪等預處理,通過5種豬聲音的功率譜密度曲線的波動性不同提取聲音功率譜密度(power spectral density,PSD)特征,并以PSD的特征作為聚類中心,運用改進的模糊C均值聚類算法(fuzzy C-means,FCM)對豬咳嗽聲和豬非咳嗽聲進行分析識別,識別率為84.1%。宣傳忠等[9]利用改進的Mel倒譜系數(MFCC)和支持向量機(SVM)對母羊的咳嗽聲、打架聲、饑餓聲、撕咬聲和尋伴聲進行識別和分析。識別率分別為85.0%、86.7%、85.0%、81.7%和83.0%。董紅松等[10]提出用隱馬爾可夫模型對豬咳嗽聲進行識別,識別率為80%。綜上所述,國內外在豬聲音識別研究方面存在去噪效果不明顯、識別率低、識別模型復雜等問題。
針對上述問題,在現有咳嗽聲音識別算法的基礎之上,本文對豬的咳嗽聲識別算法做了進一步的研究,其中包括用麥克風陣列對聲音的獲取,FIR濾波器對采集的5種聲音(咳嗽聲、尖叫聲、咆哮聲、哼哼聲、打呼嚕聲)進行去噪,用窗函數法對聲音數據進行端點檢測,以梅爾頻率倒譜系數為特征參數,利用單隱層BP神經網絡對其進行識別,為長白豬在集約化養殖過程中豬咳嗽聲的識別提供全新的思路。
本研究的試驗地點在黑龍江省哈爾濱市亞布力豬場,試驗對象為10頭75 kg左右的長白豬。豬聲音數據采集時間為2020年11月。試驗豬飼養于2.1 m×3.2 m的豬舍內,舍內有溫度、濕度調節器、食槽等。試驗期間,豬舍內的溫度一直保持在23 ℃ 左右。自然光照時間從早晨7點至下午16點。
豬聲音采集設備為樹莓派3B與7寸HDMIips觸摸屏搭建Linux系統微型計算機,連接四麥克風陣列進行采樣,該設備具有空間選擇性、不需要移動就可以改變接收方向拾取多路信號、拾音范圍大等優點,如圖1所示。采樣頻率為48 kHz,采樣精度為16位,可不間斷錄音24 h。

圖1 豬聲音數據采集設備
試驗設備采集的豬聲音在豬場飼養員的指導下進行人工分類標記,選取豬咳嗽聲、豬打呼嚕聲、豬尖叫聲、豬咆哮聲、豬哼哼聲作為聲音樣本數據。得到1 200 個有效豬聲音樣本,其中包括豬的咳嗽聲樣本為412個,豬的打呼嚕聲樣本為165個,豬的尖叫聲樣本為243個,豬的咆哮聲樣本為208個,豬的哼哼聲樣本為172個,保存為wav格式。
在豬舍環境下采集到的聲音數據不僅有我們所需要的樣本,還包含了環境噪聲和無效聲音。因此,在提取豬聲音主要特征之前需進行去噪和端點檢測。
1.3.1 去噪處理
由于豬舍環境中使用通風、調溫調濕等設備,以及金屬互相碰撞聲等,會使采集到的聲音信號中含有噪音,因此要消除噪聲信號對樣本特征參數提取的影響。試驗用窗函數法設計了FIR低通濾波器實現濾波的目的。
本試驗選用漢寧窗(升余弦窗),其計算公式如式(1)所示。
(1)
式中:w(n)——漢寧窗;
n——濾波器階數;
N——窗函數長度。
得到聲音信號的時域波形后,最常用的步驟是快速傅里葉變換,以獲得聲音信號的頻譜特征[11]。
設計FIR低通濾波器,并給定其性能指標,對豬聲音信號進行去噪處理,得到去噪后波形圖,并與原始波形圖對比,分析去噪情況。其計算公式如式(2)所示。
(2)
式中:x(n)——輸入;
h(k)——FIR低通濾波器濾波系數;
y(n)——濾波處理后的信號;
C——FIR低通濾波器的抽頭數;
C-1——FIR低通濾波器的階數。
圖2為基于FIR低通濾波器處理豬聲音樣本前后對比圖,通過濾波前后的波形比較,豬聲音樣本的去噪效果明顯,波形幾乎沒有失真。

(a) 咳嗽聲原始波形圖
1.3.2 端點檢測
人工切割的聲音數據無法準確地找出聲音的起始和聲音的終止,端點檢測的目的就是去除靜音的部分,最后得到有效的聲音內容。
本文采用短時能量和短時平均過零率的雙閾值算法進行語音端點檢測,這種算法可以準確地確定聲音樣本中有效信號的起始和結束的位置,將有效的聲音信號從環境噪聲中分離出來,加快預處理時間,提高效率[12]。豬聲音端點檢測如圖3所示。經過分幀處理得到第a幀的聲音信號設為Ya(m),其短時能量計算如式(3)所示。

(a) 豬咳嗽聲端點檢測圖
(3)
式中:E——短時能量;
A——窗長;
v——分幀后的總幀數。
經過分幀處理得到第a幀聲音信號Ya(m)的短時平均過零率(一幀信號的波形通過水平軸的次數),其計算如式(4)所示。
(4)
式中:Z——短時平均過零率;
經過預處理之后得到了理想狀態的豬聲音數據,為了將聲音信號轉換為計算機能夠有效處理的語音特征向量,對聲音數據進行特征參數的提取。梅爾頻率倒譜系數(Mel Frequency Cepstral Coefficients,MFCC)是聲音識別中最廣泛的頻域特征參數之一。
Mel倒譜系數的分析是以人類聽覺為基礎,并根據人類聽覺試驗的結果來分析聲音的頻譜特性[13-14]。Mel倒譜系數具有計算簡單、識別性能好、抗噪能力強等優點[15]。MFCC提取流程如圖4所示。

圖4 MFCC特征提取流程
1) 分幀加窗。聲音信號是一種瞬態、非周期、離散性大的信號,它由諧波成分和瞬態分量成分組成,但短時間內可以看做是穩定的、連續的信號,聲音分析的基礎就是短時分析[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) 快速傅里葉變換。將具有時域特性的聲音信號轉化為頻域特性,觀察能量分布。采用D點快速傅里葉變換得到每幀的頻譜,D=512。其計算如式(6)所示。
(6)
3) 計算梅爾濾波器能量。通過快速傅里葉變換得到了聲音信號每一幀的頻譜能量Yi(p),經濾波器組的計算求出Mel濾波器的能量,本文選擇三角濾波器組,其計算如式(7)所示。
(7)
式中:Hm(p)——Mel頻率濾波器組;
N——快速傅里葉變換的點數;
Si(m)——第i幀聲音信號第p條譜線經過第m個梅爾濾波器后的能量。
4) 計算每個濾波器組輸出的對數能量。在離散余弦變換之前需要計算和分析每個三角濾波器組輸出的對數能量H(m),其計算如式(8)所示。
(8)
式中:M——三角濾波器個數。
5) 離散余弦變換。將上述的濾波器組輸出對數能量帶入離散余弦變換C(n),求出L階的梅爾頻率倒譜系數參數,這里濾波器個數Q取最大值24,L=12。其計算如式(9)所示。
n=1,2,…,L
(9)
最終梅爾頻率倒譜系數的維度為12維,特征圖如圖5所示。

圖5 豬咳嗽聲MFCC特征圖
BP神經網絡的原理是利用反向傳播算法(信息向前傳遞,誤差反向傳遞)來不斷調整整個網絡的權值和閾值,以減小誤差的平方和,使輸出值和期望輸出值接近[18]。BP神經網絡模型包括3個部分:輸入層、隱含層和輸出層。圖6為單隱層BP神經網絡的結構。

圖6 單隱層BP神經網絡結構示意圖
BP神經網絡建立時隱含層數的選取對豬咳嗽聲識別率有著重要的影響。隱含層數目的選取目前沒有穩定的方案。如果隱含層數過多,就會增加訓練的時間,模型復雜化,效率降低。如果隱含層數過少又無法反映復雜的映射關系。為了解決上述問題,本文采用單隱層BP神經網絡,同時增加隱含層節點數的方法。
把維梅爾頻率倒譜系數作為輸入,輸入層節點選擇梅爾頻率倒譜系數的維數設為12,隱層節點數設為10,輸出為聲音標簽,輸出層節點設為1。本文在Windows 10系統下,利用MATLAB軟件建立了12-10-1三層BP神經網絡結構,如圖7所示。

圖7 BP神經網絡模型結構
在對BP神經網絡訓練之前,為了加快BP神經網絡的快速收斂,防止奇異樣本(與有效輸入樣本相比較,相差特別大或者相差特別小的樣本向量)影響試驗結果,需對豬聲音數據進行歸一化處理,將表達式之間進行轉換,把有量綱表達式全部轉換為無量綱表達式[19]。本文采用max-min歸一化方法。其計算如式(10)所示。
(10)
式中:Xj——歸一化之后的輸入數據;
Xmax——歸一化之前輸入數據的最大值;
Xmin——歸一化之前輸入數據的最小值。
通過激活函數的比較,本文選擇sigmoid為激活函數,初始權值賦值是隨機的,每次聲音數據訓練的結果不同,所以設置最大訓練次數為1 000次。其計算如式(11)所示。
(11)
設X1,X2,…,Xj為神經元的輸入,W1,W2,…,Wj為連接權值,Wj調節各個輸入量的占重比。神經元的凈輸入由線性加權求和,計算如式(12)所示。
(12)
把神經元的凈輸入和閾值相比較,再通過sigmoid激活函數處理就能得到神經元的輸出。其計算如式(13)所示。
yj=f(Netin-θj)
(13)
式中:θj——神經元的閾值。
設第一個輸入值為θ,權值為-1,簡化上述公式如式(14)所示。
yj=f(Netin)
(14)
式中:f——sigmoid激活函數。
Netin中w0=0,X0=θj。
預測結果的誤差本文用最小二乘法表示,其計算如式(15)所示。
(15)
式中:l——輸出神經元閾值。
在試驗中建立的BP神經網絡有d個輸入神經元,q個隱含神經元,l個輸出神經元,因此有q個隱含神經元閾值,l個輸出神經元閾值。所以要使預測結果的誤差縮小,需要調整(d+l+1)q+l各參數的值,一步步縮小Ek。
迭代結束后完成對BP神經網絡的訓練,然后對豬聲音樣本中測試集進行識別。
本文采用兩個指標對試驗結果進行分析:豬咳嗽聲音識別率(識別出的豬咳嗽聲音樣本占測試集中豬咳嗽聲音樣本總數的百分比)、豬非咳嗽聲識別率(識別出的豬非咳嗽聲音樣本占測試集中豬非咳嗽聲樣本總數的百分比)。本文采用五折交叉驗證(5-fold cross-validation)的方法來測試識別的準確性,步驟如下:(1)將豬聲音數據集平均分為5組;(2)選取1組作為測試集,另外4組作為訓練集;(3)重復步驟(2)5次,每一次選取的訓練集不同,結果如表1所示。

表1 五折交叉驗證結果
通過五折交叉驗證結果可知,5組豬咳嗽聲音識別率和豬非咳嗽聲音識別率平均值分別為85.33%和86.24%,均在85%以上,說明本文采用BP神經網絡模型來識別豬咳嗽聲是有效的。表1中第2組數據豬咳嗽聲音識別率為88.52%,豬非咳嗽聲音識別率為87.11%,為效果最佳試驗組。
1) 以樹莓派連接四麥克風陣列作為豬聲音采集設備,滿足連續采樣的功能和精度,能快速、穩定的獲取所需要的豬聲音樣本。
2) 提出基于BP神經網絡模型來識別豬咳嗽聲的方法,采用FIR濾波器對豬聲音樣本進行去噪,通過快速傅里葉變換等處理提取Mel倒譜系數,把Mel倒譜系數進行歸一化處理,進行BP神經網絡的訓練。通過5-fold cross-validation的驗證方法驗證結果,得到五組豬咳嗽聲音識別率和豬非咳嗽聲音識別率,平均識別率在85%以上。
3) 本文以長白豬為試驗對象,種類單一,同時采樣環境較好,對于其他種類的豬聲音識別效果有待驗證,這也是后期豬聲音識別算法的研究方向。