ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

全息谱Matlab实现:从FFT相位到转子故障轨迹诊断

全息谱Matlab实现:从FFT相位到转子故障轨迹诊断 简介原创经典全息谱Matlab源程序聚焦旋转机械故障诊断中的全息诊断holospectrum方法由西安交大已故屈梁生院士提出具有鲜明的学术渊源与工程背景。资源面向机械故障诊断、信号处理方向的研究者与高年级本科生既能用于理解全息谱原理也能支撑科研复现与毕业设计实验。压缩包共39个文件包含10个dv、10个dh原始数据文件7个m脚本以及dv1、dh1、dh2等衍生数据文件整体约58KB体积小巧、便于下载。目前已有868人学习。程序以holo2D.m、holo3D.m为核心可绘制二维/三维全息谱配合hanning_window.m等辅助工具和多种故障工况数据可对照观察不对中、裂纹、转子松动、动静碰摩等典型故障特征完整复现从数据读取到谱图输出的分析流程另附使用帮助和论坛链接适合Matlab基础用户快速上手或二次开发。 做旋转机械故障诊断的朋友对“全息谱”这个词应该不陌生。它的核心思想并不玄学把传统FFT谱里丢失的相位信息捡回来用二维轨迹图把转子在1倍频、2倍频等高次谐波下的振动形态完整画出来。互相垂直的两个位移传感器一旦幅值和相位都对齐转子轴心在空间里的运动轨迹就是一个个椭圆。这套“原创经典全息谱Matlab源程序-全息诊断.rar”正是按这个思路实现的源代码包适合设备诊断工程师、故障机理研究方向的研究生以及想深入理解“频谱相位轨迹”的振动分析爱好者。它能直接帮你从时域波形和FFT谱出发算出并画出全息谱再根据图谱形态快速判读不平衡、不对中、碰摩这类典型故障。1. 全息谱到底是什么从一维频谱到二维轨迹1.1 传统频谱分析的最大短板是“丢了相位”传统频谱分析用FFT把时域振动信号变到频域得到幅值谱和相位谱。大部分人在实际使用中只看幅值谱相位谱基本不看。问题恰恰出在这里只看幅值谱你只知道这一倍频上“振得多大”却不知道转子在这个频率下“往哪个方向振”。举个例子同样是不平衡故障传感器安装角度不同、键相位置不同幅值谱可能完全一样但转子的实际涡动方向可能一个是正进动一个是反进动。这两种状态对应的故障性质完全不一样但幅值谱根本区分不出来。全息谱解决的就是这个问题通过引入互相垂直方向信号之间的相位关系把“振动大小”和“振动方向”统一到一张图里。1.2 把幅值、频率、相位“焊”在一起全息谱的基本原理是在转子同一截面上互相垂直的两个方向各安装一个位移传感器通常X方向和Y方向同步采集两组振动信号。对这两组信号分别做FFT在同一个倍频分量上都能得到一组幅值和相位。把这两个方向同频分量的幅值、相位放在一起可以唯一确定一个椭圆——椭圆的长轴、短轴、偏转方向和进动方向反映了转子在该频率下的空间运动轨迹。把1倍频、2倍频、3倍频等多个谐波分量对应的椭圆画在同一张图上就是二维全息谱。如果再加入转速变量也就是把不同转速下的全息谱按转速顺序排列就成了三维全息谱也叫全息瀑布图。这套源程序实现的以二维全息谱为核心正好是经典、最常用、也最容易上手理解的形式。这里要提醒一个概念混淆很多人把全息谱和轴心轨迹搞混。轴心轨迹是时域里转子轴心运动的实时轨迹是原始波形直接画出来的里面包含了所有频率成分全息谱里每个椭圆都只是某一个谐波分量的“纯轨迹”已经过滤掉了其它频率成分。可以理解为全息谱是轴心轨迹的“分频加工版”每个椭圆都有明确的物理含义比一锅炖的轴心轨迹更容易定量分析。2. 这套源程序做了什么从信号读入到图谱输出2.1 功能模块整体拆解我把这套程序从头看了一遍结构很经典整体链路完整主要包含四个模块模块输入输出说明数据预处理双通道时域波形、转速整周期截取后的信号去除直流分量、按转频截取整周期频谱分析预处理后的X/Y信号各倍频幅值、相位用FFT提取1X、2X、3X等分量的参数椭圆合成与绘图幅值相位参数全息谱图按椭圆参数方程逐倍频绘制轨迹诊断输出全息谱图、参数表故障倾向判断根据椭圆形态和倍频占比给出提示这个结构不花哨但链路完整。我见过不少源码包要么只有绘图代码没有数据预处理要么预处理写死在某一次采集里换一批数据就跑不通。这套程序做得比较好的地方是把整周期截取和FFT参数计算都留成了可配置项转频、采样率、传感器灵敏度都能在开头统一设置换数据时不用改核心函数对二次开发很友好。2.2 哪些人最适合拿它当起点如果你是做设备振动监测的工程师现场用便携式测振仪或在线系统采集到了波形数据以前只能看看总振值和频谱峰值现在可以把数据导进Matlab跑一遍全息谱从二维轨迹的形态去判断故障性质这会比单看频谱多一个维度的信息。如果你是故障诊断方向的硕士、博士这个程序很适合作为算法基线。拿到手之后可以改造成三维全息谱、全息瀑布图或者接入自己的故障数据集做特征提取省掉重复造轮子的时间。如果你只是对信号处理感兴趣想搞明白“幅值谱相位谱”怎么变成一张二维轨迹图这套代码同样是一个很棒的入门案例。代码量不大核心逻辑集中在离散傅里叶变换和椭圆参数方程上啃下来之后对频谱分析的底层理解会上一个台阶。3. 全息谱实现的关键细节与参数选择3.1 数据准备阶段被低估的“整周期截取”很多人在实际运行全息谱时发现图谱乱糟糟根本原因往往不是FFT算错了而是数据截取没做对。全息谱对相位精度要求比普通频谱高得多如果截取的数据长度不是转频周期的整数倍FFT结果会产生频谱泄漏相位误差可能达到几十度画出来的椭圆形状直接失真。所以程序的第一个关键步骤是根据输入转速rpm计算转频frrpm/60再计算每个转频周期对应的采样点数Npfs/fr然后从信号中截取整数倍周期。比如采样率5120Hz转速1200rpm转频20Hz每个周期256个点那就截取256的整数倍点数比如1024点或2048点。这样可以保证FFT谱线正好落在整数倍频上减少泄漏。核心代码一般是这样fr rpm / 60; Np round(fs / fr); % 每个转频周期点数 N Np * 8; % 取8个整周期 seg signal(1:N);注意这里N要尽量取得长一些参与FFT的点数越多频率分辨率越高相位估计越稳定。整周期数一般取8到16个比较合适太少了椭圆参数受噪声影响大太多了计算量大且窗口内转速可能有漂移。3.2 核心绘图逻辑一个倍频分量对应一个椭圆全息谱的绘制逻辑并不复杂在Matlab里完全可以用基础函数实现。核心思路是对X通道和Y通道的FFT结果分别在目标倍频处取出幅值和相位然后用椭圆参数方程绘制轨迹。我给一个简化版的核心函数逻辑和经典全息谱一致function holo_spectrum(x, y, fs, rpm, harm) % x: 水平方向振动位移信号 % y: 垂直方向振动位移信号 % fs: 采样率 % rpm: 转速 % harm: 要绘制的倍频数如 [1 2 3] fr rpm / 60; N length(x); X fft(x) / N * 2; Y fft(y) / N * 2; f (0:N-1) * fs / N; figure; hold on; for k harm idx round(k * fr * N / fs) 1; ax abs(X(idx)); px angle(X(idx)); ay abs(Y(idx)); py angle(Y(idx)); t linspace(0, 2*pi, 200); ex ax * cos(t px); ey ay * cos(t py); plot(ex, ey, LineWidth, 1.5); text(ax*0.05, ay*0.05, sprintf(%dX, k)); end axis equal; grid on; xlabel(水平方向位移 / um); ylabel(垂直方向位移 / um); end这个函数里最关键的是X和Y两个方向的相位差px-py。当两个互相垂直的同频简谐运动相位差为0时轨迹是一条直线相位差为90度时轨迹是正椭圆其它相位差对应斜椭圆。这个规律和物理光学里的偏振光非常像完全可以类比理解。需要特别强调一点这里画的坐标是位移量不是无量纲值。画图前要把传感器标定系数乘进去否则椭圆长短轴和实际物理幅值对不上写报告的时候也会很尴尬。3.3 从椭圆参数到故障形态判读全息谱画出来不是用来看好看的而是用来做诊断。我习惯先看三点1倍频椭圆的幅值大小这是不平衡的主要指标。2倍频椭圆与1倍频椭圆的幅值比例比例明显升高的时候优先怀疑不对中。整个谱图里是否出现大量高倍频椭圆异常丰富的高倍频往往和碰摩、松动相关。转速固定时正常转子的1X椭圆应该是稳定、干净、长轴方向固定的。一旦长轴方向发生漂移说明转子受力方向在变化可能和热弯曲、转子裂纹有关。这些判读经验需要配合现场数据慢慢积累程序本身只负责把轨迹画准诊断结论还是得靠人去下。4. 实操演示用仿真信号跑一遍经典全息诊断流程4.1 构造一组“不平衡不对中”的仿真数据没有实验台的时候可以用仿真信号来验证程序和熟悉流程。下面这段代码生成一组模拟转子振动信号1倍频分量模拟不平衡2倍频叠加一定幅值模拟不对中特征采样率5120Hz转速1200rpm对应转频20Hz。fs 5120; t 0:1/fs:2; % 2秒信号 rpm 1200; fr rpm / 60; % 1倍频幅值40umX通道初相位100度 x1 40 * cos(2*pi*fr*t 100*pi/180); % 2倍频幅值12umX通道初相位30度 x2 12 * cos(4*pi*fr*t 30*pi/180); % 竖直方向Y通道按相位差构造 y1 30 * cos(2*pi*fr*t 40*pi/180); y2 5 * cos(4*pi*fr*t 30*pi/180); x x1 x2 0.8*randn(size(t)); y y1 y2 0.8*randn(size(t));跑一遍前面写的holo_spectrum(x, y, fs, rpm, [1 2])能看到1X椭圆明显大于2X椭圆且2X椭圆短轴较小、长轴方向与坐标轴有一定夹角。这个结果对应典型的不平衡主导、叠加轻微不对中的全息谱特征。4.2 常见故障状态下的全息谱形态对照我在实测和仿真中接触到的几类常见故障整理成表格方便对照故障类型全息谱特征判读要点转子不平衡1X椭圆占绝对主导椭圆较圆、方向稳定振幅随转速变化明显临界转速附近1X增大不对中2X椭圆明显常呈斜椭圆2X/1X幅值比升高联轴器侧振动大轴向振动同步增大动静碰摩高倍频椭圆丰富轨迹出现内凹或小环频谱出现丰富高次谐波波形有削顶现象转子裂纹2X分量随转子位置变化轨迹不对称升降速过程中2X椭圆幅值波动油膜涡动出现0.5X附近分量轨迹复杂多发生在高速轻载轴承低频分量突出这张表只能作为参考。实际故障往往是复合的比如不平衡叠加不对中这时候全息谱的优势就体现出来了多个椭圆同时呈现各自的幅值和方向都有独立信息比单看总振值或单看频谱峰值更能区分主次。5. 常见问题与排查技巧实录5.1 相位基准不一致导致椭圆方向全乱我自己第一次跑全息谱时犯过这个错X方向和Y方向传感器用的是不同采集通道两个通道的采样启动时间没对齐或者键相脉冲方向接反结果所有椭圆的进动方向全部反转诊断结论完全是反的。解决方法是在正式采集前做一次传感器通道一致性测试把同一个信号同时输入两个通道确认采集到的相位差为0。现场做不了测试的情况下至少要记录传感器安装方向和键相脉冲的触发方向在程序里预留一个相位校正量。相位这个东西差一点点画出来的椭圆方向就完全变了。5.2 键相脉冲缺失时的替代方案有些便携采集仪没有键相通道只有振动信号这时候严格意义上的全息谱无法计算因为缺少转频初始相位基准。我在实际处理中用的替代方案是从振动信号自身估计转频比如对1X附近频带做带通滤波再用希尔伯特变换提取瞬时相位把这个相位作为键相参考。这个办法对稳态工况有效但转速波动大的时候误差会明显上升。如果只是做故障机理研究仿真数据没有键相问题如果是现场数据建议尽量使用带键相的采集系统不要在基准信号上凑合。5.3 转速不稳时图谱发糊全息谱的前提是转频稳定。如果转速波动超过1%左右FFT得到的倍频谱峰会变宽幅值和相位估计都会被拉偏画出来的椭圆会“发糊”长轴方向不稳定。这种情况下有两种处理思路一种是角域重采样也就是阶比跟踪按每转等角度采样把信号转成角域再做分析这样倍频分量在角域里是严格的周期成分。另一种是短时傅里叶变换取中心时刻的瞬时频谱牺牲频率分辨率换取转速适应性。前者更适合在线监测系统后者更适合离线分析。5.4 程序运行报错的常见原因速查报错现象可能原因处理办法FFT索引超出数组范围倍频设置超过了奈奎斯特频率检查harm参数确保k*fr小于fs/2图形没有椭圆出现数据长度太短或幅值标定系数为0增加整周期截取长度检查灵敏度参数椭圆形状异常细长两个通道幅值标定不一致确认X/Y传感器灵敏度换算是否统一相位跳动剧烈信号信噪比低或转速波动增加平均次数或改用阶比跟踪以上排查经验来自我在实际应用和调试中的常见情况不同版本的Matlab环境、不同数据格式都可能引入新的问题。排查思路比具体报错本身更重要先确认数据质量再检查参数设置最后才怀疑算法本身这个顺序我屡试不爽。我个人体会是全息谱的实现门槛并不高代码量小、逻辑清楚但要把每个椭圆背后的物理含义吃透还是需要多跑数据、多对照实验。先拿仿真信号跑通流程再上实验台验证最后处理现场数据这个路径走下来基本就能把全息诊断作为日常分析工具用起来了。本文还有配套的精品资源点击获取
返回列表