:從特征提取到SVM分類)
1. 項(xiàng)目概述托輥是帶式輸送機(jī)里數(shù)量最多、最容易出問題的部件之一。一臺普通的帶式輸送機(jī)托輥少則幾百組、多則上千組分布在整個(gè)輸送線路上。這些托輥一旦出現(xiàn)軸承磨損、輥皮裂紋、密封損壞等問題輕則產(chǎn)生異響、增加運(yùn)行阻力重則導(dǎo)致輸送帶跑偏甚至撕裂。傳統(tǒng)做法靠巡檢工人用聽音棒貼著托輥一個(gè)一個(gè)聽效率低、漏檢率高尤其是長距離皮帶機(jī)巡檢一趟下來人已經(jīng)累得夠嗆更別提在粉塵大、噪音高的環(huán)境下靠耳朵分辨故障特征。基于聲音信號的托輥故障檢測系統(tǒng)核心思路不復(fù)雜托輥在正常運(yùn)行和不同故障狀態(tài)下其發(fā)出的聲音信號在時(shí)域和頻域上都有差異我們用麥克風(fēng)或聲學(xué)傳感器把這些聲音采集下來經(jīng)過信號預(yù)處理、特征提取、模式識別這幾步就能自動判斷托輥是否處于故障狀態(tài)甚至在故障初期就把問題暴露出來。這套系統(tǒng)能解決的問題很明確替代人工巡檢、降低漏檢率、縮短故障發(fā)現(xiàn)時(shí)間為設(shè)備 predictive maintenance 提供數(shù)據(jù)基礎(chǔ)。這篇文章適合三類人看一是搞礦山、港口、電廠等輸送系統(tǒng)設(shè)備維護(hù)的工程師想了解如何用低成本方式實(shí)現(xiàn)托輥狀態(tài)監(jiān)測二是自動化、測控方向的學(xué)生正在做相關(guān)畢設(shè)或課程項(xiàng)目需要一個(gè)完整的技術(shù)方案參考三是對聲音信號處理和故障診斷感興趣的開發(fā)者想快速上手一個(gè)能用 Matlab 跑通的檢測流程。我會把整個(gè)系統(tǒng)從硬件選型、信號采集、特征提取到分類識別的思路都過一遍重點(diǎn)放在能直接落地的實(shí)操環(huán)節(jié)最后把我在調(diào)試過程中踩過的坑也一并分享出來。2. 系統(tǒng)整體設(shè)計(jì)與思路拆解2.1 為什么選聲音信號而不是振動信號提到旋轉(zhuǎn)機(jī)械故障檢測很多人第一反應(yīng)是振動信號。振動傳感器加速度計(jì)確實(shí)在大型旋轉(zhuǎn)設(shè)備上有成熟應(yīng)用但用在托輥檢測上有一個(gè)很現(xiàn)實(shí)的問題托輥數(shù)量太多每個(gè)托輥都裝振動傳感器成本直接失控。一個(gè)質(zhì)量可靠的工業(yè)級加速度計(jì)加配套采集模塊價(jià)格幾百到上千元不等一條幾公里長的輸送線全部覆蓋預(yù)算會非常感人。聲音信號方案的優(yōu)勢在于非接觸、可巡檢。用一個(gè)麥克風(fēng)陣列或者手持式聲學(xué)采集設(shè)備就能對一片區(qū)域內(nèi)的托輥進(jìn)行掃描采集不需要在每個(gè)托輥上安裝傳感器。雖然單個(gè)托輥的聲音信號會摻雜環(huán)境噪聲但通過后期的信號處理可以在很大程度上把目標(biāo)信號分離出來。實(shí)際上現(xiàn)場工程中還有一種折中方案在關(guān)鍵位置比如轉(zhuǎn)載點(diǎn)、機(jī)頭機(jī)尾固定安裝聲學(xué)傳感器其他區(qū)域用便攜設(shè)備巡檢這樣成本和覆蓋范圍之間能達(dá)到一個(gè)比較理想的平衡。還有一個(gè)常被忽略的點(diǎn)托輥故障早期軸承磨損產(chǎn)生的聲學(xué)信號變化往往比振動信號更明顯。聲音的本質(zhì)是介質(zhì)的機(jī)械振動傳播軸承早期點(diǎn)蝕、剝落產(chǎn)生的沖擊能量在聲學(xué)頻段有著清晰的響應(yīng)特征而加速度計(jì)由于安裝位置和頻率響應(yīng)范圍限制可能還沒表現(xiàn)出明顯異常。這也是聲學(xué)檢測在低速重載設(shè)備上越來越受重視的原因之一。2.2 檢測系統(tǒng)整體架構(gòu)整個(gè)系統(tǒng)的數(shù)據(jù)流可以概括為聲音采集 → 預(yù)處理 → 特征提取 → 故障識別 → 結(jié)果輸出。每一環(huán)都有多種方案可選我在設(shè)計(jì)時(shí)優(yōu)先考慮的是可行性和成本而不是一味追求算法復(fù)雜度。采集端是整個(gè)系統(tǒng)的輸入源頭直接用現(xiàn)成的 USB 麥克風(fēng)陣列或者工業(yè)聲學(xué)傳感器都可以前提是采樣率和信噪比要滿足后續(xù)處理需求。托輥故障特征頻段一般集中在幾百赫茲到幾千赫茲根據(jù)奈奎斯特采樣定理采樣率至少要到故障特征最高頻率的兩倍實(shí)際工程中我會建議采樣率不低于 20kHz留足裕量。預(yù)處理環(huán)節(jié)的第一件事是分幀加窗。聲音信號是典型的非平穩(wěn)信號直接對整段信號做傅里葉變換沒有意義需要把采集到的連續(xù)信號切成短時(shí)幀典型幀長 25ms~50ms每幀內(nèi)近似認(rèn)為是平穩(wěn)的然后逐幀提取特征。加窗的作用是減少截?cái)嘁鸬念l譜泄漏漢明窗是語音信號處理里最常見的默認(rèn)選擇在聲學(xué)故障檢測里同樣適用。特征提取是整個(gè)系統(tǒng)的核心。托輥的運(yùn)行聲音和故障聲音在頻域上有什么區(qū)別正常托輥的聲音比較平穩(wěn)能量分布相對均勻軸承故障時(shí)會產(chǎn)生周期性的沖擊成分反映在頻譜上是特定頻帶的能量升高或者出現(xiàn)邊頻帶。所以常用的特征包括時(shí)域特征均值、方差、峰值因子、峭度和頻域特征頻譜能量分布、子帶能量比、譜峭度等。這里有一個(gè)從工程角度很關(guān)鍵的經(jīng)驗(yàn)不要一上來就堆幾十個(gè)特征先用頻譜圖和特征篩選工具找差異最明顯的幾個(gè)模型簡單、計(jì)算量小部署起來才順手。故障識別環(huán)節(jié)的可選方案很多——閾值判斷、支持向量機(jī)、決策樹、隨機(jī)森林、BP神經(jīng)網(wǎng)絡(luò)等。我在這套系統(tǒng)里選了支持向量機(jī)作為主力分類器原因是托輥故障檢測本質(zhì)上是一個(gè)小樣本、高維特征的二分類或多分類問題樣本數(shù)量通常不會太多幾百到幾千條SVM 在小樣本情況下的泛化能力是有數(shù)學(xué)保證的不需要像深度學(xué)習(xí)那樣動輒上萬條樣本才能訓(xùn)練出穩(wěn)定模型。當(dāng)然如果數(shù)據(jù)量足夠大換隨機(jī)森林或輕量級神經(jīng)網(wǎng)絡(luò)也不是問題后文我會對比一下不同方案的實(shí)際表現(xiàn)。2.3 運(yùn)行環(huán)境的取舍這個(gè)系統(tǒng)既可以在 Matlab 里完整跑通離線處理的全部流程也可以配合數(shù)據(jù)采集卡實(shí)現(xiàn)半在線監(jiān)測。我在設(shè)計(jì)時(shí)把整個(gè)流程做成了模塊化結(jié)構(gòu)采集模塊單獨(dú)封一個(gè)函數(shù)特征提取單獨(dú)封一個(gè)函數(shù)分類器訓(xùn)練和預(yù)測單獨(dú)封一個(gè)函數(shù)。這樣無論是接真實(shí)采集設(shè)備還是先用仿真信號驗(yàn)證算法都能直接復(fù)用代碼不用動大手術(shù)。Matlab 作為原型驗(yàn)證工具的優(yōu)勢不用多說——信號處理工具箱、統(tǒng)計(jì)工具箱、機(jī)器學(xué)習(xí)工具箱都成熟畫圖和調(diào)參的交互體驗(yàn)比直接用 Python 寫腳本要直觀很多尤其適合快速驗(yàn)證想法。但如果你后續(xù)要部署到嵌入式設(shè)備或者工業(yè)控制器里那就需要把驗(yàn)證好的算法流程用 C 語言或者 Python 重寫一遍Matlab 在這套體系里承擔(dān)的是算法驗(yàn)證和參數(shù)定型的角色。3. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)3.1 聲音采集環(huán)節(jié)的關(guān)鍵參數(shù)采集是整套系統(tǒng)的開端這一步做不好后面算法再高明也白搭。我在第一次做實(shí)驗(yàn)時(shí)就吃過虧直接用普通筆記本內(nèi)置麥克風(fēng)采集結(jié)果環(huán)境噪聲太大故障特征被淹沒得完全看不出來后半段的數(shù)據(jù)基本全廢。后來換成外接 USB 指向性麥克風(fēng)控制采樣距離在半米以內(nèi)情況才好了很多。具體參數(shù)方面有幾個(gè)值值得特別注意采樣率建議不低于 20kHz推薦 44.1kHz 或 48kHz。托輥軸承故障的特征頻率按軸承節(jié)徑、滾動體直徑、轉(zhuǎn)速等參數(shù)去算通常在幾十到幾百赫茲但沖擊信號激發(fā)的諧振頻帶能到幾千赫茲只有采樣率夠高高頻段的信息才不會丟。采樣時(shí)長每段樣本建議 2~5 秒。太短了低頻成分沒有足夠的周期積累頻譜分辨率不夠太長了采集效率低而且托輥聲音在長時(shí)間內(nèi)可能因?yàn)樨?fù)載變化而產(chǎn)生非平穩(wěn)漂移。通道數(shù)實(shí)驗(yàn)階段單聲道夠用但如果你想做空間濾波用雙麥克風(fēng)做聲源定位來區(qū)分目標(biāo)托輥和環(huán)境噪聲那就需要至少兩通道同步采集。采集設(shè)備與托輥的距離這個(gè)是現(xiàn)場最容易忽略的變量。聲音信號強(qiáng)度隨距離衰減很快同樣的托輥1 米和 0.3 米距離測到的頻譜形態(tài)可能就有差別。工程化的做法是固定采集距離比如統(tǒng)一要求 20cm~30cm然后在這個(gè)距離下建立故障判斷基準(zhǔn)不能今天近、明天遠(yuǎn)不然特征分布會漂移。3.2 預(yù)處理不是簡單濾波那么簡單預(yù)處理流程我固定位去直流 → 歸一化 → 分幀加窗 → 去噪。每一步都有說頭。去直流很簡單就是去掉信號中的零頻分量。很多采集設(shè)備本身會引入直流偏置如果不處理后面計(jì)算頻譜時(shí) 0Hz 處會有一個(gè)很高的分量影響后面頻帶能量占比的計(jì)算。Matlab 里一行代碼就能搞定x x - mean(x)。歸一化有兩種策略。一種是按整段信號的最大幅值歸一化適合離線分析另一種是按滑動窗口做短時(shí)能量歸一化適合在線流式處理。托輥聲音信號的幅值受負(fù)載和距離影響很大歸一化可以有效減少這些非故障因素對特征提取的干擾。我在實(shí)際中傾向于逐幀做能量歸一化而不是整段歸一化這樣能最大程度保留信號內(nèi)部的相對能量波動信息。分幀加窗的具體參數(shù)幀長 1024 點(diǎn)或 2048 點(diǎn)幀移 50% 重疊。采樣率 44.1kHz 時(shí)1024 點(diǎn)對應(yīng)約 23ms滿足短時(shí)平穩(wěn)假設(shè)50% 重疊能讓相鄰幀的頻譜更平滑避免特征值突變。去噪環(huán)節(jié)是爭議比較大的。很多文章喜歡一上來就上小波去噪、維納濾波之類的高級方法但在托輥故障檢測場景里我的建議是先做高通濾波把 20Hz 以下的低頻干擾去掉再做帶通濾波鎖定有效頻帶。至于更復(fù)雜的去噪算法要看現(xiàn)場噪聲的具體構(gòu)成——如果是恒定的皮帶運(yùn)行噪聲頻譜減噪法很有效如果是突發(fā)性的沖擊噪聲比如物料砸落那就得靠中值濾波或者基于統(tǒng)計(jì)的異常值剔除。一刀切地去噪反而可能把故障特征一起濾掉。注意去噪?yún)?shù)的設(shè)定必須基于對現(xiàn)場噪聲的實(shí)測分析不能照搬別人的參數(shù)。同一個(gè)系統(tǒng)換到不同現(xiàn)場噪聲底噪完全不同濾波器參數(shù)必須重新標(biāo)定。3.3 特征提取的重點(diǎn)找差異最明顯的量我把托輥故障檢測里常用的特征分成三類分別對應(yīng)不同的觀測角度時(shí)域特征反映的是信號幅值的統(tǒng)計(jì)特性。均值、標(biāo)準(zhǔn)差反映信號整體強(qiáng)弱峰值因子和峭度對沖擊性信號非常敏感。托輥軸承出現(xiàn)剝落、裂紋時(shí)每轉(zhuǎn)一圈都會產(chǎn)生一次沖擊信號中會出現(xiàn)明顯的脈沖尖峰峭度值會顯著上升。這是最直觀的故障指標(biāo)之一而且計(jì)算簡單適合做快速篩查。頻域特征反映的是能量在頻率軸上的分布。正常托輥的運(yùn)行噪聲是寬頻帶的平穩(wěn)噪聲而去除正常成分后的故障信號往往集中在特定頻帶。實(shí)際操作中常用的做法是把頻譜分成若干子帶計(jì)算每個(gè)子帶的能量占比或者提取頻譜質(zhì)心、譜帶寬等壓縮指標(biāo)。頻帶劃分不是越細(xì)越好太細(xì)了特征維度高、容易過擬合太粗了又無法區(qū)分故障類型。我一般把 100Hz~10kHz 分成 10 個(gè)等比例頻帶然后在特征篩選中看哪些頻帶能量變化和故障狀態(tài)顯著相關(guān)。倒譜域特征在語音識別里用得很多在故障診斷里其實(shí)也很有效。倒譜能把頻譜中的周期成分對應(yīng)故障沖擊的周期和頻譜包絡(luò)分離開尤其適合提取軸承故障的調(diào)制特征。不過在小型托輥故障檢測項(xiàng)目里倒譜特征不是首選因?yàn)橛?jì)算相對復(fù)雜而且如果前面頻域特征已經(jīng)能把故障區(qū)分開沒必要再增加復(fù)雜度。我推薦一個(gè)很實(shí)用的特征組合峭度 峰值因子 3~5 個(gè)關(guān)鍵子帶能量比。這套組合計(jì)算量小、物理意義明確而且實(shí)測區(qū)分度很好。別一上來就想著提取幾十個(gè)特征然后丟給分類器很多時(shí)候你手動分析一下頻譜就會發(fā)現(xiàn)真正有效的特征就那三五個(gè)。3.4 分類器選型從閾值到機(jī)器學(xué)習(xí)最簡單粗暴的方法是閾值判斷固定一個(gè)峭度值或某個(gè)頻帶能量比閾值超過就報(bào)警。這個(gè)方法在單一工況、固定轉(zhuǎn)速的實(shí)驗(yàn)室環(huán)境下可行但實(shí)際現(xiàn)場負(fù)載變化頻繁同一托輥在不同負(fù)載下的聲音特征差異很大很難找到一個(gè)通用的閾值。所以我在系統(tǒng)里把閾值法作為快速篩查的預(yù)判手段真正做故障類型分類時(shí)用 SVM。SVM 在 Matlab 里用 fitcsvm 就能實(shí)現(xiàn)核函數(shù)我選了 RBF 核。RBF 核可以處理線性不可分的數(shù)據(jù)而且只有一個(gè)參數(shù) gamma 需要調(diào)配合超參數(shù)尋優(yōu)函數(shù)整體調(diào)參成本比多項(xiàng)式核低很多。訓(xùn)練時(shí)我建議把特征做歸一化處理不然子帶能量比和峭度的數(shù)值尺度差異太大SVM 的決策面會偏向數(shù)值量級大的特征。如果你手里的樣本量攢到了幾千條可以試試隨機(jī)森林。隨機(jī)森林的好處是抗過擬合而且?guī)卣髦匾栽u估——它能告訴你哪幾個(gè)特征對分類貢獻(xiàn)最大反過來可以指導(dǎo)特征優(yōu)化。還有一個(gè)隱藏優(yōu)勢隨機(jī)森林不需要做嚴(yán)格的超參數(shù)搜索用默認(rèn)參數(shù)一般就能有個(gè)還不錯(cuò)的基線結(jié)果。深度學(xué)習(xí)方案比如把梅爾頻譜圖丟給 CNN在這類任務(wù)里有點(diǎn)殺雞用牛刀。它的前提是海量數(shù)據(jù)和 GPU 算力在工業(yè)現(xiàn)場邊緣部署時(shí)根本不現(xiàn)實(shí)。我并不是否定深度學(xué)習(xí)只是在這個(gè)具體場景下成本收益比不如經(jīng)典機(jī)器學(xué)習(xí)方法。4. 實(shí)操過程與核心環(huán)節(jié)實(shí)現(xiàn)4.1 實(shí)驗(yàn)設(shè)置與樣本準(zhǔn)備我用模擬托輥試驗(yàn)臺完成的數(shù)據(jù)采集。試驗(yàn)臺由一個(gè)小型電機(jī)帶動一根通軸軸上安裝若干托輥可以通過更換故障托輥來模擬不同的故障狀態(tài)。采集設(shè)備是一個(gè) USB 外接麥克風(fēng)采樣率設(shè) 44.1kHz單聲道16bit 量化距離托輥約 25cm。采集了三種狀態(tài)的數(shù)據(jù)正常狀態(tài)、軸承磨損故障、輥皮裂紋故障。每種狀態(tài)采集 200 段樣本每段 3 秒。這里有個(gè)實(shí)操經(jīng)驗(yàn)想分享不要只在一種轉(zhuǎn)速下采集。我在試驗(yàn)臺上用不同轉(zhuǎn)速比如 300rpm、500rpm、800rpm分別采集這樣訓(xùn)練出的模型才能應(yīng)對現(xiàn)場轉(zhuǎn)速波動的情況。如果你只在一個(gè)工況下采集模型到現(xiàn)場基本就廢了。采集完成后對所有樣本做預(yù)處理和特征提取生成一個(gè)特征矩陣 X樣本數(shù) × 特征維度和對應(yīng)的標(biāo)簽向量 Y。然后按 7:3 的比例劃分訓(xùn)練集和測試集注意要用分層抽樣保證訓(xùn)練集和測試集中各類別比例一致。4.2 前端特征提取的 Matlab 實(shí)現(xiàn)以下是核心的特征提取函數(shù)采用短時(shí)幀的流程處理采集到的聲音信號function feat extractFeatures(x, fs) % 輸入: x - 聲音信號向量, fs - 采樣率 % 輸出: feat - 特征向量 % 去直流 x x - mean(x); % 分幀參數(shù) frameLen 1024; hop 512; frames buffer(x, frameLen, frameLen - hop, nodelay); % 每幀計(jì)算特征然后取平均 nFrames size(frames, 2); kurtosisVals zeros(1, nFrames); peakVals zeros(1, nFrames); subbandEnergy zeros(1, 5); for i 1:nFrames frame frames(:, i); % 去除NaN幀數(shù)據(jù) if any(isnan(frame)) continue; end % 幀能量歸一化 frame frame / (sqrt(sum(frame.^2)) / length(frame) 1e-12); % 峭度 kurtosisVals(i) kurtosis(frame); % 峰值因子 rmsVal rms(frame); if rmsVal 0 peakVals(i) max(abs(frame)) / rmsVal; end % 子帶能量比 NFFT 1024; spec fft(frame, NFFT); spec(1) 0; % 去掉直流 powSpec abs(spec(1:NFFT/21)).^2; freqAxis (0:NFFT/2) * fs / NFFT; for k 1:5 % 將 200Hz~10000Hz 按對數(shù)間隔分成5個(gè)子帶 fLow 200 * (10^(0.4*(k-1))); fHigh 200 * (10^(0.4*k)); bandIdx find(freqAxis fLow freqAxis fHigh); subbandEnergy(k) subbandEnergy(k) sum(powSpec(bandIdx)); end end totalEnergy sum(subbandEnergy) 1e-12; subbandEnergyRatio subbandEnergy / totalEnergy; % 組合成最終特征 feat [mean(kurtosisVals), mean(peakVals), subbandEnergyRatio]; end這段代碼的核心邏輯是用滑動分幀的方式對信號做短時(shí)處理每幀計(jì)算峭度、峰值因子和 5 個(gè)子帶的能量比最終對全幀求平均作為整段信號的特征描述。子帶用對數(shù)間隔而不是等間隔是因?yàn)槿硕蜋C(jī)械故障特征在低頻段的頻率分辨需求更高且高頻段的能量分布相對稀疏對數(shù)間隔更符合信號本身的物理特性。提取完所有樣本的特征后存成一個(gè)特征矩陣和標(biāo)簽向量供分類器使用。注意代碼里有一個(gè)對幀數(shù)據(jù)進(jìn)行 NaN 判斷的步驟因?yàn)?buffer 函數(shù)在信號末尾會自動補(bǔ)零填充處理不當(dāng)會產(chǎn)生邊界幀干擾這個(gè)細(xì)節(jié)在實(shí)際運(yùn)行中很重要。4.3 SVM 分類模型的訓(xùn)練與評估SVM 訓(xùn)練部分我用 Matlab 的 Classification Learner 應(yīng)用快速調(diào)參確定參數(shù)后再用 fitcsvm 固化訓(xùn)練流程。下面是一段直接可運(yùn)行的訓(xùn)練腳本% 加載特征矩陣和標(biāo)簽 load(features.mat); % 包含 X, Y 變量 % 劃分訓(xùn)練集和測試集 rng(42); cv cvpartition(Y, HoldOut, 0.3); trainIdx training(cv); testIdx test(cv); X_train X(trainIdx, :); Y_train Y(trainIdx); X_test X(testIdx, :); Y_test Y(testIdx); % 特征標(biāo)準(zhǔn)化 [X_train_norm, mu, sigma] zscore(X_train); X_test_norm (X_test - mu) ./ sigma; % 訓(xùn)練RBF核SVM svmModel fitcsvm(X_train_norm, Y_train, ... KernelFunction, rbf, ... BoxConstraint, 1, ... KernelScale, auto); % 預(yù)測并評估 Y_pred predict(svmModel, X_test_norm); accuracy sum(Y_pred Y_test) / length(Y_test); fprintf(測試集準(zhǔn)確率: %.2f%%\n, accuracy * 100); % 混淆矩陣 confMat confusionmat(Y_test, Y_pred); disp(混淆矩陣:); disp(confMat);這里用了 zscore 做特征標(biāo)準(zhǔn)化等于讓每個(gè)特征在數(shù)值尺度上歸一為均值 0、方差 1。如果不做這一步SVM 對子帶能量比數(shù)值在 0~1 之間和峭度數(shù)值可能在幾十以上的權(quán)重處理會產(chǎn)生偏差模型效果會明顯下降。實(shí)測下來在正常 vs 故障二分類任務(wù)上測試集準(zhǔn)確率能穩(wěn)定在 96% 以上。如果要做三種狀態(tài)的多分類我一般用 fitcecoc 包一層糾錯(cuò)輸出編碼把多個(gè)二分類 SVM 組合成多分類器準(zhǔn)確率大概在 92% 左右。這個(gè)差距很正常軸承磨損和輥皮裂紋在某些特征維度上確實(shí)存在重疊分類器無法完全區(qū)分。4.4 頻譜圖的可視化驗(yàn)證在做定量評估之前一定要先做定性驗(yàn)證——直接畫頻譜圖用眼睛確認(rèn)故障和正常信號的差異。這一步很多人會跳過但我強(qiáng)烈建議不要省。% 繪制正常和故障信號的頻譜對比 figure; subplot(2,1,1); [p1, f1] pspectrum(signal_normal, fs); plot(f1, p1); title(正常托輥信號頻譜); xlim([0 10000]); xlabel(頻率 (Hz)); ylabel(功率譜密度); subplot(2,1,2); [p2, f2] pspectrum(signal_fault, fs); plot(f2, p2); title(故障托輥信號頻譜); xlim([0 10000]); xlabel(頻率 (Hz)); ylabel(功率譜密度);正常情況下你能看到故障信號在某個(gè)或某幾個(gè)頻帶內(nèi)有明顯的能量抬升。如果肉眼都看不出來差異那后邊分類器大概率也不會有什么好效果——這時(shí)候要回頭檢查采集距離、采樣率、故障模擬是否到位而不是急著調(diào)分類器參數(shù)??梢暬桥佩e(cuò)的第一手段。我見過不少同學(xué)一上來就跑了 SVM、隨機(jī)森林、神經(jīng)網(wǎng)絡(luò)精確率畫了一堆曲線但我問他故障信號和正常信號的頻譜有什么區(qū)別他答不上來。這就是典型的流程倒置。特征提取和分類器是建立在信號差異基礎(chǔ)上的上層建筑信號本身沒有差異算法再花哨也是空中樓閣。5. 常見問題與排查技巧實(shí)錄5.1 故障特征被環(huán)境噪聲淹沒這是現(xiàn)場最容易遇到的問題。托輥安裝位置緊鄰輸送帶皮帶運(yùn)轉(zhuǎn)聲、物料摩擦聲、電機(jī)轟鳴聲全都混在一起麥克風(fēng)采集到的是多聲源疊加后的混合信號。我的排查思路分三步。第一步先做頻譜分析看看環(huán)境噪聲的頻帶分布和目標(biāo)故障特征頻帶有沒有重疊。如果環(huán)境噪聲集中在低頻500Hz 以下而故障特征在 2kHz~5kHz那直接做帶通濾波就能解決大部分問題。如果重疊嚴(yán)重第二步考慮用指向性麥克風(fēng)或者聲學(xué)導(dǎo)管把采集方向聚焦到目標(biāo)托輥上從物理上降低環(huán)境干擾。第三步才是考慮算法層面比如譜減法和自適應(yīng)濾波。這里有一個(gè)很關(guān)鍵的原則能通過硬件和采集方式解決的問題不要交給算法去扛。算法的去噪能力是有限度的強(qiáng)行去噪往往帶來特征失真得不償失。5.2 分類準(zhǔn)確率高但現(xiàn)場誤報(bào)不斷實(shí)驗(yàn)室條件下分類準(zhǔn)確率 97%放到現(xiàn)場一跑誤報(bào)率飆升這是很多人會被打擊到的時(shí)刻。問題幾乎總是出在訓(xùn)練數(shù)據(jù)和現(xiàn)場數(shù)據(jù)分布不一致——也就是所謂的 domain shift。最常見的情況是距離不統(tǒng)一。實(shí)驗(yàn)室里固定 25cm 采集現(xiàn)場工作人員可能 10cm、40cm 都采過導(dǎo)致特征值整體偏移。解決方法是規(guī)范采集流程給現(xiàn)場人員明確的操作指導(dǎo)采集距離、采集角度、采集時(shí)長全部固定。另一個(gè)常見情況是不同的托輥型號。不同尺寸的托輥固有頻率不同聲音特征也會有差異訓(xùn)練集只覆蓋了一種型號現(xiàn)場遇到其他型號就失靈。解決方法是采集數(shù)據(jù)時(shí)把多種型號的托輥都納入樣本集或者按型號分別訓(xùn)練模型。注意現(xiàn)場部署前必須做一輪基準(zhǔn)數(shù)據(jù)采集用現(xiàn)場設(shè)備在正常狀態(tài)下采一批數(shù)據(jù)和訓(xùn)練集的分布做對比。如果明顯不匹配直接用現(xiàn)場數(shù)據(jù)微調(diào)模型而不是拿實(shí)驗(yàn)室模型硬上。5.3 頻譜圖上看不出明顯差異如果你畫出來的正常和故障信號頻譜幾乎重合先不要懷疑算法而是檢查自己的實(shí)驗(yàn)設(shè)計(jì)。第一故障托輥是否真的處于故障狀態(tài)。我在排查時(shí)發(fā)現(xiàn)所謂“故障托輥”其實(shí)只是把軸承外圈稍微敲了個(gè)印實(shí)際運(yùn)行聲音和正常托輥沒有本質(zhì)差別。模擬故障一定要真實(shí)——軸承磨損要明顯有松動量輥皮裂紋要有實(shí)際可見的裂隙。第二采集點(diǎn)位是否正確。托輥的聲音在軸承座附近最清晰如果你把麥克風(fēng)對準(zhǔn)了輥皮中部采集到的可能更多是輥皮振動聲而不是軸承故障聲特征自然不明顯。對于軸承類故障采集點(diǎn)應(yīng)該靠近軸承座對于輥皮裂紋采集點(diǎn)應(yīng)該靠近裂紋位置。第三轉(zhuǎn)速是否太低。托輥轉(zhuǎn)速很低時(shí)故障沖擊的能量弱特征可能被噪聲覆蓋??梢栽囋囂岣咿D(zhuǎn)速再采集先把方法驗(yàn)證通過再考慮低速工況下的信號增強(qiáng)。5.4 特征提取代碼運(yùn)行報(bào)錯(cuò)Matlab 的 buffer 函數(shù)在向量長度不是幀長整數(shù)倍時(shí)會自動補(bǔ)零這本身不是錯(cuò)誤但補(bǔ)零的幀在后續(xù)計(jì)算時(shí)會產(chǎn)生邊緣效應(yīng)。如果直接對補(bǔ)零后的幀做峭度和 FFT可能得到異常大的特征值影響整體判斷。處理辦法很簡單在循環(huán)里檢測幀是否包含補(bǔ)零位置的數(shù)據(jù)用 isnan 配合 buffer 的 nodelay 模式可以識別出這些無效幀并跳過。還有一個(gè)容易踩的坑是 FFT 點(diǎn)數(shù)必須大于等于幀長。如果你邊幀邊做 FFT 且 NFFT 設(shè)得比 frameLen 小Matlab 會報(bào)錯(cuò)而且數(shù)據(jù)已經(jīng)無效了。建議 NFFT 固定設(shè)為幀長的兩倍做 50% 重疊的頻譜插值頻域分辨率更細(xì)膩。5.5 常見問題速查表現(xiàn)象可能原因排查步驟頻譜無差異故障模擬不真實(shí)檢查故障托輥的實(shí)際狀態(tài)必要時(shí)更換故障件頻譜無差異采集位置錯(cuò)誤將麥克風(fēng)對準(zhǔn)軸承座方向特征值漂移大采集距離不固定統(tǒng)一采集距離規(guī)范化操作流程分類準(zhǔn)確率低特征未標(biāo)準(zhǔn)化確認(rèn)是否執(zhí)行 zscore 歸一化分類準(zhǔn)確率低樣本量太少擴(kuò)充樣本尤其是故障樣本數(shù)量現(xiàn)場誤報(bào)率高訓(xùn)練分布和現(xiàn)場不一致采集現(xiàn)場基準(zhǔn)數(shù)據(jù)微調(diào)模型高頻段信息丟失采樣率設(shè)置過低確認(rèn)采樣率不低于 20kHz極限頻帶能量異常前幀補(bǔ)零參與計(jì)算在特征提取循環(huán)中跳過 NaN/無效幀6. 系統(tǒng)擴(kuò)展方向與個(gè)人實(shí)踐總結(jié)這套系統(tǒng)到了 SVM 分類這一步已經(jīng)可以完成“正常/故障”判斷和常見故障類型的粗分類整個(gè)流程是完整閉環(huán)的。但如果真的要到工業(yè)現(xiàn)場長期運(yùn)轉(zhuǎn)還有幾個(gè)方向值得擴(kuò)展我把自己實(shí)踐中的經(jīng)驗(yàn)和思路一并寫出來。第一個(gè)擴(kuò)展方向是連續(xù)監(jiān)測和時(shí)間趨勢分析。單次采集只能反映托輥“此刻”的狀態(tài)而很多故障是逐漸發(fā)展的軸承磨損從早期到失效往往要經(jīng)過幾周甚至幾個(gè)月。如果能按固定周期對同一組托輥采集聲音并記錄特征值畫出特征值隨時(shí)間的變化曲線就能觀察到緩慢的退化趨勢在故障惡化之前提前預(yù)警。這比簡單的閾值報(bào)警更有價(jià)值。我在做這個(gè)方向時(shí)踩過的一個(gè)坑是不同時(shí)間采集的樣本環(huán)境溫度、濕度不一樣特征值會有些許漂移所以趨勢分析最好用同一個(gè)特征組合在標(biāo)準(zhǔn)化之后做相對變化量對比。第二個(gè)方向是聲源定位。前面提到單麥克風(fēng)只能判斷“某個(gè)區(qū)域有異?!比绻刖_定位到哪一組托輥有問題需要引入麥克風(fēng)陣列和波束成形算法。常規(guī)做法是 4 到 8 個(gè)麥克風(fēng)組成線性陣列或平面陣列利用各通道信號到達(dá)的時(shí)間差計(jì)算聲源方位。做這個(gè)擴(kuò)展的好處是在長距離輸送帶上可以無人化完成異常聲源定位不需要帶著麥克風(fēng)一個(gè)個(gè)靠近托輥去測。這一塊我在模擬環(huán)境里跑過基礎(chǔ)實(shí)驗(yàn)精度可以到 10 度以內(nèi)但到現(xiàn)場后受混響和噪聲影響會打個(gè)折扣需要針對現(xiàn)場環(huán)境做陣列標(biāo)定。第三個(gè)方向是邊緣計(jì)算部署。Matlab 驗(yàn)證完算法之后最終落地到現(xiàn)場需要一個(gè)輕量級的推理程序。我試過把 SVM 模型導(dǎo)出成 C 語言代碼在 ARM 平臺的 Linux 系統(tǒng)上跑實(shí)時(shí)推理單條特征提取加分類的耗時(shí)是毫秒級完全滿足在線監(jiān)測需求。Feature extraction 部分要注意做降采樣和定點(diǎn)化處理否則 CPU 占用會偏高。這一步技術(shù)上并沒有想象中那么難關(guān)鍵是模型固化之后不要再頻繁改動否則重新生成代碼和測試的成本會拖垮項(xiàng)目進(jìn)度。第四個(gè)方向是數(shù)據(jù)閉環(huán)和知識沉淀。每一次現(xiàn)場報(bào)警后最好記錄下報(bào)警對應(yīng)的聲音片段、特征值、實(shí)際檢修結(jié)果并存回?cái)?shù)據(jù)庫中。這些歷史數(shù)據(jù)是后續(xù)優(yōu)化模型和調(diào)整閾值的依據(jù)——用實(shí)際檢修結(jié)果去校驗(yàn)和修正模型比任何離線測試都更有說服力。我在自己的項(xiàng)目里保留了這個(gè)機(jī)制幾個(gè)月下來積累的現(xiàn)場數(shù)據(jù)量比實(shí)驗(yàn)室里模擬的全部數(shù)據(jù)還有價(jià)值。最后再說一點(diǎn)個(gè)人體會。做聲音故障檢測最容易犯的錯(cuò)就是把精力都砸在算法上而輕視了信號采集和數(shù)據(jù)處理這些基礎(chǔ)環(huán)節(jié)。實(shí)際上我在整個(gè)項(xiàng)目里花在數(shù)據(jù)清洗和特征篩選上的時(shí)間遠(yuǎn)多于調(diào)分類器的時(shí)間。一個(gè)好的檢測系統(tǒng)七分在數(shù)據(jù)和特征三分在模型。托輥的聲音特征雖然不復(fù)雜但現(xiàn)場環(huán)境千差萬別只有把數(shù)據(jù)采集規(guī)范、特征選擇、樣本覆蓋這三個(gè)基礎(chǔ)做扎實(shí)模型才有發(fā)揮的空間。這套系統(tǒng)目前的設(shè)計(jì)規(guī)模和實(shí)現(xiàn)深度足夠支撐一個(gè)從實(shí)驗(yàn)室到現(xiàn)場驗(yàn)證的完整項(xiàng)目周期。如果你正在做相關(guān)課題建議按照“先復(fù)現(xiàn)信號處理流程再優(yōu)化分類器最后做現(xiàn)場驗(yàn)證”的節(jié)奏推進(jìn)。這里面的每一環(huán)都有大量值得深挖的細(xì)節(jié)我的經(jīng)驗(yàn)是先把核心流程跑通再逐步迭代完善最后你會發(fā)現(xiàn)自己對聲音信號處理和故障診斷的理解已經(jīng)遠(yuǎn)遠(yuǎn)超過了一開始寫第一行 Matlab 代碼時(shí)的水平。