一种基于分类的旋转机械故障诊断频段选择的新方法研究(Matlab代码实现)

基于分类的故障频段选择方法

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

💥1 概述

旋转机械故障诊断中的频带选择(FBS)旨在识别频带位置,包括全频带外的故障瞬变,因此故障诊断可以抑制来自其他频率分量的噪声影响。冲动性和循环平稳性最近被认为是瞬态的两个独特特征。因此,许多研究都集中在开发两种特征的量化指标上,并将它们用作指导FBS的指标。然而,大多数以前的研究几乎忽略了FBS的另一个方面,即健康参考,这显着影响FBS的性能。为了解决这个问题,本文调查了鲁棒参考的重要性,并将其视为FBS的第三个关键方面。借助健康参考,
可以定位故障瞬变存在的频段。提出了一种基于分类的新方法,将FBS的所有三个方面(冲动性、循环平稳性和健康参考)整合在一起。分类精度被开发为一种新的指标,用于选择最敏感的频段进行旋转机械故障诊断。所提出的方法(由accugram创造)已在基准和实验数据集上得到验证。比较结果表明,与传统包络分析、库尔图和信息图相比,其有效性和鲁棒性性。

基于分类的旋转机械故障诊断频段选择新方法研究

一、传统频段选择方法及其局限性
  1. 频谱分析与频段划分基础
    传统方法将滚动轴承振动信号分为三个关键频段:

    • 低频段(<1kHz) :包含故障特征频率,但易受机械结构干扰和电源噪声影响,早期故障信噪比低。
    • 中频段(1-20kHz) :对应外圈固有振动频率,适合损伤类故障检测。
    • 高频段(20-80kHz) :冲击能量集中区,需包络分析提取周期性冲击信号。
      特征频率的理论计算与实际存在偏差,需依赖专家经验进行频谱匹配。
  2. 传统信号处理技术的瓶颈

    • 时频分析方法(如Wigner-Ville分布、短时傅里叶变换)虽能处理非平稳信号,但存在交叉项干扰和分辨率矛盾问题。
    • 包络分析对噪声敏感,尤其在早期故障阶段难以有效提取微弱冲击。
    • 经验模态分解(EMD) 易产生模态混叠,改进的集成经验模态分解(EEMD)仍存在非本质模态函数问题。
二、基于分类的频段选择新方法框架
  1. 核心思想与创新点
    将频段选择问题转化为分类任务,通过机器学习模型自动识别包含故障信息的“有效频段”,解决传统方法依赖专家经验和固定频段划分的局限性。其技术路线包括:

    • 特征提取:结合时域(均值、峰值)、频域(FFT能量分布)、时频域(同步压缩小波变换)多维特征。
    • 分类器训练:利用健康与故障状态样本训练分类模型(如SVM、ANN),以分类精度作为频段敏感性评价指标。
    • 频段优化:通过粒子群优化(PSO)或遗传算法动态调整频带中心频率和带宽。
  2. 关键技术实现

    • 自适应频带分割:采用层次化频带划分策略(如小波包分解),结合冲动性、循环平稳性特征增强故障瞬变信号。
    • 健康参考机制:引入健康状态样本作为负类数据,提升模型对背景噪声的鲁棒性。
    • 多模态特征融合:融合振动信号、红外热成像等多源数据,通过卷积神经网络(CNN)实现端到端特征学习。
三、典型应用案例与性能验证
  1. 案例1:基于ACCUGRAM的频段定位
    Liu等人提出的方法在Case Western Reserve University数据集上验证,通过整合冲动性、循环平稳性和健康参考特征,分类精度较传统包络分析提升15%-20%。实验显示,0.007英寸内圈缺陷在4-8kHz频段表现出最高敏感性。

  2. 案例2:多分类器集成学习
    清华大学团队采用随机森林算法,结合时域特征(峰度、方差)和频域能量分布,在行星齿轮箱故障诊断中实现100%分类准确率。对比单一SVM模型,误判率降低30%。

  3. 案例3:深度迁移学习应用
    使用1D-CNN模型对非平稳转速信号进行重采样处理,通过迁移学习将实验室数据适配工业场景,在风力发电机轴承故障诊断中跨域准确率达92%。

四、未来研究方向
  1. 非平稳信号处理优化
    针对时变转速条件,发展广义解调与深度学习的混合模型,将时频图转化为速度无关的二维特征图。

  2. 小样本学习策略
    结合生成对抗网络(GAN)合成故障数据,解决工业场景中故障样本稀缺问题。

  3. 可解释性增强
    采用梯度加权类激活映射(Grad-CAM)可视化分类器决策依据,提升工程师对AI模型的信任度。

  4. 边缘计算部署
    开发轻量化模型(如MobileNet变体),实现振动信号的实时频段选择与故障诊断,延迟<50ms。


