
故障诊断之基于振动信号的阶比谱分析
- 前言- 一、阶次分析是什么- 二、阶次分析的基本原理- 三、基于加拿大渥太华数据进行分析-
前言
想写这个帖子很久了,网上关于变速故障诊断的博客,最早应该是发布在我写的一篇知乎的帖子上,里面是基于加拿大渥太华数据进行分析处理的,很好地提取到了轴承的故障特征。后面陆续被一些二道博客贩子,各种加工,拿我的代码和一些截图,随便发了一些水贴,害,也是挺无语的,就想问问他们,到底有没有真正搞懂阶次分析啊?另外就是,之前在CSDN上下载了很多这种代码,看了一下根本没什么太大用处,居然还是收费的,真心不应该为这种“知识付费”,所以后面我会把CSDN上的代码全部免费帖出来,这种东西还要付费,也是够了。
一、阶次分析是什么
在实际工业生产设备工作时,旋转机械很可能不会以恒定转速持续运行,或者存在比较大的转速波动,电机升降速或者调速过程中转速也会处于时刻变化的动态状态。当转速变化时,转动频率也会随之发生变化,轴承、齿轮等故障的特征频率也会随之发生相应变化,此时利用稳态下的FFT分析方法得到的频谱就是无效的,或者如果转速在某一区间内频繁往复波动,在FFT频谱图中就会造成频率重叠甚至难以有效辨识的结果。在信号处理方法的发展历程中,为了克服变转速旋转机械故障诊断中常规FFT等方法失效的问题,学者们开发出阶比分析法,也叫阶比跟踪法。
在旋转和往复式机械中,载荷的变动和运动部件的缺陷会引起振动,并相应的辐射噪声。振动的形态与机械运动及静止部件的结构特性有关。阶次分析是一个将频谱及时间历程与旋转部件的RPM关联起来的工具,揭示振动与噪声机理。频谱分析是一种传统的振动信号分析方法,只适用于稳态信号的分析处理。在升、降速过程中,其主要频率成分受发动机转速的影响而不断发生变化,采用传统的频谱方法进行分析时,会产生明显的频率混叠现象。阶次分析是一种有效的非稳态信号分析方法,采用阶次分析法,可以在变转速条件下,有效地提取出轴承、齿轮的故障特征阶次,这是一种很好的办法。二、阶次分析的基本原理
阶次分析方法源于角域采样理论。对于升、降速过程中的非稳态噪声信号,若相对于旋转轴进行恒角度增量采样,则该时域非稳态信号在角度域是稳态信号,再对角度域稳态信号进行FFT变换则可以得到清晰的图谱,即阶次谱。阶次分析的关键是如何实现噪声信号的等角度采样,等角度采样又称阶次采样或阶次追踪。阶次采样时,采样的触发间隔为发动机每转过一定的角度的时间间隔。精确的阶次分析要求对噪声信号进行等角度采样,即采样率的调整要与发动机转速的变化一致,从而保证在发动机转动周期内的采样点数是恒定的。下图所示为阶次采样的实现过程。阶次采样包含两个采样过程。第一个过程是等时间间隔采样过程,在这个过程中,对原始的噪声信号和转速脉冲信号分两路以恒定的采样率进行等时间间隔采样,得到同步采样信号。阶次分析时,为提高采样精度,其等时间间隔采样一般采用过采样技术,即以远远高于奈奎斯特(Nyquist)采样频率的频率对信号进行采样,并辅以适当的数字滤波器,以达到比原AD转换器更高的采样精度。第二个过程是插值重采样过程,其过程是根据转速脉冲序列进行转速估计,然后利用此估计转速计算等角度采样发生的时刻序列,在等角度采样时刻附近的时间区间内对同步采样的原始噪声信号进行插值重采样,从而得到阶次分析所需的角度域稳态信号。
三、基于加拿大渥太华数据进行分析
1.数据下载链接:
加拿大渥太华数据下载
提取码:2l9q2.数据说明
时变转速条件下的轴承振动数据,数据包含在时变转速条件下从不同健康状况的轴承收集的振动信号。共有36个数据集。对于每个数据集,有两个实验设置:轴承健康状况和变速状况。轴承的健康状况包括(i)健康,(ii)有内圈缺陷的故障,以及(iii)有外圈缺陷的故障。工作转速条件是(i)增加速度,(ii)减少速度,(iii)增加然后减少速度,以及(iv)减少然后增加速度。因此,有12种不同的设置情况。为了确保数据的真实性,每个实验设置收集了3个试验,总共得出36个数据集。每个数据集包含两个通道:“ Channel_1” 是加速度计测得的振动数据,“ Channel_2”是编码器测得的转速数据。所有这些数据均以200,000Hz采样,采样持续时间为10秒。
更多详细的数据说明请参考:
故障诊断之基于振动信号的阶比谱分析四、变速的故障信号仿真模拟
五、MATLAB代码分析:
%=========================================== % 更多视频教程:B站关注:诊断之家 % 微信公众号:滚动轴承故障诊断与寿命预测 % Made by 轴承哥, % QQ:571485322, 微信:ForwardTszs %============================================ clc,clear %读取数据 load('I-A-1.mat'); fs = 200000; array_time_amp_thief=Channel_1(fs*01:fs*10); %导入时域振动信号 pluse=Channel_2(fs*01:fs*10); %导入脉冲信号 time= 0:1/fs:10-1/fs; %采集时间为10s f0 = 12.5; f1 = 27.8; subplot(3,1,1) plot(time,array_time_amp_thief), title('变转速数据'), xlabel('时间(s)'), ylabel('幅值Amplitude'); grid on; subplot(3,1,2) plot(time,pluse), title('转速脉冲'), xlabel('时间(s)'), ylabel('幅值Amplitude'); rpm = tachorpm(pluse,fs)/1000; subplot(3,1,3) plot(time,rpm) xlabel('时间(s)'), ylabel('转速(r/min)')
以内圈故障为例分析:
以外圈故障为例分析:
六、相关代码
function sw = checksw % CHECKSW Check if running MATLAB or GNU/Octave % sw = checksw % % sw 'MATLAB' or 'OCTAVE' depending on what software checksw is % called from. 0 is returned if neither MATLAB or Octave was % found (unexpected). % % Copyright (c) 2009-2011 by Anders Brandt % Email: abra@iti.sdu.dk % Version: 1.0 2011-06-23 % This file is part of ABRAVIBE Toolbox for NVA v=ver; sw=0; for n = 1:length(v) Name=v(n).Name; if strcmp(upper(Name),'MATLAB') sw='MATLAB'; elseif strcmp(upper(Name),'OCTAVE') sw='OCTAVE'; end end
function [array_angle_amp,array_angle]=cotm2(Vib_data,Key_signal,Num_key_circle,Fs,threshold,ratio,Re_order) %输入 % Vib_data ----- 时域振动信号 % Key_signal ----- 键相信号 % Num_key_circle-----键相轴的键相数目 % Fs------------采样频率 % threshold------键相截取门限值 % ratio--------角度域重采样故障阶次与键相所在轴阶次比,例如故障阶次为0.5,键相所在轴阶次为1,则ratio = 0.5 % Re_order-------角度域重采样阶数,整数 %输出 % array_angle_amp ---- 角度域振动信号 % array_angle ---- 角度域振动信号对应角度(弧度) %% 在和丹的阶比程序[hd_cot2.m]的基础上验证和修改 % Wang XF, 20170916 % 计算键相所在点位, Num_Key_signal=1; for ij=1:length(Key_signal)-1 if Key_signal(ij)<=threshold && Key_signal(ij1)>=threshold Num_Key_signal = [Num_Key_signal,ij]; %脉冲计数,记录所采集键相数据脉冲所在位置 end end % Num_Key_signal Num_Key_signal(1) = []; %删除第一个点 if length(Num_Key_signal)<2 disp('键相信号有误') return; end Key_time = (Num_Key_signal-1)./Fs; %脉冲出现时刻数组 angle_Key_signal = (0:(length(Key_time)-1)).*2*pi*ratio/Num_key_circle; %轴累计旋转角度(弧度) figure plot(Key_time, angle_Key_signal) title('时间-角度') xlabel('时间/s') ylabel('角度/rad') %% 需要考虑抗混叠滤波问题,否则有混叠风险,程序尚未添加 % %---------数字跟踪滤波---------% % for i = 2:length(Key_time) % ft=1/(Key_time(i)-Key_time(i-1)); % 转频 % [b,a]=butter(6,ft*order_max/(Fs/2),'low'); % 滤波器系数 % Vib_data(Num_Key_signal(i-1):(Num_Key_signal(i)-1))=filter(b,a,Vib_data(Num_Key_signal(i-1):(Num_Key_signal(i)-1))); % end %------平滑Key_time,angle_Key_signal曲线,并对其插值------% % t = (0:(length(Vib_data)-1))/Fs; %原始数据采样点对应时刻 t = (Num_Key_signal(1)-1:(Num_Key_signal(end)-1))/Fs; %原始数据采样点对应时刻 % angle = spline(Key_time,angle_Key_signal,t); %原始数据采样时刻点对应转角,弧度,三次样条插值 angle = interp1(Key_time,angle_Key_signal,t); %原始数据采样时刻点对应转角,弧度,一次样条插值 % figure % plot(t, angle); %---------将时间域原始(加速度)曲线转换为角度域曲线---------% delt_thet = 2*pi/Re_order; %设定重采样角度间隔,弧度 array_angle = angle(1):delt_thet:angle(end-1); %插值的等角度域 % array_angle_amp = spline(angle,Vib_data,array_angle);%三次样条插值 array_angle_amp = interp1(angle,Vib_data(Num_Key_signal(1):(Num_Key_signal(end))),array_angle);%一次样条插值 % array_angle_amp = interp1(angle,Vib_data(t(1)*Fs:(t(end))*Fs),array_angle);%一次样条插值 array_angle = array_angle-array_angle(1); end
function[omega,accfdat,proxfdat,static]=ordtrack(fsamp,keyfsamp,keytdat,acctdat,proxtdat,no_cycles,limits) % ORDTRACK Order tracking % [OMEGA,ACCFDAT,PROXFDAT,STATIC]=ORDTRACK(FSAMP,KEYFSAMP,KEYTDAT,... % ACCTDAT,PROXTDAT,NO_CYCLES,LIMITS); % returns OMEGA, the running speed in rad/s, ACCFDAT and PROXFDAT, % the tracked accelerometer and proximitor data and STATIC, the % static proximitor data given: % FSAMP, KEYFSAMP - data and keyphasor sampling rates (Hz) % KEYTDAT - keyphasor time data % ACCTDAT,PROXTDAT - accelerometer and proximitor time data % NO_CYCLES - no of cycles over which to average data (default 8). The higher % the number, the smoother the data (but also the more information % is lost.) % LIMITS - [f1,f2], the speeds (in Hz) over which the tracking is % to be done (default all data); [pulses,spd,time]=shaftspd(keytdat,keyfsamp); if ~exist('no_cycles') no_cycles=[]; end if isempty(no_cycles) no_cycles=8; end p=fix(pulses/(keyfsamp/fsamp)); % index of pulses in data channels l=max([size(acctdat,1) size(proxtdat,1)]); time=(0:l-1)'/fsamp; if ~exist('limits') limits=[]; end if isempty(limits) x(1)=time(1); x(2)=time(end); else x(1)=limits(1); x(2)=limits(2); end x=sort(x); time_at_pulses=pulses/fsamp; [val,x(1)]=min(abs(time_at_pulses-x(1))); [val,x(2)]=min(abs(time_at_pulses-x(2))); l1=pulses(x(1)); l2=pulses(x(2)); ll1=fix(l1/(keyfsamp/fsamp)); ll2=fix(l2/(keyfsamp/fsamp)); pp=polyfit(time_at_pulses(x(1):x(2)),spd(x(1):x(2)),2); fitspd=polyval(pp,time(ll1:ll2)); fitspd_pulses=p(x(1):x(2))-p(x(1))1; if ~exist('no_cycles') disp('Finding pulses for frequency spacing'); [si,ei]=freqspac(fitspd_pulses,fitspd,64,0,res); else si=fitspd_pulses(1:no_cycles:length(fitspd_pulses)-no_cycles); ei=fitspd_pulses(no_cycles1:no_cycles:length(fitspd_pulses)); end accfdat=[]; proxfdat=[]; static=[]; if ~isempty(proxtdat) proxfdat=zeros(length(si),size(proxtdat,2)); for ii=1:size(proxtdat,2) [freqdat,omega,st]=sinefit(proxtdat(ll1:ll2),time(ll1:ll2),fitspd,si,ei); proxfdat(:,ii)=freqdat; static(:,ii)=st; end end if ~isempty(acctdat); accfdat=zeros(length(si),size(acctdat,2)); for ii=1:size(acctdat,2) % chno=acc_channels(ii); [freqdat,omega]=sinefit(acctdat(ll1:ll2),time(ll1:ll2),fitspd,si,ei); accfdat(:,ii)=freqdat; end end
function [rpm,t] = tacho2rpm(x,fs,TLevel,Slope,PPR,NewFs,FilterL) % TACHO2RPM Extract rpm/time profile from tacho time signal % [rpm,trpm] = tacho2rpm(x,fs,TLevel,Slope,PPR) % % rpm Instanteneous rpm % t Time axis for rpm % % x Tacho time signal % fs Sampling frequency (in Hz) for x % TLevel Trigger level % Slope 1, or -1 for positive and negative slope, respectively % PPR Number of pulses per revolution for tacho signal % NewFs (optional) sampling frequency for rpm. Default is fs % FilterL Length of smoothing filter, Default is 5 pulses % % See also % % Copyright (c) 2009-2011 by Anders Brandt % Email: abra@iti.sdu.dk % Version: 1.0 2011-06-23 % 1.1 2012-01-15 Modified to work in Octave % This file is part of ABRAVIBE Toolbox for NVA % Parse inputs if nargin == 5 NewFs = fs; FilterL=5; elseif nargin == 6 FilterL=5; elseif nargin < 7 error('Wrong number of input parameters') end % Define time axis for tacho signal t=makexaxis(x,1/fs); % Get trigger times xDiff=diff(sign(x-TLevel)); % Produces /- 2 where trigger event tDiff=t(2:end); % Diff shifts one sample if Slope > 0 tTacho=tDiff(find(xDiff == 2)); % Tacho trigger positive slope instances else tTacho=tDiff(find(xDiff == -2)); % Tacho trigger negative slope instances end % Calculate rpm from time between tacho pulses. Assign rpm to second tacho % pulse of each pair rpmt=60/PPR./diff(tTacho); % Instantaneous rpm values % Average each pair of rpm estimates and put on time of middle tacho pulse rpmt=0.5*(rpmt(1:end-1)rpmt(2:end)); tTacho=(tTacho(2:end-1)); % diff shifted one sample % Smooth to obtain more stable values if FilterL > 1 a=1; b=1/FilterL*ones(1,FilterL); if strcmp(checksw,'MATLAB') rpmt=filtfilt(b,a,rpmt); else % Octave filtfilt does not work rpmt=filter(b,a,rpmt); end end % Interpolate to NewFs resolution t=(0:1/NewFs:t(end))'; rpm=interp1(tTacho,rpmt,t,'linear','extrap');
参考文献
[1] Shufeng Ai. Research on Order Tracking and Teager-Huang Transform Based Gear Crack Fault Diagnosis[C]. 2011 Second International Conference on Mechanic Automation and Control Engineering, Hohhot, 2011: 6041-6044.
[2] Z. Xiaofeng, S. Haibo and S. Wenli. An Implementation Method for the Transmission Fault Diagnosis Based on Order Tracking[C]. 2012 IEEE International Conference on Computer Science and Automation Engineering (CSAE), Zhangjiajie, 2012: 312-315.
[3] J. Hong, W. Guangrui, Z. Xiangfeng, et al. Application of Spectral Kurtosis and Vold-Kalman Filter Based Order Tracking in Wind Turbine Gearbox Fault Diagnosis[C]. 2017 9th International Conference on Modelling, Identification and Control (ICMIC), Kunming, 2017: 49-53.
原文链接:https://blog.csdn.net/weixin_39458727/article/details/125022990
[推荐] 一种基于CNN的数据驱动故障诊断方法
2021-12-09 14:46:03
互联网
1564
分类:算法开发
专栏:故障诊断
[推荐] 基于深度学习的滚动轴承故障诊断
2021-12-10 18:15:00
互联网
883
分类:算法开发
专栏:故障诊断
[推荐] 故障诊断期刊文献分析
2021-12-13 17:11:53
互联网
2717
分类:算法开发
专栏:故障诊断
进群
让志同道合读者学习交流

