ARTICLE DETAIL

资讯详情

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

一维振动信号转二维图像的故障诊断方法

一维振动信号转二维图像的故障诊断方法 简介本资源是一套面向工业智能诊断领域的Matlab实现工具包专为高校研究者、自动化工程师及深度学习初学者设计解决一维传感器时序信号难以直接输入主流图像型深度学习模型的关键问题。核心方法为暂态提取变换TET可有效捕获信号非线性、非平稳特性中的故障暂态成分并将其可视化为二维图像显著提升故障诊断与状态识别的建模适配性。压缩包共18个文件含7个核心Matlab函数如TET_Y.m主变换模块、SST_Y.m奇异谱预处理、WT2.m二维小波分析等、2个实测数据文件Sig_noise.mat带噪信号、x.mat中间/输出图像数据及9张PNG样本图含sample_1sample_5等多工况可视化结果整体3.15MB结构清晰、即下即用。目前已有75人学习下载提供从原始信号输入、暂态特征提取、二维图像生成到结果可视化的完整闭环流程附带可复现的main.m主控脚本与典型噪声场景验证数据大幅降低算法落地门槛。1. 为什么要把一维振动信号“画成图”——暂态提取变换不是炫技而是让CNN真正看懂故障你手头有一组轴承加速度传感器采集的原始时序数据10万点、采样率25.6kHz、单通道、无标签。直接喂给LSTM效果常不如预期。原因很实在深度学习模型尤其是CNN天生擅长从空间局部相关性中提取特征而纯一维序列缺乏这种二维结构支撑。所谓“暂态提取变换”本质是把设备运行中那些稍纵即逝的冲击脉冲如滚动体撞击缺陷点产生的瞬态响应从背景噪声里揪出来再用特定数学工具如短时傅里叶变换STFT、小波变换、格拉姆角场GAF、马尔可夫转移场MTF把它“铺开”成一张有纹理、有方向、有能量分布的二维图像。这张图不是示意图而是可微分、可卷积、可端到端训练的特征载体。它让ResNet-18在轴承故障诊断任务上准确率从72%跃升至96.3%也让状态识别不再依赖人工设计时频域统计量。本方案面向有Matlab基础的工程师与研究生不依赖Python生态所有代码可在R2018a及以上版本直接运行数据格式兼容CSV/Excel/MAT核心逻辑可无缝迁移到Simulink实时诊断模块。2. 暂态特征提取从原始信号中定位冲击成分的三种可靠路径暂态信号往往淹没在稳态周期成分和宽带噪声中。直接对全段做STFT会稀释冲击能量导致图像模糊。必须先做针对性增强。Matlab提供三类成熟工具链选择依据是信号信噪比SNR与冲击重复周期是否稳定。2.1 基于共振解调的包络谱分析适用于中高SNR、周期性冲击当轴承存在局部缺陷时冲击响应会激发系统固有频率并被调制。共振解调能有效分离载波固有频带与调制信息故障特征频率。关键步骤如下% 假设x为原始一维信号fs为采样率 % 步骤1带通滤波中心频率取理论固有频率f0±500Hz f0 3250; % 示例某型号轴承外圈故障特征频率估算值 [b,a] butter(4, [f0-500 f0500]/(fs/2), bandpass); x_bp filtfilt(b, a, x); % 步骤2希尔伯特变换求包络 x_env abs(hilbert(x_bp)); % 步骤3包络谱FFT重点观察1X~5X故障特征频率 N length(x_env); f_env (0:N-1)*(fs/N); env_psd abs(fft(x_env))/N; env_psd env_psd(1:floor(N/2)1); f_env f_env(1:floor(N/2)1); % 可视化验证确认包络谱中是否存在清晰的f_fault峰值 figure; plot(f_env, 2*env_psd); xlabel(Frequency (Hz)); ylabel(Amplitude); title(Envelope Spectrum - Check for fault characteristic frequency);提示filtfilt确保零相位失真hilbert输出复数取模得包络包络谱横轴单位为Hz故障特征频率如BPFO应在此处出现显著峰。若峰不明显说明带通频带选取不准或SNR过低需回退到第2.2节方法。2.2 自适应噪声抑制的形态学滤波适用于低SNR、非周期性冲击当冲击随机发生且被强噪声覆盖时传统滤波易失真。数学形态学利用结构元素对信号进行“腐蚀-膨胀”操作能保留脉冲宽度与幅值关系。Matlab中imopen/imclose函数可直接作用于一维向量需转为行向量% 构造结构元素长度L对应估计冲击持续时间单位采样点 L round(0.001 * fs); % 假设冲击持续1ms se strel(arbitrary, ones(1, L)); % 开运算先腐蚀后膨胀抑制正向尖峰噪声 x_open imopen(x., se).; % 闭运算先膨胀后腐蚀增强负向冲击如压缩波 x_close imclose(x., se).; % 组合开-闭混合滤波OBC提升暂态保真度 x_obc x_close - x_open x; % 验证对比滤波前后峭度值Kurtosis对冲击敏感 k_before kurtosis(x); k_after kurtosis(x_obc); fprintf(Kurtosis before: %.2f, after OBC: %.2f\n, k_before, k_after);注意strel(arbitrary, ...)定义一维结构元素imopen/imclose默认对行向量操作故需转置峭度值提升30%表明暂态增强有效。若提升不足增大L值重新尝试但L不宜超过冲击理论宽度的1.5倍否则会平滑真实脉冲。2.3 基于稀疏编码的冲击字典学习适用于多源耦合冲击当多个部件同时存在缺陷如轴承齿轮冲击相互叠加单一滤波难分离。此时构建过完备字典让每个原子对应一类典型冲击波形% 使用Matching Pursuit算法Matlab内置mpdict % 需预先准备冲击模板库如单脉冲、衰减振荡、双脉冲 templates load(impact_templates.mat); % 包含cell数组{template1, template2, ...} D cell2mat(templates); % 转为矩阵每列为一个原子 % 对信号分段每段2048点逐段稀疏分解 win_len 2048; n_win floor(length(x)/win_len); X_seg zeros(win_len, n_win); for i 1:n_win X_seg(:,i) x((i-1)*win_len1:i*win_len).; end % 稀疏编码OMP算法最大迭代50次 [coeff, ~] mpdict(X_seg, D, Algorithm, OMP, MaxIter, 50); % 重构暂态分量仅保留系数绝对值前10%的原子贡献 thr prctile(abs(coeff(:)), 90); coeff_sparse coeff .* (abs(coeff) thr); x_transient D * coeff_sparse; % 输出为与原信号等长的暂态序列 x_final zeros(size(x)); for i 1:n_win x_final((i-1)*win_len1:i*win_len) x_transient(:,i).; end关键参数说明mpdict要求字典D列数≥行数过完备MaxIter控制稀疏度值越小越稀疏prctile(...,90)设定阈值保留最强10%贡献——此步直接决定后续图像的冲击锐利度。该方法计算量较大建议在离线诊断阶段使用。3. 一维到二维变换四种图像生成方法的参数配置与适用场景提取出暂态序列x_final后需将其映射为二维矩阵。不同变换方式生成的图像纹理差异巨大直接影响CNN收敛速度与分类精度。以下方法均基于Matlab原生函数无需额外工具箱。3.1 短时傅里叶变换STFT图像兼顾时频分辨率调试最直观STFT是工程中最常用的时频分析工具。Matlabspectrogram函数输出三维数组需提取幅值谱并归一化% 参数设置窗长128点约5ms重叠率50%FFT点数256 window hamming(128); noverlap 64; nfft 256; fs 25600; % 示例采样率 % 生成STFT时频谱返回S为复数矩阵f为频率向量t为时间向量 [S, f, t] spectrogram(x_final, window, noverlap, nfft, fs); % 取幅值谱并归一化到[0,1]关键避免CNN梯度爆炸 S_amp abs(S); S_norm (S_amp - min(S_amp(:))) ./ (max(S_amp(:)) - min(S_amp(:)) eps); % 转换为uint8图像适配多数预训练CNN输入 S_img uint8(255 * S_norm); % 保存为PNG供深度学习读取 imwrite(S_img, stft_image.png);参数选择逻辑窗长决定频率分辨率Δf ≈ fs/窗长128点对应约200Hz重叠率影响时间轴平滑度50%是平衡点nfft越大频谱越密但计算增eps防止除零。若图像中冲击条纹模糊减小窗长至64若频率混叠增大nfft至512。3.2 格拉姆角场GAF保留时序全局依赖抗噪声强GAF将时间序列映射为极坐标系下的角度矩阵天然具备旋转不变性对传感器漂移鲁棒。Matlab无内置函数需手动实现function GAF_img generate_GAF(x, max_val) % x: 输入一维序列max_val: 归一化上限通常为1 N length(x); x_norm (x - min(x)) / (max(x) - min(x) eps); % [0,1]归一化 x_norm x_norm * max_val; % 计算角度矩阵θ_ij arccos(x_i * x_j) cos_theta x_norm * x_norm.; cos_theta min(max(cos_theta, -1), 1); % 限定[-1,1]防acos异常 theta acos(cos_theta); % 转为灰度图像theta∈[0,π] → [0,255] GAF_img uint8(255 * theta / pi); end % 调用示例 GAF generate_GAF(x_final, 1); imwrite(GAF, gaf_image.png);注意generate_GAF函数中cos_theta必须裁剪至[-1,1]否则acos报错max_val1保证角度范围完整生成图像尺寸为N×N内存占用随N²增长建议对长序列先降采样如取每10个点1个。3.3 马尔可夫转移场MTF刻画状态转移概率适合多工况识别MTF将序列量化为Q个离散等级构建Q×Q转移概率矩阵并按时间顺序展开为二维图。Matlab实现如下function MTF_img generate_MTF(x, Q) % Q: 量化等级数建议Q8~16 N length(x); x_quant discretize(x, Q, uniform); % 均匀量化 % 构建转移计数矩阵 T zeros(Q, Q); for i 1:N-1 from x_quant(i); to x_quant(i1); T(from, to) T(from, to) 1; end % 行归一化得概率矩阵 T_prob T ./ (sum(T,2) eps); % 展开为N×N图像第i行第j列像素值 T_prob(x_quant(i), x_quant(j)) MTF_img zeros(N, N); for i 1:N for j 1:N MTF_img(i,j) T_prob(x_quant(i), x_quant(j)); end end % 归一化并转uint8 MTF_img uint8(255 * (MTF_img - min(MTF_img(:))) ./ (max(MTF_img(:)) - min(MTF_img(:)) eps)); end % 调用示例Q12 MTF generate_MTF(x_final, 12); imwrite(MTF, mtf_image.png);参数说明Q值过小6丢失细节过大20导致矩阵稀疏discretize(...,uniform)确保各等级样本数均衡MTF图像中对角线反映自保持概率离对角线区域反映状态跃迁——这对识别启停、负载突变等状态切换极有效。3.4 小波尺度谱Wavelet Scalogram聚焦多尺度暂态分辨率最高连续小波变换CWT在检测瞬态事件上优于STFT。Matlabcwt函数支持多种小波基% 使用Morlet小波平衡时频定位 wavelet morl; scales 2^(0:0.25:9); % 37个尺度覆盖1~512Hz coefs cwt(x_final, scales, wavelet, fs); % 幅值谱归一化 coefs_abs abs(coefs); coefs_norm (coefs_abs - min(coefs_abs(:))) ./ (max(coefs_abs(:)) - min(coefs_abs(:)) eps); scalogram uint8(255 * coefs_norm); % 注意cwt输出为尺度×时间矩阵需转置匹配常规图像坐标 scalogram scalogram.; imwrite(scalogram, scalogram_image.png);关键点scales指数步进确保对数频率轴均匀morl小波在时频域均有良好集中性cwt默认使用解析Morlet实部虚部已分离abs()取模即可转置操作使时间轴为水平方向——这是CNN输入的标准格式。4. 深度学习集成Matlab中加载预训练网络并微调的完整流程生成图像后需接入CNN进行分类。Matlab Deep Learning Toolbox提供alexnet、resnet18等预训练网络无需从零训练。4.1 构建图像数据集与数据增强假设已生成stft_image.png等文件按故障类型存入子文件夹% 定义数据根目录含normal/inner/race/roller子目录 imds imageDatastore(data_root, IncludeSubfolders, true, LabelSource, foldernames); % 划分训练集70%、验证集15%、测试集15% [imdsTrain, imdsVal, imdsTest] splitEachLabel(imds, 0.7, 0.15, 0.15, randomized); % 定义增强器旋转±15°、水平翻转、亮度调整±20% augmenter imageDataAugmenter(... RandRotation, [-15 15], ... RandXReflection, true, ... RandBrightness, [-0.2 0.2]); % 创建增强数据集 imdsTrainAug augmentedImageDatastore([224 224 3], imdsTrain, DataAugmentation, augmenter);注意imageDatastore自动读取子文件夹名作为标签splitEachLabel确保各类别比例均衡augmentedImageDatastore中[224 224 3]指定输入尺寸需与网络输入层匹配亮度调整对STFT/GAF图像尤其重要因不同传感器增益导致图像明暗差异大。4.2 修改网络顶层以适配故障类别数以resnet18为例替换最后三层% 加载预训练网络 net resnet18; % 获取网络层结构 lgraph layerGraph(net); % 移除原分类层fc、fc_softmax、ClassificationLayer_fc lgraph removeLayers(lgraph, {fc, fc_softmax, ClassificationLayer_fc}); % 添加新全连接层输出数故障类别数此处为4类 numClasses 4; newFcLayer fullyConnectedLayer(numClasses, Name, new_fc); newSoftmaxLayer softmaxLayer(Name, new_softmax); newClassLayer classificationLayer(Name, new_classoutput); % 连接新层到网络末端 lgraph addLayers(lgraph, newFcLayer); lgraph addLayers(lgraph, newSoftmaxLayer); lgraph addLayers(lgraph, newClassLayer); lgraph connectLayers(lgraph, bn_conv5, new_fc); % 查看修改后网络 analyzeNetwork(lgraph);关键修改点removeLayers清除原分类头connectLayers将新FC层连接到倒数第二个BN层bn_conv5是resnet18的特征输出层名analyzeNetwork可视化确认连接正确——若名称不符可用lgraph.Layers查看实际层名。4.3 设置训练选项并启动微调% 定义训练选项 options trainingOptions(sgdm, ... InitialLearnRate, 0.001, ... % 微调时学习率需降低 MaxEpochs, 30, ... MiniBatchSize, 16, ... Shuffle, every-epoch, ... ValidationData, imdsVal, ... ValidationFrequency, 30, ... Verbose, false, ... Plots, training-progress, ... OutputNetwork, best-validation-loss, ... CheckpointPath, checkpoints); % 开始训练自动使用GPU若无则降级为CPU trainedNet trainNetwork(imdsTrainAug, lgraph, options); % 在测试集上评估 YPred classify(trainedNet, imdsTest); YActual imdsTest.Labels; accuracy mean(YPred YActual); fprintf(Test accuracy: %.2f%%\n, accuracy * 100);参数说明sgdm随机梯度下降动量比Adam更稳定InitialLearnRate0.001是resnet微调常用值若损失不降可试0.0001MiniBatchSize16需根据GPU显存调整12GB显存可设32best-validation-loss保存最优模型而非最后一轮。5. 故障诊断落地技巧三类典型问题的快速定位与修复策略在实际部署中模型性能不及预期往往源于数据-模型-评估链条中的某个环节失效。以下技巧直击高频痛点无需重训模型即可快速验证。5.1 图像质量诊断表用5行代码判断生成图像是否合格生成的STFT/GAF/MTF图像若存在结构性缺陷CNN必然无法学习。执行以下检查检查项命令合格标准不合格表现动态范围iminfo(stft_image.png).BitDepth必须为8若为16说明未归一化CNN输入溢出灰度分布histogram(double(imread(stft_image.png)), 256)主峰集中在[50,200]区间全黑10或全白240表明归一化错误冲击锐度mean(abs(diff(double(imread(gaf_image.png)),1,1)))15GAF或8STFT5说明暂态被过度平滑需回退到2.2节调整形态学参数标签一致性unique(imdsTrain.Labels)严格等于预设类别如{normal,inner,race,roller}出现unknown说明文件夹命名含空格或特殊字符尺寸合规性size(imread(mtf_image.png))必须为[N,N]正方形MTF或[H,W]STFT若为[H,W,3]三通道需rgb2gray转换提示iminfo返回结构体BitDepth字段直接暴露位深问题diff沿行方向求差分均值反映垂直方向纹理变化强度——这是冲击边缘锐利度的量化指标。5.2 混淆矩阵热力图定位具体哪两类故障易混淆测试集预测后用plotconfusion生成可交互热力图% 假设YPred和YActual已获取 figure(Position, [100, 100, 800, 600]); plotconfusion(YActual, YPred); title(Confusion Matrix - Fault Diagnosis); xlabel(Predicted Labels); ylabel(True Labels); % 导出为高清PDF用于论文/报告 exportgraphics(gca, confusion_matrix.pdf, ContentType, vector);解读要点主对角线越亮越好若inner与roller交叉严重说明二者冲击波形相似——此时应检查2.1节包络谱确认是否因轴承型号参数输入错误导致特征频率计算偏差若normal被大量误判为race说明正常工况下存在未建模的干扰如电机电磁噪声需在2.2节增强形态学滤波强度。5.3 单样本可解释性用Grad-CAM定位CNN关注的故障区域Matlab R2021b支持gradcam函数可视化CNN决策依据% 加载测试图像需与训练时相同预处理 img imread(test_stft.png); img_resized imresize(img, [224,224]); if size(img_resized,3)1, img_resized repmat(img_resized,[1,1,3]); end % 确保三通道 img_input im2single(img_resized); % 计算Grad-CAM热力图指定最后一个卷积层 layerName conv5; % resnet18中最后一个卷积层名 camMap gradcam(trainedNet, img_input, layerName, YPred(1)); % 叠加热力图到原图 alpha 0.5; overlay imoverlay(img_resized, camMap, alpha); figure; imshow(overlay); title(Grad-CAM Overlay - CNN Attention Region);关键验证热力图高亮区域应与STFT图像中冲击条纹位置重合若高亮在图像边缘或噪声区说明模型学到虚假特征——此时需检查4.1节数据增强是否引入了过多旋转破坏冲击方向性或回退到3.1节调整STFT窗长以提升时域定位精度。本文还有配套的精品资源点击获取
返回列表