✨ 长期致力于超声质量检测、递归分析、超声无损检测、深度学习、碳纤维复合材料研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1多尺度递归图特征提取与定量分析针对碳纤维复合材料局部微缺陷超声背散射信号的非线性特性提出多尺度递归图MRP特征提取方法。首先对超声A扫描信号进行变分模态分解得到5个本征模态函数IMF分别对每个IMF构建递归图递归阈值取信号标准差的0.2倍。然后从每个递归图中提取12个递归定量特征包括递归率、确定性、层状度、平均对角线长度等。这些特征组成60维特征向量。对含有单一微缺陷直径1mm和局部集中微缺陷3个间距2mm的试块采集信号MRP特征的可分性较原始时域特征提高了3倍。实验结果表明通过主成分分析降维后缺陷类型聚类分离度达到92%优于传统的功率谱密度分析。2ResNet卷积神经网络迁移训练与缺陷识别构建一个改进的ResNet-34网络输入为递归图的三通道彩色图像将三个主要IMF的递归图分别映射为RGB通道。网络最后全连接层输出4类无缺陷、单一小缺陷、单一中缺陷、集中缺陷。由于样本有限采用迁移学习策略先在公开超声金属缺陷数据集上预训练再在碳纤维数据上微调。微调时冻结前两个残差块仅训练后两个残差块和全连接层。在200个训练样本每类50下验证集准确率达到91.5%相比从头训练提高了18%。混淆矩阵显示集中缺陷与单一大缺陷的错分率仅为4%。模型在GPU上的单次推理时间为12ms满足在线检测要求。3基于LabVIEW-MATLAB-Python混合编程的在线检测软件开发一套软件系统集成超声信号采集、递归分析、深度学习识别和结果可视化。LabVIEW负责控制超声换能器和数据采集卡采样率100MHz将信号通过TCP/IP传输到MATLAB引擎MATLAB执行变分模态分解和递归图生成最后Python加载训练好的ResNet模型进行缺陷分类。整个流程延迟小于0.3秒。在碳纤维缠绕压力容器实际检测中软件成功识别出人工预埋的5处微缺陷最小直径0.8mm识别率100%并提供了缺陷位置的热力图叠加显示。破坏性验证试验证实了检测结果证明了软件的可靠性。import numpy as np import tensorflow as tf from tensorflow.keras import layers, Model from scipy.signal import hilbert import pywt def vmd_decompose(signal, alpha2000, tau0, K5): # 简化变分模态分解实现示意 u np.zeros((K, len(signal))) omega np.linspace(0, np.pi, len(signal)) for k in range(K): # 使用带通滤波近似 analytic hilbert(signal) envelope np.abs(analytic) u[k] envelope * np.sin(2*np.pi*(k1)*omega[:len(envelope)]) return u def recurrence_plot(signal, embed3, delay1, threshold_ratio0.2): # 相空间重构 N len(signal) - (embed-1)*delay X np.zeros((N, embed)) for i in range(N): X[i] signal[i:iembed*delay:delay] # 距离矩阵 dist np.linalg.norm(X[:,None,:] - X[None,:,:], axis2) threshold threshold_ratio * np.std(signal) RP (dist threshold).astype(np.float32) return RP def extract_rqa_features(RP): # 递归定量特征递归率、确定性等 N RP.shape[0] RR np.sum(RP) / (N*N) # 对角线长度分布简化 diag_lengths [] for i in range(-N1, N): d np.diagonal(RP, offseti) runs np.diff(np.where(np.diff(np.concatenate(([0], d, [0]))))[0])[::2] diag_lengths.extend(runs[runs1]) DET np.sum(diag_lengths) / np.sum(RP) if np.sum(RP)0 else 0 Lmean np.mean(diag_lengths) if diag_lengths else 0 return np.array([RR, DET, Lmean, np.std(diag_lengths)]) class CustomResNet: def __init__(self, input_shape(224,224,3), num_classes4): base tf.keras.applications.ResNet34(weightsimagenet, include_topFalse, input_shapeinput_shape) base.trainable True # 冻结前两层 for layer in base.layers[:60]: layer.trainable False x base.output x layers.GlobalAveragePooling2D()(x) x layers.Dense(256, activationrelu)(x) x layers.Dropout(0.5)(x) out layers.Dense(num_classes, activationsoftmax)(x) self.model Model(inputsbase.input, outputsout) self.model.compile(optimizertf.keras.optimizers.Adam(1e-4), losscategorical_crossentropy, metrics[accuracy]) def train(self, X, y, epochs30): self.model.fit(X, y, batch_size8, epochsepochs, validation_split0.2) def simulate_ultrasonic_signal(defect_typesingle): # 模拟超声背散射信号 t np.linspace(0, 1e-5, 1000) base np.sin(2*np.pi*5e6*t) * np.exp(-t*1e6) if defect_type single: defect 0.3*np.sin(2*np.pi*5.2e6*t) * np.exp(-(t-3e-6)**2/(1e-12)) elif defect_type cluster: defect 0.5*np.sin(2*np.pi*5.3e6*t) * (np.exp(-(t-2.5e-6)**2/(1e-12)) np.exp(-(t-3.5e-6)**2/(1e-12))) else: defect 0 return base defect if __name__ __main__: # 生成模拟信号并生成递归图 sig simulate_ultrasonic_signal(single) imfs vmd_decompose(sig, K3) rp_list [] for imf in imfs: rp recurrence_plot(imf, embed3, delay2) rp_list.append(rp) features extract_rqa_features(rp_list[0]) print(RQA features:, features) # 创建ResNet模型略缩 model CustomResNet() print(ResNet model created.) # 注实际训练需要大量图像数据
超声检测信号递归分析与深度学习应用【附代码】
发布时间:2026/5/16 3:22:36
✨ 长期致力于超声质量检测、递归分析、超声无损检测、深度学习、碳纤维复合材料研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1多尺度递归图特征提取与定量分析针对碳纤维复合材料局部微缺陷超声背散射信号的非线性特性提出多尺度递归图MRP特征提取方法。首先对超声A扫描信号进行变分模态分解得到5个本征模态函数IMF分别对每个IMF构建递归图递归阈值取信号标准差的0.2倍。然后从每个递归图中提取12个递归定量特征包括递归率、确定性、层状度、平均对角线长度等。这些特征组成60维特征向量。对含有单一微缺陷直径1mm和局部集中微缺陷3个间距2mm的试块采集信号MRP特征的可分性较原始时域特征提高了3倍。实验结果表明通过主成分分析降维后缺陷类型聚类分离度达到92%优于传统的功率谱密度分析。2ResNet卷积神经网络迁移训练与缺陷识别构建一个改进的ResNet-34网络输入为递归图的三通道彩色图像将三个主要IMF的递归图分别映射为RGB通道。网络最后全连接层输出4类无缺陷、单一小缺陷、单一中缺陷、集中缺陷。由于样本有限采用迁移学习策略先在公开超声金属缺陷数据集上预训练再在碳纤维数据上微调。微调时冻结前两个残差块仅训练后两个残差块和全连接层。在200个训练样本每类50下验证集准确率达到91.5%相比从头训练提高了18%。混淆矩阵显示集中缺陷与单一大缺陷的错分率仅为4%。模型在GPU上的单次推理时间为12ms满足在线检测要求。3基于LabVIEW-MATLAB-Python混合编程的在线检测软件开发一套软件系统集成超声信号采集、递归分析、深度学习识别和结果可视化。LabVIEW负责控制超声换能器和数据采集卡采样率100MHz将信号通过TCP/IP传输到MATLAB引擎MATLAB执行变分模态分解和递归图生成最后Python加载训练好的ResNet模型进行缺陷分类。整个流程延迟小于0.3秒。在碳纤维缠绕压力容器实际检测中软件成功识别出人工预埋的5处微缺陷最小直径0.8mm识别率100%并提供了缺陷位置的热力图叠加显示。破坏性验证试验证实了检测结果证明了软件的可靠性。import numpy as np import tensorflow as tf from tensorflow.keras import layers, Model from scipy.signal import hilbert import pywt def vmd_decompose(signal, alpha2000, tau0, K5): # 简化变分模态分解实现示意 u np.zeros((K, len(signal))) omega np.linspace(0, np.pi, len(signal)) for k in range(K): # 使用带通滤波近似 analytic hilbert(signal) envelope np.abs(analytic) u[k] envelope * np.sin(2*np.pi*(k1)*omega[:len(envelope)]) return u def recurrence_plot(signal, embed3, delay1, threshold_ratio0.2): # 相空间重构 N len(signal) - (embed-1)*delay X np.zeros((N, embed)) for i in range(N): X[i] signal[i:iembed*delay:delay] # 距离矩阵 dist np.linalg.norm(X[:,None,:] - X[None,:,:], axis2) threshold threshold_ratio * np.std(signal) RP (dist threshold).astype(np.float32) return RP def extract_rqa_features(RP): # 递归定量特征递归率、确定性等 N RP.shape[0] RR np.sum(RP) / (N*N) # 对角线长度分布简化 diag_lengths [] for i in range(-N1, N): d np.diagonal(RP, offseti) runs np.diff(np.where(np.diff(np.concatenate(([0], d, [0]))))[0])[::2] diag_lengths.extend(runs[runs1]) DET np.sum(diag_lengths) / np.sum(RP) if np.sum(RP)0 else 0 Lmean np.mean(diag_lengths) if diag_lengths else 0 return np.array([RR, DET, Lmean, np.std(diag_lengths)]) class CustomResNet: def __init__(self, input_shape(224,224,3), num_classes4): base tf.keras.applications.ResNet34(weightsimagenet, include_topFalse, input_shapeinput_shape) base.trainable True # 冻结前两层 for layer in base.layers[:60]: layer.trainable False x base.output x layers.GlobalAveragePooling2D()(x) x layers.Dense(256, activationrelu)(x) x layers.Dropout(0.5)(x) out layers.Dense(num_classes, activationsoftmax)(x) self.model Model(inputsbase.input, outputsout) self.model.compile(optimizertf.keras.optimizers.Adam(1e-4), losscategorical_crossentropy, metrics[accuracy]) def train(self, X, y, epochs30): self.model.fit(X, y, batch_size8, epochsepochs, validation_split0.2) def simulate_ultrasonic_signal(defect_typesingle): # 模拟超声背散射信号 t np.linspace(0, 1e-5, 1000) base np.sin(2*np.pi*5e6*t) * np.exp(-t*1e6) if defect_type single: defect 0.3*np.sin(2*np.pi*5.2e6*t) * np.exp(-(t-3e-6)**2/(1e-12)) elif defect_type cluster: defect 0.5*np.sin(2*np.pi*5.3e6*t) * (np.exp(-(t-2.5e-6)**2/(1e-12)) np.exp(-(t-3.5e-6)**2/(1e-12))) else: defect 0 return base defect if __name__ __main__: # 生成模拟信号并生成递归图 sig simulate_ultrasonic_signal(single) imfs vmd_decompose(sig, K3) rp_list [] for imf in imfs: rp recurrence_plot(imf, embed3, delay2) rp_list.append(rp) features extract_rqa_features(rp_list[0]) print(RQA features:, features) # 创建ResNet模型略缩 model CustomResNet() print(ResNet model created.) # 注实际训练需要大量图像数据