简介:这份资源面向机械工程、设备维护与信号处理方向的学习者和研究人员,围绕凯斯西储大学轴承数据,提供轴承故障特征频率计算的MATLAB实现,帮助读者从振动信号中识别滚动体、内圈、外圈等故障对应的特征频率,解决故障诊断中理论公式与代码落地脱节的问题。压缩包共3个文件,包含1个m脚本和2个png图片,整体约91KB,脚本用于特征频率计算与频谱分析,图片则给出深沟球轴承结构及计算截图,便于对照理解参数含义。目前已有4135人学习下载,说明其在轴承故障诊断入门与课程实践中具有一定参考价值。读者可借助代码复现基本旋转频率、滚动体通过频率等计算流程,结合步骤分析讲解掌握数据预处理、频谱绘制与故障判断思路,适合作为机械故障诊断、信号处理课程设计或课题研究的实操素材。
1. 轴承故障特征频率:为什么你的包络谱总是对不上号
做过旋转机械诊断的人多半有过这种经历:拿一段凯斯西储大学(CWRU)的驱动端加速度数据,FFT 一看,转频及其倍频清清楚楚,可一旦想找内圈、外圈的故障特征频率,谱线要么淹没在噪声里,要么算出来的位置和理论值差了一截。问题往往不在数据,而在“特征频率到底怎么算、算出来之后怎么在谱上认”。这个标题指向的正是这件事:用 MATLAB 把轴承的几何参数转成理论故障频率,再把它和实测包络谱对齐。它解决的是“知道有故障,但说不清是哪个部件、哪一阶”的问题,适合手里有振动数据、想从频谱里读出物理含义的设备诊断工程师和做状态监测的学生。核心不是写多复杂的代码,而是把几何—频率—谱线这条链路走通,让每一次峰值都能落到具体部件上。
2. 从几何参数到特征频率:四个公式和它们的物理含义
2.1 轴承特征频率的推导逻辑
滚动轴承的故障特征频率来自滚动体与滚道的相对运动。设节径为 $D$,滚动体直径为 $d$,接触角为 $\alpha$,滚动体个数为 $Z$,轴转频为 $f_r$。外圈固定、内圈随轴旋转时,四个最常用的频率是:
- 外圈故障频率 BPFO:$\frac{Z}{2} f_r \left(1 - \frac{d}{D}\cos\alpha\right)$
- 内圈故障频率 BPFI:$\frac{Z}{2} f_r \left(1 + \frac{d}{D}\cos\alpha\right)$
- 滚动体故障频率 BSF:$\frac{D}{2d} f_r \left[1 - \left(\frac{d}{D}\cos\alpha\right)^2\right]$
- 保持架频率 FTF:$\frac{1}{2} f_r \left(1 - \frac{d}{D}\cos\alpha\right)$
这几个式子不是背下来的,而是从“滚动体经过一个缺陷点的时间间隔”推出来的。外圈有缺陷时,每个滚动体经过缺陷都会产生一次冲击,所以频率是滚动体公转频率乘以个数;内圈有缺陷时,缺陷随内圈转动,冲击频率还要叠加内圈自身的旋转。理解这一点,后面看谱线时才知道为什么 BPFI 附近常出现转频边带,而 BPFO 的边带通常不明显。
2.2 用 MATLAB 把公式写成可复用函数
直接在主脚本里写死数字,换一个轴承就要改一遍,容易出错。我一般会写一个独立函数,把几何参数和转频作为输入,返回四个频率。下面这段代码可以直接存成bearing_freq.m:
function [BPFO, BPFI, BSF, FTF] = bearing_freq(D, d, Z, alpha_deg, fr) % D 节径 (mm) % d 滚动体直径 (mm) % Z 滚动体个数 % alpha_deg 接触角 (度) % fr 轴转频 (Hz) alpha = deg2rad(alpha_deg); % 角度转弧度 ratio = (d / D) * cos(alpha); % 中间量,反复用到 BPFO = (Z / 2) * fr * (1 - ratio); BPFI = (Z / 2) * fr * (1 + ratio); BSF = (D / (2 * d)) * fr * (1 - ratio^2); FTF = 0.5 * fr * (1 - ratio); end逻辑说明:ratio是四个公式共有的无量纲量,单独提出来既减少重复计算,也方便检查是否超过 1。接触角用角度输入更符合工程习惯,函数内部转弧度。参数说明:节径和滚动体直径单位要一致,用毫米即可,因为比值无量纲;转频由转速除以 60 得到,例如 1750 rpm 对应约 29.17 Hz。如果轴承资料给的是接触角弧度,把deg2rad去掉即可。
2.3 一个可复现的算例与结果核对
以某型深沟球轴承为例,节径 39.04 mm,滚动体直径 7.94 mm,滚动体个数 9,接触角 0 度,轴转频 29.17 Hz。调用上面的函数:
D = 39.04; d = 7.94; Z = 9; alpha = 0; fr = 1750 / 60; [BPFO, BPFI, BSF, FTF] = bearing_freq(D, d, Z, alpha, fr); fprintf('BPFO=%.2f Hz\nBPFI=%.2f Hz\nBSF=%.2f Hz\nFTF=%.2f Hz\n', ... BPFO, BPFI, BSF, FTF);运行后大致得到 BPFO 约 104.6 Hz,BPFI 约 157.9 Hz,BSF 约 68.9 Hz,FTF 约 11.6 Hz。这几个数字要记下来,后面做包络谱时就是拿它们去对峰。注意 BSF 的公式里有一个平方项,当 $d/D$ 较大时结果对参数很敏感,所以滚动体直径的测量误差会明显影响 BSF 的定位,这也是实际诊断中 BSF 最难对上的原因之一。
3. 用 MATLAB 做包络谱:把故障频率从噪声里捞出来
3.1 为什么直接 FFT 不够,要先做包络
轴承故障产生的冲击是高频衰减振荡,直接对原始信号做 FFT,能量集中在几千赫兹的共振频带,故障特征频率本身反而很弱。包络分析的思路是:先带通滤波保留共振频带,再取包络,最后对包络做低通或直接 FFT,这样故障频率就搬到低频段,容易识别。常见做法是 Hilbert 变换取包络,也可以用平方解调。我一般先用谱峭度或经验选一个带通范围,再进包络。
3.2 完整包络谱脚本与参数设置
下面这段脚本假设你已经把 CWRU 的驱动端数据读成变量x,采样率fs已知(常见为 12000 Hz 或 48000 Hz)。代码里带通范围需要根据你的数据调整,这里给一个示例值:
fs = 12000; % 采样率,按实际数据改 x = x - mean(x); % 去直流 bp = [2000 4000]; % 带通范围,围绕共振频带选 % 带通滤波 [b, a] = butter(4, bp / (fs / 2), 'bandpass'); xf = filtfilt(b, a, x); % 零相位滤波,避免相位失真 % Hilbert 包络 env = abs(hilbert(xf)); env = env - mean(env); % 去直流,否则零频会很高 % 包络谱 N = length(env); Y = abs(fft(env)) / N; f = (0:N-1) * (fs / N); half = 1:floor(N/2); plot(f(half), Y(half)); xlabel('频率 (Hz)'); ylabel('幅值'); xlim([0 500]); % 故障频率一般在低频段 grid on;逻辑说明:filtfilt做双向滤波,相位不失真,对包络提取很关键;hilbert返回解析信号,取模得到包络;去均值是为了压掉零频分量,否则谱图第一个点会盖住一切。参数说明:带通范围bp不能拍脑袋,可以先对原始信号做 FFT 看共振峰在哪,再把范围卡在峰两侧;滤波器阶数 4 是折中,太高会振铃,太低阻带衰减不够。xlim先看 0 到 500 Hz,因为常见轴承故障频率都在这个区间,确认有峰后再放大。
3.3 把理论频率叠到包络谱上做比对
算出 BPFO、BPFI 之后,最直观的验证方式是在包络谱上画竖线。下面几行接在上面的脚本后面:
hold on; for k = 1:5 xline(k * BPFO, 'r--'); % 外圈及其谐波 xline(k * BPFI, 'b--'); % 内圈及其谐波 end legend('包络谱', 'BPFO 谐波', 'BPFI 谐波'); hold off;如果外圈故障,你会看到 BPFO 及其 2 倍、3 倍处有峰;内圈故障则在 BPFI 两侧出现间隔为转频的边带。这一步是“认谱”的核心,理论值只是参考,实际峰值可能因为滑移偏几个百分点,允许 1% 到 2% 的偏差。若偏差超过 5%,先检查转频是否算错,再检查轴承型号参数是否对得上。
4. 避坑与排查:五个让特征频率对不上的常见原因
4.1 转频算错,后面全错
现象:所有特征频率整体偏移,比例大致相同。原因:把转速 rpm 直接当 Hz 用,或者用了电机同步转速而不是实际转速。解决:转频 = 实测转速 / 60,没有转速计时可从谱图上的转频峰反推,确认后再代入公式。
4.2 带通范围选在噪声区
现象:包络谱一片模糊,看不到明显峰值。原因:带通范围没有覆盖共振频带,或者范围太宽把噪声也放进来。解决:先看原始信号 FFT,找能量最高的共振峰,把带通卡在峰两侧约 ±500 Hz;如果共振峰不明显,用谱峭度图辅助选带。
4.3 滤波器相位失真导致包络变形
现象:包络谱出现很多不明谐波,和理论频率对不上。原因:用了filter而不是filtfilt,相位延迟让包络形状改变。解决:包络提取前一律用零相位滤波,filtfilt是标配。
4.4 轴承几何参数抄错或单位不统一
现象:BPFI 和 BPFO 的比值异常,比如内圈频率反而比外圈低。原因:节径和滚动体直径一个用毫米一个用英寸,或者滚动体个数抄错。解决:所有长度单位统一,接触角确认是度还是弧度,算完先检查 BPFI 是否大于 BPFO,正常情况内圈频率更高。
4.5 滑移导致峰值偏移,误判为无故障
现象:理论频率处没有峰,但附近几十赫兹有峰。原因:滚动体存在滑移,实际冲击间隔比理论值略长,频率偏低。解决:在理论值 ±2% 范围内搜索峰值,不要死盯一个点;如果偏移稳定,可反推实际滑移率,但不必强行修正公式。
5. 进阶技巧:用包络谱的谐波结构区分内外圈故障
5.1 看边带而不是只看主峰
外圈故障时,冲击位置相对传感器固定,包络谱上 BPFO 及其谐波干净利落,边带很少。内圈故障时,缺陷随内圈转动,与传感器距离周期性变化,BPFI 两侧会出现间隔为转频的边带。这个差别比主峰幅值更可靠。实操中我会把包络谱在 BPFI 附近放大,看有没有BPFI ± fr的峰,有就是内圈,没有再看 BPFO。
5.2 用倒谱做二次确认
倒谱能把谐波族压缩成一根线,适合确认故障频率的基频。下面这段代码接在包络谱之后:
cep = real(ifft(log(abs(fft(env)) + eps))); q = (0:N-1) / fs; plot(q(1:floor(N/2)), cep(1:floor(N/2))); xlabel('倒频率 (s)'); ylabel('幅值'); xlim([0 0.1]); grid on;逻辑说明:log前加eps防止零值取对数出错;倒谱横轴是时间,故障频率的倒数处会出现峰。参数说明:xlim取 0 到 0.1 秒,对应 10 Hz 以上频率,覆盖常见故障频率。如果倒谱在 1/BPFO 处有峰,基本可以确认外圈。
5.3 一个我常犯的错误
早期我总想把所有峰值都解释成故障频率,结果把转频谐波、齿轮啮合频率也硬套进去,越看越乱。后来养成习惯:先确认转频和它的谐波,把它们从候选列表里划掉,再在剩下的峰里找 BPFO、BPFI。这个顺序能省掉大量返工。另外,CWRU 数据里不同负载和转速对应不同文件,用之前一定核对转速,别拿 1730 rpm 的参数去算 1750 rpm 的数据。希望帮到你。
本文还有配套的精品资源,点击获取