✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
✅如需沟通交流,查看文章底部二维码
(1)非接触式多普勒激光振动测量系统搭建与信号采集:
针对传统接触式振动测量存在的信号失真问题,搭建基于激光多普勒效应的非接触式测振平台。系统包括激光头、信号处理器和数据采集卡,能够以非接触方式测量主轴表面的振动速度。在1000-5000rpm转速范围内以1000rpm为间隔,采集主轴正常、轴承磨损、刀具破损等状态下的振动信号。实验表明该系统能精确捕获各状态下的振动特征,为后续分析提供高质量数据。\n
(2)时频域多维特征提取与状态表征体系:
对采集的振动速度信号进行滤波降噪预处理后,分别提取时域和频域特征参数。时域特征包括均值、方差、峰值、峭度等,描述信号幅值变化和冲击特性;频域特征包括主频、谐波频率、频带能量等,表征频谱构成。对比分析发现故障状态下时域幅值更大、波动性更高,频域出现特定频率成分的显著增强。这些变化规律为状态识别模型提供了判别依据。\n
(3)神经网络状态识别模型与交叉验证优化:
基于提取的特征参数构建前馈BP神经网络识别模型。将数据集划分为训练集和测试集,采用交叉验证提高泛化能力。通过网格搜索优化网络层数、神经元个数、学习率等超参数。测试结果表明模型对主轴不同运行状态的平均识别准确率达到90%以上,能有效区分正常运行、轴承磨损和刀具破损状态,为机床智能运维提供了可靠的技术手段。
import numpy as np from sklearn.neural_network import MLPClassifier from sklearn.model_selection import GridSearchCV from scipy import signal # 模拟激光多普勒信号预处理 def laser_doppler_preprocess(raw_signal, fs, lowcut=10, highcut=1000): """带通滤波""" nyquist = fs/2 b, a = signal.butter(4, [lowcut/nyquist, highcut/nyquist], btype='band') filtered = signal.filtfilt(b, a, raw_signal) return filtered # 时域特征提取 def extract_time_features(signal): features = { 'mean': np.mean(signal), 'var': np.var(signal), 'peak': np.max(np.abs(signal)), 'rms': np.sqrt(np.mean(signal**2)), 'kurtosis': np.mean((signal - np.mean(signal))**4) / (np.std(signal)**4), 'crest_factor': np.max(np.abs(signal)) / np.sqrt(np.mean(signal**2)) } return np.array(list(features.values())) # 频域特征提取 def extract_freq_features(signal, fs): freqs, psd = signal.welch(signal, fs, nperseg=256) main_freq = freqs[np.argmax(psd)] features = { 'main_freq': main_freq, 'peak_amplitude': np.max(psd), 'band_energy_low': np.sum(psd[(freqs>=0)&(freqs<200)]), 'band_energy_mid': np.sum(psd[(freqs>=200)&(freqs<500)]), 'band_energy_high': np.sum(psd[(freqs>=500)&(freqs<1000)]) } return np.array(list(features.values())) # BP神经网络超参数优化 def optimize_bpnn(X_train, y_train): param_grid = { 'hidden_layer_sizes': [(50,), (100,), (50,50)], 'alpha': [0.0001, 0.001, 0.01], 'learning_rate_init': [0.001, 0.01] } mlp = MLPClassifier(max_iter=500, early_stopping=True) grid = GridSearchCV(mlp, param_grid, cv=5, scoring='accuracy') grid.fit(X_train, y_train) return grid.best_estimator_ # 状态识别流程 def spindle_status_diagnosis(vibration_signal, fs, best_model): filtered = laser_doppler_preprocess(vibration_signal, fs) time_feat = extract_time_features(filtered) freq_feat = extract_freq_features(filtered, fs) feats = np.concatenate([time_feat, freq_feat]).reshape(1, -1) pred = best_model.predict(feats) return pred[0] # 0:正常, 1:轴承磨损, 2:刀具破损如有问题,可以直接沟通
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