ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

齿轮箱故障诊断的传递路径分析(TPA)与Matlab实现

齿轮箱故障诊断的传递路径分析(TPA)与Matlab实现 齿轮箱出了问题最头疼的不是“知道它坏了”而是“不知道坏在哪”。振动摆在那里频谱上一堆峰值是齿轮本身的故障还是轴承故障被齿轮啮合放大是输入轴的问题还是输出轴传递过来的这时候就需要做传递路径分析Transfer Path AnalysisTPA把振动从激励源到测点的每一条传递路径拆开逐个算清贡献量。这也是故障诊断里比“看看频谱”高一个段位的活儿。这篇文章就基于“齿轮系统传递路径分析TPA”的Matlab实现展开内容偏向工程实操。适合刚开始接触故障诊断、被“振动大但找不到源头”困扰的工程师也适合正在做设备状态监测论文或项目、需要产出一条可复现分析流程的研究生。我会从原理、代码实现、参数设置到避坑经验都过一遍尽量把每一个“为什么这么做”讲透。1. 为什么齿轮故障诊断需要TPA从“振不振动”到“哪条路传过来的”1.1 齿轮箱振动诊断的痛点齿轮箱是旋转机械里最典型的“多源激励、多路径传递”结构。齿轮啮合产生周期性冲击力轴承滚动体通过缺陷位置也会产生冲击这些激励同时存在且频带可能重叠。你在箱体表面放一个加速度传感器测到的是所有激励经所有路径叠加后的“混合信号”。传统故障诊断的做法是频谱分析找边带、找啮合频率的幅值变化、看谐波成分。这套方法对“判断有没有故障”很好用但对“判断故障在哪条轴、哪个齿轮、哪个轴承”就力不从心了。原因很简单传感器测点的响应不仅取决于激励源的大小还取决于激励点到测点之间的结构传递特性。如果一个轴承的故障激励本身不大但它刚好处在某条共振路径上测点响应反而很大反过来一个严重故障如果被结构衰减掉了也可能在频谱上表现得并不明显。TPA要解决的就是这个问题。它的思路是把“源”和“路径”解耦。先测量或估计出每条路径上的激励力或载荷再测量激励点到响应点的传递函数FRF最后按“贡献量 载荷 × 传递函数”逐路径累加。这样就能回答测点处的振动到底是谁传过来的传了多少。1.2 TPA在齿轮系统中的适用场景齿轮箱的TPA分析最典型的几个应用场景是故障定位箱体表面某测点在齿轮啮合频率处振动超标是齿轮本身激励变大还是轴承路径传递特性发生变化TPA可以把齿轮激励路径和轴承路径分开计算判断主要贡献者。减振降噪优化一台减速机噪声大是齿轮啮合冲击大还是箱体薄弱面板辐射噪声通过路径贡献排序能找到最值得改的一条路径。状态监测测点优化跑TPA之前先做一遍找出对各类故障最灵敏的测点和方向后续在线监测就重点布置这些测点。故障模拟与机理验证在台架上人为设置齿轮局部缺陷通过TPA计算出故障激励的变化量验证动力学模型的准确性。这些场景的共同特点是不能只看响应必须看传递关系。这也就是TPA区别于普通频谱分析的核心价值。2. TPA的核心原理与数学表达一条路径就是一次“激励-传递-响应”的分解2.1 经典TPA的频域表达经典TPAClassical TPA的基础公式非常简洁就是一个线性叠加原理。假设系统在频域是线性的那么第 i 个响应点的振动谱为[ Y_i(\omega) \sum_{j1}^{N} H_{ij}(\omega) \cdot F_j(\omega) ]其中(Y_i(\omega)) 是响应点 i 的频谱通常是加速度或速度(H_{ij}(\omega)) 是从激励点 j 到响应点 i 的频响函数FRF(F_j(\omega)) 是激励点 j 处的实际工作载荷通常是力(N) 是考虑的激励点路径总数。把这个公式拆开理解就是每个激励源都对应一条“路径”每条路径的贡献等于“载荷 × FRF”。测点总响应是所有路径贡献的向量叠加注意是复数叠加有相位关系不是简单相加幅值。2.2 齿轮系统的路径定义对于齿轮箱路径的划分通常有两种方式按物理位置划分每个轴承座位置就是一个激励点。齿轮啮合力作用在齿轮轴上通过轴→轴承→箱体→测点传递。对于一个两级齿轮箱通常有4~6个轴承座每个轴承座有三个方向X/Y/Z路径数就是轴承座数乘以方向数。这样划分的好处是直接对应可改造的结构位置。按载荷类型划分把每个轴承座上的激励分解为力和力矩。轴向力、径向力、倾覆力矩对箱体振动的贡献不同。这种划分更精细但需要对每个轴承座进行多方向FRF测量实验量翻倍。在实际工程中我第一次做齿轮箱TPA时走了弯路把每个轴承座当成一个点只测了径向一个方向结果发现某条路径贡献死活对不上。后来才想明白齿轮啮合产生的轴向力分量对箱体顶面振动贡献很大只测径向会漏掉主要路径。2.3 载荷识别TPA最难的一步TPA公式里FRF是可以通过锤击实验或激振器实验测出来的真正的难点在于获取工作状态下的载荷 (F_j(\omega))。齿轮箱运转中齿轮啮合力、轴承力都是无法直接测量的除非装特制的测力轴承座成本很高。因此工程中常用“间接识别”的方法主要有直接力测量在激励点和结构之间安装力传感器。适用于可以改造的结构比如把某个支撑换成带传感器的模块。精度最高但实施成本也最高齿轮箱内部几乎不可能。矩阵求逆法Matrix Inversion Method在结构上布置比路径数更多的加速度传感器测量工作状态下的加速度响应再通过FRF矩阵的逆矩阵反算载荷。这是经典TPA最常用的方法。部件反力法Mount Stiffness Method如果激励力的传递路径上有弹性元件比如橡胶减振器测量弹性元件的变形量乘以刚度就得到力。矩阵求逆法在Matlab里实现非常直接但有一个致命问题FRF矩阵求逆是病态的尤其是路径数多、测点接近时条件数可能高达 (10^{10}) 以上导致载荷识别结果对测量噪声极其敏感。解决方法是加正则化Tikhonov正则化或奇异值截断或者在FRF测试时尽量选择差异大的测点位置。2.4 从经典TPA到快速TPA工程效率的妥协完整的经典TPA即“解耦法”需要在拆机状态下测FRF再装机测工作载荷工程流程长、停机成本高。所以后来出现了各种简化版本OPAXOperational Path Analysis with eXogenous inputs用工作状态下的响应数据加上少量FRF测量对载荷进行参数化建模适合在线诊断应用。快速TPAFast TPA / Component-based TPA只测量传递函数用振动传递率Transmissibility代替载荷识别牺牲精度但非常快。OPROperational Transfer Path Analysis完全基于工作响应数据计算各测点之间的传递率适合故障趋势监测但对绝对贡献量不太准确。对于故障诊断场景我个人的观点是如果目标是定期分析用经典TPA或矩阵求逆就行如果要做在线实时监测用OPAX更现实。这篇博文的Matlab实现以经典TPA为骨架但在代码里预留了OPAX的参数化接口便于后续扩展。3. Matlab实现TPA从数据准备到贡献量可视化的完整流程3.1 整体流程框架Matlab中实现齿轮系统TPA我通常把整个流程拆成六个阶段数据采集与预处理采集FRF数据和工作工况响应数据统一采样频率与时间基准。FRF矩阵构建把锤击实验测得的FRF数据整理成矩阵 (H(\omega))。工作载荷识别运行工况下采集多个响应点信号用矩阵求逆法识别各路径载荷。路径贡献量计算逐频率点计算每条路径的贡献。结果可视化绘制贡献量瀑布图、单个频率点的贡献条形图、相位图。故障判定与报告基于贡献量排序结合齿轮特征频率定位故障源。对应的目录结构我一般这样组织TPA_Gearbox/ ├── data/ │ ├── FRF_measured.mat % 频响函数数据 │ ├── operational.mat % 工作工况响应数据 │ └── setup_info.mat % 传感器位置、路径定义等配置 ├── src/ │ ├── load_data.m % 数据加载与预处理 │ ├── build_frf_matrix.m % 构建FRF矩阵 │ ├── identify_loads.m % 载荷识别 │ ├── compute_contributions.m% 路径贡献量计算 │ └── plot_contributions.m % 可视化 └── main_TPA.m % 主脚本3.2 数据采集与预处理FRF测量推荐使用锤击法Impact Hammer Testing或激振器法。锤击法快但信噪比在低频段200 Hz可能不足激振器法精度高但实验时间长。对齿轮箱这种结构我通常用激振器扫频测量100 Hz~5000 Hz范围的FRF因为齿轮啮合频率及其谐波通常在这个范围。在Matlab中读取FRF数据需要注意几个细节% 加载数据 FRF_data load(data/FRF_measured.mat); op_data load(data/operational.mat); % 统一频率轴 f FRF_data.frequency; % 假设FRF和工况数据的频率轴一致 if length(op_data.frequency) ~ length(f) op_data.acceleration resample(op_data.acceleration, ... length(f), length(op_data.frequency)); end % 每个测点的FRF集合 % 假设FRF_data.H 的维度是 [n_freq_bins, n_responses, n_paths] H_measured FRF_data.H;这里有一个预处理的关键FRF数据和工况数据必须在同一频率分辨率上。实测中经常遇到FRF用了高分辨率的频响工况数据用了低分辨率如果在频域直接相除会产生严重误差。我一般统一用1 Hz的分辨率能覆盖啮合频率附近需要细看的边带。3.3 FRF矩阵构建假设有 (n) 个响应测点和 (m) 个路径点FRF矩阵在某个频率点 (\omega_k) 的维度是 (n \times m)。每一列代表某个路径激励对所有响应测点的传递函数。function H_matrix build_frf_matrix(H_measured, n_responses, n_paths, freq_index) % 在特定频率点提取FRF矩阵 H_matrix zeros(n_responses, n_paths); for i 1:n_paths for j 1:n_responses H_matrix(j, i) H_measured(freq_index, j, i); end end end实际工程中FRF测量数据通常不是规整的三维数组而是多个文件。建议在采集时建立一个表格记录每条FRF对应的激励点编号、响应点编号和方向。在Matlab里建议用Table类型管理避免后期数据处理时把路径对应关系弄混% 示例路径配置表 pathTable table( ... [1; 2; 3; 4], ... {input_bearing_x; input_bearing_y; output_bearing_x; output_bearing_y}, ... VariableNames, {PathIndex, PathName});3.4 工作载荷识别矩阵求逆法的代码实现假设响应测点数为 (n)路径数为 (m)通常要求 (n \geq m) 才能求解。工作状态下测得的加速度谱 (A(\omega)) 是 (n \times 1) 向量FRF矩阵 (H(\omega)) 是 (n \times m) 矩阵则载荷向量的最小二乘解为[ F(\omega) \left( H^H H \right)^{-1} H^H A(\omega) ]在Matlab中直接使用function F_est identify_loads(H_matrix, A_measured, lambda) % H_matrix: n_responses x n_paths % A_measured: n_responses x 1 % lambda: 正则化参数 [n_resp, n_paths] size(H_matrix); % Tikhonov正则化 I eye(n_paths); F_est (H_matrix * H_matrix lambda * I) \ (H_matrix * A_measured); endlambda 的选择非常重要。太大会把载荷压得过于平滑太小则求逆噪声放大。我常用L曲线法确定正则化参数对不同的lambda计算残差范数和解范数画成一条L形的曲线取拐点处的lambda值。在实际计算中对角占优问题是载荷识别最常见的坑。如果FRF矩阵里两列非常相似比如两个轴承座距离很近传感器测得的FRF幅值与相位几乎一样那么矩阵就是病态的求逆就会算出一个极大的载荷出现正负抵消的情况。路径贡献量甚至会超过总响应好几个数量级显然不合理。解决方法是减少路径数或者合并相似路径。3.5 路径贡献量计算得到每个路径的载荷 (F_j(\omega)) 后逐路径计算贡献量function [contributions, total_response] compute_contributions(H_matrix, F_est, n_paths) % contributions: n_paths x 1 复数向量 contributions zeros(n_paths, 1); total_response 0; for j 1:n_paths contribution_j H_matrix(:, j) * F_est(j); contributions(j) contribution_j; total_response total_response contribution_j; end end这里需要注意贡献量是复数包含幅值和相位。在实际诊断中不仅看幅值大小还要看相位的关系。两条路径的贡献如果相位相差180°它们会互相抵消此时总响应反而变小。这在故障诊断里是一个隐蔽陷阱某个测点的总振动小不代表每个路径的贡献都小可能是大贡献相互抵消。如果只看幅值就会漏掉潜在故障。3.6 可视化如何把结果讲清楚Matlab的可视化在TPA中承担两个任务一是自己分析时快速定位问题二是出报告时让别人看懂。我常用的几种图频率-贡献量瀑布图X轴是频率Y轴是路径编号Z轴是贡献量幅值。用surf或pcolor画能一眼看出哪个频率点哪条路径占主导。figure; [C, F] meshgrid(1:n_paths, f); surf(F, C, abs(contribution_map)); xlabel(频率 (Hz)); ylabel(路径编号); zlabel(贡献量 (m/s^2)); view(45, 30);指定频率点的贡献量条形图比如在啮合频率处看各路径的贡献排序。figure; bar(abs(contributions_freq)); xlabel(路径编号); ylabel(贡献量幅值); title(sprintf(频率 %.1f Hz 处各路径贡献量, target_freq));频谱总览图把总响应的频谱实测和TPA重建的总响应各路径贡献之和画在同一张图上如果两者吻合良好说明分析可信如果差异大说明路径定义遗漏了或FRF测量有误差。这是验证TPA正确性的关键步骤。3.7 完整代码整合主脚本示例下面给出一段精简但完整可运行的主脚本模拟了一个两路径简单齿轮箱的TPA看整个代码的骨架%% 故障诊断: 齿轮系统传递路径分析(TPA) clear; clc; close all; % 1. 加载数据 FRF_data load(data/FRF_measured.mat); op_data load(data/operational.mat); f FRF_data.frequency; n_paths 2; % 路径数: 输入轴承路径和输出轴承路径 n_responses 3; % 响应点数量 路径数 % 2. 逐频率点计算载荷和贡献量 n_freq length(f); F_estimated zeros(n_paths, n_freq); contribution_map zeros(n_paths, n_freq); total_response zeros(1, n_freq); lambda 1e-3; % 正则化参数 for k 1:n_freq % 构建当前频率点的FRF矩阵 Hk build_frf_matrix(FRF_data.H, n_responses, n_paths, k); % 当前频率点的工作响应 Ak op_data.acceleration_op(:, k); % 载荷识别 Fk identify_loads(Hk, Ak, lambda); % 贡献量计算 [contributions, tot] compute_contributions(Hk, Fk, n_paths); % 存储 F_estimated(:, k) Fk; contribution_map(:, k) abs(contributions); total_response(k) tot; end % 3. 验证: 重建的总响应 vs 实测总响应 op_measured_total sqrt(sum(abs(op_data.acceleration_op).^2, 1)); figure; semilogy(f, op_measured_total, b-, LineWidth, 1.5); hold on; semilogy(f, abs(total_response), r--, LineWidth, 1.5); legend(实测响应, TPA重建响应); xlabel(频率 (Hz)); ylabel(幅值 (m/s^2)); title(TPA结果验证); % 4. 在啮合频率处画贡献量条形图 f_mesh 400; % 假设啮合频率 400 Hz [~, idx_f] min(abs(f - f_mesh)); figure; bar(1:n_paths, contribution_map(:, idx_f)); set(gca, XTickLabel, {输入轴承路径, 输出轴承路径}); xlabel(路径); ylabel(贡献量幅值 (m/s^2)); title(sprintf(%.1f Hz处路径贡献量, f(idx_f))); grid on;这段代码虽然简化了数据格式但核心计算流程是完整的。实际项目中FRF矩阵构建、载荷识别、贡献量计算建议封装成独立函数方便对不同工况数据重复调用。4. 参数设置与计算细节决定TPA成败的关键因素4.1 FRF测量参数选择FRF测量的参数直接决定后续矩阵求逆的质量采样频率建议至少覆盖到感兴趣最高频率的2.56倍抗混叠。对齿轮箱啮合频率通常在1~3 kHz建议以10 kHz以上采样FFT分析频段设到5 kHz。平均次数锤击法平均5~10次激振器法平均10次以上。FRF测量受噪声影响很大尤其是结构阻尼小的频段相干性差。频率分辨率齿轮箱的故障特征边带间距可能只有几赫兹建议分辨率不低于1 Hz否则边带被抹平后续故障判断无从谈起。传感器固定方式用磁座和用胶粘固定在高频段的FRF差异很大。TPA分析中FRF测量的传感器固定方式必须与工况采集时完全一致否则高频传递函数系统性偏差。4.2 正则化参数lambda的选取前面提过lambda的选取用L曲线法。Matlab实现非常简单function lambda_opt choose_lambda(H, A, lambda_range) residual_norm zeros(size(lambda_range)); solution_norm zeros(size(lambda_range)); for i 1:length(lambda_range) F_i (H * H lambda_range(i) * eye(size(H, 2))) \ (H * A); residual_norm(i) norm(H * F_i - A); solution_norm(i) norm(F_i); end % 取L曲线拐点 [~, idx] max( ... gradient(solution_norm) ./ gradient(residual_norm)); lambda_opt lambda_range(idx); end实际经验是lambda通常取 (10^{-6}) 到 (10^{-2}) 之间的量级具体取决于FRF矩阵元素的幅值。如果FRF幅值以 (m/s^2/N) 为单位数值在 (10^{-3}) 到 (10^3) 之间那么lambda取 (10^{-6}) 通常是比较安全的起点。如果算出来的载荷幅值在物理上不成立比如远超齿轮啮合力理论值几个数量级就需要调大lambda或者检查路径定义是否合理。4.3 响应点数量与位置选择矩阵求逆法要求响应点数大于等于路径数(n \geq m)且响应点之间要尽量避免高度相关。我总结的经验法则是响应点数至少是路径数的1.5倍。比如有4条路径至少布置6个响应点。响应点应尽量分散在箱体不同位置、不同方向避免两个测点在同一刚性平面上的对称位置。如果响应点数不够有一个补救办法利用多次测量增加数据。比如同一个工况下重复采集多段数据每段独立做一次FFT把多段数据拼接成超定方程组% 多段响应数据进行载荷识别 n_segments 5; A_multi [A_segment1; A_segment2; A_segment3; A_segment4; A_segment5]; % 对应的H矩阵也按行堆叠 H_multi [H; H; H; H; H]; % 注意实际中各段H是相同的, 只是响应不同 F_est (H_multi * H_multi) \ (H_multi * A_multi);这种方法在实践中很有效因为不同段数据的噪声是独立的相当于做了多次测量取最优估计。4.4 路径合并策略路径数越多载荷识别越不稳定。我在实际项目里遵循两个准则同一轴承座的三方向路径X/Y/Z如果两两相关性很高就合并为主方向路径。怎么判断把FRF矩阵的各列做相关性分析相关系数超过0.9就考虑合并。结构对称的路径可以合并。比如两级齿轮箱的两个中间轴轴承如果结构对称、载荷相近可以视为一条等效路径。这样路径数减少后矩阵求逆的条件数会明显下降载荷识别的稳定性大幅提高。5. 一个完整案例两级齿轮箱的TPA故障诊断实战5.1 案例背景与路径定义假设一个两级平行轴齿轮箱输入转速1500 rpm第一级啮合频率400 Hz第二级啮合频率200 Hz。故障表现箱体顶面振动超标频谱中400 Hz分量突出。问题是这个400 Hz的振动主要是输入级齿轮啮合激励直接传递过来的还是输入级齿轮啮合激励经轴承传到箱体、再经结构共振放大路径定义如下路径1输入轴左侧轴承径向方向路径2输入轴右侧轴承径向方向路径3中间轴左侧轴承径向方向路径4中间轴右侧轴承径向方向路径5输出轴左侧轴承径向方向路径6输出轴右侧轴承径向方向响应点选取6个箱体表面测点顶面2个、侧面2个、端面2个。5.2 实验与计算过程FRF测量在6个轴承座位置分别用力锤激励在6个响应点测加速度FRF。每个轴承座激励一个方向得到 (6 \times 6 36) 条FRF。工作工况数据齿轮箱满载运行测6个响应点的加速度同步采集转速脉冲。通过转速跟踪确定啮合频率的精确值避免频率漂移。Matlab计算步骤跟第3节流程一致只是路径数变成了6。载荷识别时加了Tikhonov正则化lambda取值通过L曲线确定为 (5 \times 10^{-5})。5.3 诊断结果解读计算出的400 Hz处各路径贡献量排序如下路径贡献量幅值 (m/s²)贡献量相位 (°)路径1输入轴左轴承14.2-35路径2输入轴右轴承6.8152路径3中间轴左轴承2.110路径4中间轴右轴承1.5-78路径5输出轴左轴承0.390路径6输出轴右轴承0.4-120很明显路径1是主要贡献者占总响应的比重超过一半。路径2虽然幅值只有路径1的一半不到但相位几乎与路径1反相说明两条路径的贡献部分抵消。TPA重建的总响应与实测响应误差在5%以内说明路径定义合理、分析可信。诊断结论400 Hz振动超标的根源是输入级齿轮啮合激励经过输入轴左轴承传入箱体。进一步检查该轴承座发现轴承外圈存在微动磨损导致传递路径的刚度发生变化放大了振动传递。更换轴承后振动下降约40%。这个案例说明了TPA的独特价值不是“定位到齿轮故障”而是“定位到齿轮故障激励通过哪个轴承路径传出来”。这对维修决策非常关键——如果只是齿面问题可能需要开箱更换齿轮如果是轴承路径问题可能只需要更换轴承。6. 常见问题与排查技巧实录6.1 问题速查表常见问题可能原因排查方法TPA重建总响应远大于/小于实测响应路径定义遗漏、FRF测量误差、测点位置不一致计算各频率点的重建误差找出误差大的频段检查该频段对应的路径确认FRF测量与工况采集使用同一传感器布置载荷识别结果为巨大数值FRF矩阵病态、正则化参数太小计算FRF矩阵条件数增大lambda减少路径数贡献量出现正负抵消总响应小但各路径贡献巨大路径之间存在高度相关性合并相似路径改用OPAX方法计算出的载荷在物理上不合逻辑FRF幅值标定错误、传感器灵敏度设置错误用已知质量块做FRF标定验证检查传感器灵敏度设置高频段误差大FRF相干性差、传感器安装共振检查FRF测量的相干函数低于0.9的频段重测检查传感器安装刚度6.2 FRF测量时的关键坑点FRF测量是整个TPA的基础。我见过太多同学在这个环节埋雷后面算出的贡献量漂亮得很但对不上实测数据最后倒查才发现FRF根本不准。注意传感器线缆的摆动。线缆在测量过程中摆动会改变结构的边界条件导致高频FRF测不准。固定线缆是非常重要但容易被忽略的细节。注意敲击点的稳定性。锤击法测FRF时每次敲击的力大小和位置都要一致。力锤的激励谱在低频段能量少所以低频FRF往往信噪比低。建议用尼龙头力锤敲击并检查力谱是否平坦。激振器法要注意防过载。激励力过大会导致结构非线性响应FRF会出现明显的倍频成分与实际工况不符。激振器激励应从小力开始逐步增大观察FRF是否稳定。6.3 载荷识别的噪声敏感性与对策矩阵求逆法的核心问题是噪声放大。等价来看[ F H^ A ]如果 (H) 的条件数 (cond(H)10^6)那么 (A) 中1%的噪声会被放大到 (10^4) 倍。所以载荷识别的结果对响应信号的噪声极其敏感。对策有几条信号预处理先对工况信号做带通滤波滤除无关频段的宽带噪声。我用的是Matlab的designfilt设计带通滤波器带宽覆盖关心频段即可。多次平均把同一工况下多次采集的数据分别做载荷识别然后对载荷结果取平均幅值和相位分别考察。因为每次的噪声独立平均后噪声按 (1/\sqrt{N}) 衰减。奇异值截断对FRF矩阵做SVD分解后把小奇异值对应的分量直接置零再做伪逆。这本质上是一种更强的正则化适合条件数特别差的情况。function F_est truncated_svd_inverse(H, A, tol) [U, S, V] svd(H, econ); s diag(S); s_inv zeros(size(s)); s_inv(s tol * s(1)) 1 ./ s(s tol * s(1)); H_pinv V * diag(s_inv) * U; F_est H_pinv * A; end对比普通最小二乘这个方法在FRF矩阵条件数1000时优势明显。我一般把tol设在0.01~0.05之间。6.4 相位不一致问题TPA是复数运算所有数据都要求相位对齐。这个坑通常出在FRF是频响函数天然带相位信息没问题工况数据的FFT如果用不同长度的数据段做平均相位信息会被平均掉标准功率谱平均只保留幅值这对TPA是毁灭性的。所以处理工况数据时必须用复数谱平均线性平均而不是功率谱平均。Matlab里cpsd函数默认返回复数交叉谱用这个做平均可以保留相位信息。我在代码里写过无数次的% 不要这样: 会丢失相位 % A_spectrum abs(fft(a)); % 要这样: 保留复数谱 [pxx, f] cpsd(a, a, hanning(nfft), nfft/2, nfft, fs); A_spectrum sqrt(pxx); % 幅值谱 % 但要获取相位, 需要至少两个通道的互谱或直接做复数FFT平均正确做法是对多段数据逐段做FFT把复数结果逐段平均n_segments 20; A_complex_avg zeros(nfft, 1); for seg 1:n_segments seg_data a((seg-1)*seg_len1 : seg*seg_len); A_complex_avg A_complex_avg fft(seg_data .* window, nfft); end A_complex_avg A_complex_avg / n_segments;这是一个很多人忽视的细节但直接决定了之后路径贡献量的相位计算是否可信。7. 方法扩展把TPA从“离线分析”推向“在线监测”7.1 从TPA到OPAX的应用思路经典TPA需要拆机测FRF这限制了它在在线监测中的应用。OPAX则只需在工作状态下测量响应路径的传递函数用简化模型估计或者用历史故障样本标定。这样省去停机环节代价是载荷精度不如经典TPA。对于故障诊断场景我更推荐的做法是用经典TPA做一次离线分析找到关键路径和敏感频段然后在关键路径上布设永久传感器用OPAX做趋势监测。两者配合既能保证诊断精度又能实现长期监测。7.2 TPA与机器学习相结合TPA输出的路径贡献量向量天然适合作为机器学习特征。传统频谱特征输入模型信息是混合的而路径贡献量已经把不同源、不同路径解耦了故障类型和位置的“指纹”更清晰。我在项目里试过一个方案对不同的诱发布置齿轮齿面磨损、轴承外圈裂纹、轴不平衡分别做TPA把贡献量向量作为特征训练一个简单的k近邻分类器分类准确率比直接使用频谱所有频段的特征提升了约20个百分点。原因是TPA特征大幅降低了维度同时每个特征都有明确的物理含义模型的泛化能力更好。7.3 代码的后续扩展空间现有的Matlab代码已经包含了经典TPA的核心环节可以在以下方向扩展把identify_loads改成支持OPAX的参数化载荷模型比如多项式拟合载荷随转速的变化加入自动报告生成用Matlab的publish或report工具箱把图表和结论整理成文档接入实时数据流用dsp系统工具箱实现在线滑窗TPA。齿轮系统的TPA并不神秘本质就是线性系统的“激励-路径-响应”分解。真正考验人的是对结构的理解、对实验细节的把控、对病态问题处理的经验。Matlab让数学部分变得简单但这些工程经验是代码给不了的。我个人在实际项目里最有体会的一点是TPA不是一次性做完就完的它需要反复迭代。第一次算完把重建响应和实测响应画在一起你会发现某个频段对不上于是回去检查FRF、检查路径、检查预处理改完再算。这个过程可能重复好几轮但每一次迭代都加深对结构振动行为的理解。做完一遍齿轮箱的TPA之后你会对这个箱子的振动传播特性形成一种直觉这种直觉在后续任何振动诊断任务里都非常宝贵。如果遇到FRF矩阵条件数特别差、载荷识别怎么调都发散的场景还有一个备选方向暂时放弃矩阵求逆改用振动传递率Transmissibility做主导路径识别。相关思路和代码实现可以留到下次再细聊。
返回列表