故障诊断技术体系阐述
1.引言 智能故障诊断(IFD)是指将机器学习理论,如人工神经网络(ANN)、支持向量机(SVM)和深度神经网络(DNN)应用于机器故障诊断。这种方法利用机器学习理论,从采集的数据中自适应地学习机器的诊断知识,而不是利用工程师的经验和知识。具体而言,IFD需要构建一个诊断模型,该模型能够自动将收集的数据与机器的健康状态之间的关系连接起来。 机器学习的早期研究可追溯到1950年,1980年左右成为了人工智能的一个重要方向,并于2010年开始得到了广泛的应用。在此期间发明了许多传统理论,如AN...
2021-12-09 11:31:41
互联网
979
分类:算法开发
专栏:故障诊断
智能故障诊断方法总结
1.故障诊断方法可分为三个步骤:信号处理、特征提取、模式分类。2.信号处理方法通常包括:时域处理(提取振动信号的相关指标);频域处理(包络谱分析,频谱分析);时频域分析(小波分析,傅里叶变换)3.故障诊断方法:专家系统故障诊断法,模糊故障诊断、灰色关联度故障诊断、神经网络故障诊断、数据融合故障诊断。...
2021-12-09 11:32:32
互联网
1467
分类:算法开发
专栏:故障诊断
一篇关于轴承故障诊断的综述
在设备的故障检测中,有约30%-40%的设备故障是由轴承故障引起的,因此本文将列举有关检测轴承故障使用到的相关数据集,模型和算法。数据集现有的数据集,普遍由固定在电机马达上的两个震动检测器获得,并根据需要,分离震动数据在时域和频域上的特征以供网络模型学习。不同的数据集,区别在于,检测的马达转速不同,环境不同,取样频率不同,一段样本的时长不同等等(1)Case Western Reserve University (CWRU) Dataset该数据集拥有多种数据,测量的时候,通过改变轴承.
2021-12-13 13:17:35
互联网
2397
分类:算法开发
专栏:故障诊断
故障诊断的性能评估指标
评价一个故障诊断系统的性能指标有: 1)故障检测的及时性:是指系统在发生故障后,故障诊断系统在最短时间内检测到故障的能力。故障发生到被检测出的时间越短说明故障检测的及时性越好。 2)早期检测的灵敏度:是指故障诊断系统对微小故障信号的检测能力。故障诊断系统能检测到的故障信号越小说明其早期检测的灵敏度越高。 3)故障的误报率和漏报率:误报指系统没有出去故障却被错误检测出发生故障
2021-12-13 13:51:37
互联网
1670
分类:算法开发
专栏:故障诊断
旋转机械故障诊断学基础知识
1. 机械故障诊断涉及哪些学科?做哪方面的科学研究?包含了哪些技术?形成了哪些方法?解决什么工程问题?(1) 涉及的学科有:机械、力学、电子、计算机、信号处理、人工智能等。(2) 机械故障诊断是研究机器或机组运行状态的变化在诊断信息中的反映,因此包括信号获取与传感技术、故障机理与征兆联系、信号处理与特征提取、识别分类与智能决策等方面的研究,根据基础和关键科学问题又可细分为机械系统运行状态下故障动态演化机理、机械系统动态信号处理的内积匹配原理与微弱信号特征增强机制、故障定量识别和剩余寿命预测原理、
2021-12-13 14:30:26
互联网
1602
分类:算法开发
专栏:故障诊断
机械故障诊断方法论
1. 故障诊断概念故障诊断主要研究如何对系统中出现的故障进行检测、分离和辨识 , 即判断故障是否发生 , 定位故障发生的部位和种类 , 以及确定故障的大小和发生的时间等 。2. 故障诊断方法故障诊断防范可分为定性分析和定量分析两大类 , 如图 1 所示。 其中 , 定量分析方法又分为基于解析模型的方法和数据驱动的方法 , 后者又进一步包括机器学习类方法、多元统计分析类方法、信号处理类方...
2021-12-13 14:48:01
互联网
1735
分类:算法开发
专栏:故障诊断
旋转设备故障诊断轴心轨迹分析
轴心位置分析: 1、轻微不对中,轴心轨迹则呈椭圆形; 2、在不对中方向上加一个中等负载,轴心轨迹变为香蕉形; 3、严重不对中故障会使转子的轴心轨迹图呈现外“8”字形,这种具有8字形的轴心轨迹,一般表现为二倍频或四倍频的成分较大。 4、轴心轨迹呈“8”字型,是典型的不对中故障所致。最大的可能是2号轴承附近的发电机与同
2021-12-13 17:31:46
互联网
1782
分类:算法开发
专栏:故障诊断
基于Python的频谱泄露分析
1、频谱泄露 对于频率为fs的正弦序列,它的频谱应该只是在fs处有离散谱。但是,在利用DFT求它的频谱时,对时域做了截断,结果使信号的频谱不只是在fs处有离散谱,而是在以fs为中心的频带范围内都有谱线出现,它们可以理解为是从fs频率上“泄漏”出去的,这种现象称 为频谱“泄漏”。2、代码分析如果我们波形不能在fft_size个取样中形成整数个周期的话会怎样呢?将上篇博客中的采样对象...
2021-12-14 14:06:09
互联网
620
分类:算法开发
专栏:数字信号处理
频谱分析幅值单位_知否知否?常用振动诊断方法——包络分析和阶次分析
包络分析对于各个行业,尤其是水泥行业,存在很多低转速设备。低转速部件引起的振动集中在低频部分,且往往较为微弱,容易淹没在其他信号中,在频谱中不容易分辨出故障信号与噪声信号。但这种故障引起的冲击信号往往会激起高频固有频率,在频谱上表现为出现共振带,即低频故障信号作为某高频载波的边频出现。因此,对于这种出现调制现象的故障信号,往往需要通过包络进行分析诊断。图1 包络解调机理解调前需要对信号进行滤波处理...
2021-12-14 23:01:12
互联网
833
分类:算法开发
专栏:振动信号预处理
语音信号的数据分析
数据集和代码均已上传到Github中,欢迎大家下载使用。Github地址:https://github.com/JasonZhang156/Sound-Recognition-Tutorial如果这个教程对您有所帮助,请不吝贡献您的小星星Q^Q.数据分析本节针对ESC-10数据集进行基本的数据分析,包括数据样本数,数据类别数,每类声音样本数等信息。并且对每类样本的声音波形,功率谱进...
2022-03-23 22:57:45
互联网
476
分类:算法开发
专栏:语音信号预处理