这个预处理步骤对轴承振动信号进行了完整的信号处理流水线,我来详细讲解:

1. 数据读取与通道选择

1
2
3
def read_mat_any(path):
# 智能读取.mat文件,自动识别DE、FE、BA等通道
# 优先级:DE > FE > BA
  • 输入:161个源域.mat文件(轴承台架实验数据)
  • 通道选择:优先使用DE(驱动端)通道,其次FE(风扇端)、BA(基座)

2. 采样率统一与重采样

1
2
3
4
# 估计原始采样率(从time变量或文件名推断)
fs_src = 48000.0 if "48khz" in fpath.lower() else 12000.0
# 重采样到目标采样率32kHz
x = resample_to_uniform(x, fs_src, fs_out)
  • 作用:将不同采样率的数据(12kHz/48kHz)统一到32kHz
  • 目的:为后续神经网络提供一致的输入格式

3. 信号预处理流水线

3.1 去趋势

1
x = detrend(x)  # 去除线性趋势

3.2 阶次分析(Order Analysis)

1
x_ord, fs_ord = order_resample(x, fs_eff, rpm_val, spr=200)
  • 目的:将时域信号转换为角域信号,消除转速波动影响
  • 方法:根据转速将信号重采样到恒定每转采样点数(200点/转)

3.3 谱峭度自适应带通滤波

1
2
bands, freqs, sk = spectral_kurtosis_band(x, fs_eff, …)
x_bp = bandpass(x, fs_eff, f1, f2)
  • 谱峭度:识别信号中冲击成分最强的频带
  • 自适应带通:根据谱峭度结果自动选择最佳滤波频带
  • 效果:突出轴承故障特征,抑制背景噪声

3.4 包络分析

1
2
x_env = envelope(x_bp)  # Hilbert变换提取包络
x_norm = zscore(x_env) # Z-score归一化
  • 包络提取:获取高频载波信号的调制包络
  • 归一化:消除幅值差异,便于模型训练

3.5 时间窗口分割

1
wins = windowing(x_norm, fs_eff, win_sec=1.0, overlap=0.5)
  • 窗口长度:1秒
  • 重叠率:50%
  • 结果:每个文件被分割成多个1秒窗口

4. 输出数据

4.1 预处理窗口文件

  • 格式:1970个.npy文件
  • 内容:每个文件包含1秒的预处理信号(32000个采样点)
  • 命名{原文件名}__{窗口序号}.npy

4.2 索引文件(index.csv)

1
2
file,window,label,channel,f1,f2,rpm,fs
preprocessed/filename__0001.npy,OR,DE,1250.5,8750.2,1797,32000
  • 记录内容:文件路径、标签、通道、滤波频带、转速、采样率
  • 总数:1970行(窗口数)

4.3 类别分布统计

1
{'OR': 77, 'B': 40, 'IR': 40, 'N': 4}
  • OR:外圈故障(77个文件)
  • IR:内圈故障(40个文件)
  • B:滚动体故障(40个文件)
  • N:正常状态(4个文件)

5. 可视化操作

5.1 信号处理可视化(每个类别2个样本)

1
def plot_one_sample(figdir, recinfo, cfg, title_hint=""):

生成的图像包括:

  • 原始波形 (*_raw.png):时域原始信号
  • 带通滤波后 (*_bandpassed.png):滤波后的时域信号
  • 包络信号 (*_envelope.png):提取的包络信号
  • 功率谱密度 (*_psd.png):频域特性分析
  • 包络谱 (*_envelope_spectrum.png):包络的频谱,叠加轴承故障特征频率线
  • 谱峭度 (*_spectral_kurtosis.png):显示冲击特性分布

5.2 轴承故障特征频率标注

1
_, bpfo, bpfi, bsf, ftf = bearing_freqs(rpm_approx, n, d, D, theta_deg)

在包络谱上标注:

  • BPFI:内圈故障特征频率
  • BPFO:外圈故障特征频率
  • BSF:滚动体故障特征频率
  • FTF:保持架故障特征频率
  • 及其谐波(1倍、2倍频)

5.3 t-SNE降维可视化

1
tsne_overview(tsne_feats, tsne_labels, "tsne_overview.png")
  • 特征:对每个窗口的对数幅值谱进行t-SNE降维
  • 目的:直观展示不同故障类别的特征分布和可分性
  • 输出tsne_overview.png

6. 数据处理意义

  1. 机理导向:基于轴承故障机理设计的预处理流程
  2. 特征增强:通过包络分析突出故障冲击特征
  3. 自适应性:谱峭度自动选择最优频带
  4. 标准化:统一采样率和数据格式,便于深度学习
  5. 可解释性:保留转速、频带等物理参数信息

这个预处理步骤为后续的深度学习模型训练和迁移学习奠定了坚实的数据基础。


http://example.com/posts/137.html
作者
司马吴空
发布于
2026年3月30日
许可协议