总结

基于分类的频段选择方法通过数据驱动策略,显著提升了旋转机械故障诊断的自动化水平和早期缺陷检测能力。未来,结合物理机理模型与深度学习框架的混合智能系统,有望进一步突破复杂工况下的诊断瓶颈。

📚2 运行结果

 

 部分代码:

% Inputs:
% [1] x         : [healthy; test]
% [2] xLabel    : 2-by-1 vector, where 0 = healthy; 1 = test
% [3] N         : the number of segments
% [4] overlap   : overlap for two neighbor segments
% [5] Fs        : sampling frequency
% [6] nlevel    : the number of level
% [7] isPLot    : 1 = accugram plot; otherwise, 0.
%
% Outputs:
% [1] fc        : center frequency
% [2] bw        : bandwidth
% [3] level     : level index
% [4] acc       : classificaiton accuracy
% [5] accMatrix : all values in an accugram
%
% References:
% [1] Zhiliang Liu, Yaqiang Jin, Ming J. Zuo, and Dandan Peng. ACCUGRAM: a machine learning approach to frequency band selection for rotating machinery fault diagnosis. ISA Transactions, Submitted May 18, 2018, Under Review.

if nargin ~= 7 error('nargin does not match!'); end

[xSegment,label] = slidingSegmentation(x,xLabel,N,overlap);

% Freqeuncy band partition
% m = size(xSegment,1);
m = 2*N; % number of samples for accuracy representation
lev = 2.^[0:nlevel];
temp = [3*lev(2)/2 3*lev(2:end-2);lev(3:end)];
lev = [lev(1) lev(2) temp(:)']; % number of bands in each level
row = length(lev); % row number of accugram
col = 3*2^nlevel; % column number of accugram

accMatrix = zeros(row,col); % accugram matrix
bandNum = sum(lev); % number of frequency band candidates
xMatrix = zeros(bandNum,2*m); % feature matrix for each band candidate, 2 means two features

for i = 1:m
    iMatrix = featureExtraction(xSegment(i,:),nlevel);% feature extraction for the ith frequency band
    xMatrix(:,(i-1)*2+1:2*i) = iMatrix;
end

% n = size(xMatrix,1);

acc = zeros(1,bandNum);

for i = 1:bandNum
    temp = (reshape(xMatrix(i,:),size(iMatrix,2),m))';
    acc(i) = getAccuracy(temp,label); % compute classification accuracy for the ith frequency band
end

index = 0;

for i = 1:row % row number of accugram
    iRate = acc((index+1):(index+lev(i)));
    temp = repmat(iRate,col/lev(i),1);
    accMatrix(i,:) = reshape(temp,1,col);
    index = index+lev(i);
end

num = log2(lev);
Ntick = length(num);
freq = Fs/2*(0:3*2^nlevel-1)/(3*2^(nlevel));
% freq_stft = Fs*(0:Nfft(end)/2-1)/Nfft(end);
[I,J,M] = max_IJ(accMatrix);
bw = Fs/2/lev(max(I));  % compute bandwidth
numfre = col/lev(max(I)); % 录脝脣茫脙驴赂枚麓酶驴铆脣霉脮录碌脛赂帽脢媒?
% sum(lev(1:max(I)-1))+length(J)/numfre;
dist = zeros(1,length(J)/numfre);
for i = 1:length(dist)
    temp = sum(lev(1:max(I)-1))+ J(i*numfre)/numfre;
    target = xMatrix(temp,:);
    target = reshape(target,size(iMatrix,2),m);
    dist(i) = sum(mean(target,2).^2);
    %             fc(i)=(temp-1)*bw+bw/2; % compute center frequency
end
[a,b] = max(dist); % a represent the maximum dist and b represent the location.
fc = ( J(b*numfre)/numfre-1)*bw+bw/2;

if isPlot
    figure
    imagesc(freq,1:Ntick,accMatrix),colorbar
    xlabel('frequency [Hz]'),set(gca,'ytick',1:Ntick,'yticklabel',round(num*10)/10),ylabel('level: log2(lev)')
    title(['Accu_{max}=',num2str(M),' @ level ',num2str(round(10*num(max(I)))/10),', Bw= ',num2str(bw),'Hz, f_c=',num2str(fc),'Hz, Dist=',num2str(a)])
end

acc = M;
level = round(10*num(max(I)))/10;
Find_wav_accugram(x(2,:),nlevel,level,fc,M,Fs);

end

function acc = getAccuracy(x,label)

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Zhiliang Liu, Yaqiang Jin, Ming J. Zuo, and Dandan Peng. ACCUGRAM: a novel approach based on classification to frequency band selection for rotating machinery fault diagnosis. ISA Transactions, Available online 15 May 2019.

🌈4 Matlab代码实现

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值