news 2026/10/16 18:50:13

MATLAB轴承故障特征频率计算与包络谱对齐实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MATLAB轴承故障特征频率计算与包络谱对齐实战

简介:这份资源面向机械工程、设备维护与信号处理方向的学习者和研究人员,围绕凯斯西储大学轴承数据,提供轴承故障特征频率计算的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 的数据。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 18:49:04

北京交通大学计算机考研复试:八门课交叉命题深度解析

简介:本资源是面向北京交通大学计算机专业考研学子的复试/面试专项备考资料,聚焦交通物流与教育考试场景,系统梳理八门核心课程(含计算机网络、操作系统、计算机体系结构等)的高频问答题及参考答案,助力考生…

作者头像 李华
网站建设 2026/10/16 18:43:37

Linux集群分发脚本:基于rsync的生产级xsync命令实现

1. 项目概述:为什么一个分发脚本值得花一整天重写?“xsync”这个命令听起来像某个商业发行版自带的工具,但其实它压根不是Linux原生命令——它是无数运维和大数据工程师在集群环境下亲手“造出来”的一个符号,一个把重复劳动按在键…

作者头像 李华
网站建设 2026/10/16 18:42:51

MiniCPM5-2B-8bit思考模式实战:用enable_thinking开启Chain of Thought

【免费下载链接】MiniCPM5-2B-8bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/MiniCPM5-2B-8bit 点击查看 免费下载 MiniCPM5-2B-8bit 是 MiniCPM5-2B 端侧推理模型的 8-bit 量化 MLX 版本,运行在 Apple Silicon 设备上,内…

作者头像 李华
网站建设 2026/10/16 18:42:22

阿里云CSB专有云服务治理:跨域主权移交与四层权限模型

简介:本资源是阿里云专有云企业版V3.7.1官方发布的《云服务总线CSB用户指南》PDF文档,面向企业级私有云/混合云架构师、中间件运维工程师及服务治理开发者,聚焦解决跨环境服务集成、统一服务注册发现、安全路由与全生命周期管理等核心问题。文…

作者头像 李华
网站建设 2026/10/16 18:35:08

手写单目BA:VIO后端优化核心算法与舒尔补实现

在写完 VIO 前端、搞定 IMU 预积分和对齐之后,我一直觉得自己的系统里少了一块“定海神针”——后端优化。前端给出来的位姿和路标点就像刚出锅的菜,看着行,但噪声大、漂移明显,必须放到 BA(Bundle Adjustment&#xf…

作者头像 李华