基于 Syslab 的电机振动频谱分析教学案例

可以直接用于课堂演示、上机实验或课程作业
案例自带数据生成脚本,无需额外准备真实电机振动数据
学生可以通过修改转速、故障幅值、噪声水平和采样频率观察频谱变化
可结合 MWORKS AI 辅助理解代码、修改参数和生成实验结论


一、案例简介

本案例以三相异步电机为对象,模拟电机在不同运行状态下的振动信号,通过时域分析和 FFT 频谱分析,帮助学生理解以下核心概念:

  • 时域信号与频域信号的转换(傅里叶变换)
  • 转频、倍频的概念及其物理意义
  • 不同机械故障对应的频谱特征
  • 基于频谱的旋转机械故障诊断基本方法

案例通过模拟数据生成、时域分析、FFT 频谱分析、故障特征识别等步骤,完整覆盖"信号采集→信号处理→特征提取→故障诊断"的教学链路。


二、适用课程

课程名称 对应内容
信号与系统 傅里叶变换、频谱分析
数字信号处理 FFT、采样定理、谱分析
测试技术 振动信号采集与处理
机械故障诊断 旋转机械故障特征提取
智能制造 设备状态监测与预测性维护
工业大数据入门 信号特征提取与数据驱动诊断

三、适用专业

  • 机械工程 / 机械设计制造及其自动化
  • 车辆工程 / 汽车工程
  • 自动化 / 电气工程及其自动化
  • 测控技术与仪器
  • 智能制造工程
  • 工业工程

四、建议课时

  • 课堂讲解:1 课时(45 分钟),讲解振动频谱分析原理
  • 上机实验:1-2 课时(45-90 分钟),运行脚本并完成实验任务
  • 课后拓展:学生自主完成,约 2-4 小时

五、学生基础要求

  • 了解正弦信号和基本数学概念
  • 了解微分/积分、复数(傅里叶变换基础)
  • 有基础的编程能力(推荐 Julia/MATLAB/Python 中任一种)
  • 对旋转机械(如电机、泵)有基本认识

六、教学目标

通过本案例,学生应能够:

  1. 理解 时域与频域的基本关系和傅里叶变换的物理意义
  2. 掌握 FFT 频谱分析的基本方法和参数设置
  3. 识别 转频、倍频、故障特征频率等概念
  4. 解释 不同电机故障(不平衡、不对中、松动、轴承故障)的频谱特征
  5. 应用 频谱分析进行旋转机械故障诊断的基本方法
  6. 操作 Syslab 进行信号生成、分析、可视化的完整流程

七、案例原理

7.1 电机振动基本概念

电机运行时,转子在轴承支撑下旋转。当电机处于理想状态时,振动信号平稳且幅值较低。当出现机械故障时,振动信号的频率成分会发生变化。

7.2 转频与倍频

  • 转频 (fr):转子每秒钟的旋转次数,单位 Hz
    • fr = 转速 (rpm) / 60
    • 本案例:1800 rpm → fr = 30 Hz
  • 1X:1 倍转频 = 30 Hz,基频振动
  • 2X:2 倍转频 = 60 Hz
  • NX:N 倍转频

7.3 傅里叶变换 (FFT)

傅里叶变换将时域信号转换为频域信号,揭示信号中不同频率成分的幅值分布。幅值谱的横轴为频率,纵轴为该频率对应的振动大小。

时域信号 x(t) —→ FFT —→ 频域信号 X(f) —→ 幅值谱 |X(f)|

7.4 常见故障的频谱特征

故障类型 频谱特征 物理原因
正常状态 1X 成分较弱,无明显倍频 转子平衡、对中良好、连接紧固
转子不平衡 1X 明显增强 质量不平衡产生每转一次的离心力
轴不对中 2X 明显增强 联轴器每转经历两次最大应力
机械松动 多个倍频增强 (1X, 2X, 3X, 4X) 非线性刚度导致多谐波响应
轴承故障 高频冲击,特征频率增强 滚动体经过缺陷位置产生冲击

八、快速开始

8.1 环境要求

  • Syslab 2024b 或更高版本
  • 需要安装的 Julia 包:FFTW, DataFrames, CSV

在 Syslab 中运行以下命令安装依赖:

import Pkg
Pkg.add(["FFTW", "DataFrames", "CSV"])

8.2 运行步骤

在 Syslab 中按顺序运行以下脚本:

# 第 1 步:生成模拟振动数据
include("src/01_generate_vibration_data.jl")

# 第 2 步:时域分析
include("src/02_time_domain_analysis.jl")

# 第 3 步:FFT 频谱分析
include("src/03_fft_spectrum_analysis.jl")

# 第 4 步:故障特征分析
include("src/04_fault_feature_analysis.jl")

# 第 5 步:可视化结果汇总
include("src/05_visualize_result.jl")

注意:脚本使用 @__DIR__ 确定相对路径,需在 src/ 目录下运行或以 include() 方式加载。

8.3 运行时间

  • 完整运行 5 个脚本约需 1-3 分钟
  • 主要耗时在 FFT 计算和图像生成

九、文件结构

motor_vibration_spectrum_analysis/
├── README.md                           # 本文件
├── data/                               # 数据目录(脚本自动生成)
│   ├── motor_vibration_data.csv        # 振动信号数据
│   ├── fault_peak_table.csv            # 故障峰值表
│   ├── time_domain_features.csv        # 时域特征表
│   └── analysis_report.txt             # 分析报告
├── src/                                # 源代码目录
│   ├── 01_generate_vibration_data.jl   # 数据生成
│   ├── 02_time_domain_analysis.jl      # 时域分析
│   ├── 03_fft_spectrum_analysis.jl     # FFT 频谱分析
│   ├── 04_fault_feature_analysis.jl    # 故障特征分析
│   └── 05_visualize_result.jl          # 可视化汇总
├── figures/                            # 结果图目录(脚本自动生成)
│   ├── time_waveform_compare.png       # 时域波形对比
│   ├── spectrum_compare.png            # 频谱对比
│   ├── spectrum_individual.png         # 单图频谱
│   ├── order_spectrum.png              # 阶次谱
│   ├── peak_marking_result.png         # 主峰标注
│   └── fault_feature_summary.png       # 故障特征总结
└── docs/                               # 教学文档
    ├── 学生实验指导书.md               # 学生用实验指导
    └── 教师使用建议.md                 # 教师用教学建议

十、数据字段说明

motor_vibration_data.csv

字段 含义 单位
time 时间 s
normal 正常状态振动加速度 m/s²
unbalance 转子不平衡振动加速度 m/s²
misalignment 轴不对中振动加速度 m/s²
looseness 机械松动振动加速度 m/s²
bearing_fault 轴承早期故障振动加速度 m/s²

数据参数:

参数
采样频率 2000 Hz
采样时长 5 s
采样点数 10000
电机转速 1800 rpm
转频 30 Hz

十一、电机转频与倍频说明

11.1 转速与转频的关系

$$\text{转频 } f_r = \frac{\text{转速 (rpm)}}{60}$$

例如:1800 rpm → fr = 1800/60 = 30 Hz

11.2 倍频表

倍频 频率 (Hz) 物理含义
0.5X 15 半速涡动(油膜振荡等)
1X 30 基频 / 转频 (Rotor Speed)
2X 60 2 倍转频 (常见于不对中)
3X 90 3 倍转频 (叶片通过频率等)
4X 120 4 倍转频
NX N × 30 N 倍转频

十二、FFT 频谱分析流程

原始时域信号
    │
    ▼
┌─────────────┐
│ 去均值/加窗  │  ← 减小频谱泄漏
└──────┬──────┘
       ▼
┌─────────────┐
│  FFT 变换   │  ← 时域 → 频域
└──────┬──────┘
       ▼
┌─────────────┐
│ 单边幅值谱   │  ← 只保留正频率
└──────┬──────┘
       ▼
┌─────────────┐
│  峰值识别    │  ← 找主频率成分
└──────┬──────┘
       ▼
┌─────────────┐
│ 倍频匹配分析  │  ← 与转频倍频对照
└──────┬──────┘
       ▼
┌─────────────┐
│  故障诊断    │  ← 根据频谱特征判断
└─────────────┘

十三、各类故障的频谱特征解释

13.1 正常状态

  • 频谱中 1X (30 Hz) 成分较弱(幅值约 0.15-0.30)
  • 高频噪声较低
  • 无明显的倍频峰

13.2 转子不平衡

  • 1X (30 Hz) 幅值明显增大(1-2 倍于正常状态)
  • 频谱主峰集中在 1X 位置
  • 原理:转子质心偏离旋转中心,产生每转一次的周期性离心力

13.3 轴不对中

  • 2X (60 Hz) 幅值明显增强
  • 可能同时存在 1X 成分
  • 原理:联轴器在每转一周经历两次最大变形(拉伸/压缩)

13.4 机械松动

  • 频谱中出现多个倍频峰(1X, 2X, 3X, 4X 等)
  • 各倍频幅值相对均衡
  • 原理:松动导致系统刚度非线性,产生谐波响应

13.5 轴承早期故障

  • 高频区域(>100 Hz)出现局部峰值
  • 时域中存在小幅周期性冲击
  • 原理:滚动体经过缺陷位置产生冲击,激励起高频振动

十四、运行结果说明

运行所有脚本后,将生成以下结果文件:

数据文件 (data/)

  1. motor_vibration_data.csv:5 类振动信号的完整时间序列数据
  2. fault_peak_table.csv:各工况在不同倍频位置 (1X-4X) 的幅值表
  3. time_domain_features.csv:各工况的时域统计特征
  4. analysis_report.txt:完整的频谱分析报告(含故障特征文字解释)

图像文件 (figures/)

  1. time_waveform_compare.png:5 类信号时域波形对比(0-0.5s 细节)
  2. spectrum_compare.png:5 类信号频谱叠加对比(0-300 Hz)
  3. spectrum_individual.png:各类信号单独频谱图(含倍频标注)
  4. order_spectrum.png:阶次谱(横轴为频率/转频,无单位)
  5. peak_marking_result.png:各类信号的主峰自动标注图
  6. fault_feature_summary.png:故障特征总结图(条形图+频谱叠加)

十五、教学使用建议

15.1 课堂演示方案

环节 时间 内容
案例背景讲解 10 min 电机振动监测和常见故障类型
FFT 原理讲解 15 min 时域、频域、转频和倍频概念
代码运行演示 15 min 运行数据生成和频谱分析脚本
参数修改实验 20 min 修改转速、故障幅值、噪声水平
结果讨论 20 min 分析不同故障对应的频谱特征
拓展任务 课后 增加新故障类型

详细内容见 docs/教师使用建议.md


十六、学生实验任务

基础任务(课堂完成)

  1. 运行所有脚本,观察输出结果
  2. 记录各工况的 1X、2X、3X 幅值
  3. 对比正常状态与故障状态的频谱差异
  4. 完成思考题

进阶任务(课后完成)

  1. 将转速从 1800 rpm 改为 1500 rpm,观察倍频位置变化
  2. 增大噪声水平,观察峰值识别的准确性变化
  3. 将采样频率从 2000 Hz 改为 1000 Hz,观察频谱变化
  4. 尝试修改数据生成脚本,增加新的故障类型(如转子碰摩)

详细内容见 docs/学生实验指导书.md


十七、MWORKS AI 辅助学习提示

学生可以通过以下提示词让 MWORKS AI 辅助学习:

理解代码

请解释 03_fft_spectrum_analysis.jl 中 FFT 频谱分析的实现逻辑。
请解释采样频率、采样点数和频率分辨率之间的关系。

修改参数

请将电机转速从 1800 rpm 改为 1500 rpm,并说明 1X、2X、3X 转频位置会发生什么变化。
请将噪声水平增大 3 倍,观察时域波形和频谱的变化。

扩展案例

请增加一种转子碰摩故障信号,并说明它可能在频谱中表现出哪些特征。
请将当前案例扩展为可以读取真实电机振动 CSV 数据的版本。

理论学习

为什么转子不平衡主要表现为 1X 转频增强,而轴不对中更容易出现 2X 成分?
FFT 的频谱泄漏是什么?如何通过加窗减少频谱泄漏?

实验报告

请根据频谱图结果,生成一段实验报告结论。
请帮我分析 fault_peak_table.csv 中的数据,总结不同故障的频谱特征。

十八、常见问题

Q1:运行脚本时提示 "FFTW not found"?
A:在 Syslab 中运行 import Pkg; Pkg.add("FFTW") 安装后重试。

Q2:如何查看更大的频率范围?
A:修改脚本中的 freq_limit 变量,例如从 300 改为 500。

Q3:能不能使用真实的电机振动数据?
A:可以。只需将真实数据按相同格式保存为 motor_vibration_data.csv,然后从脚本 02 开始运行。

Q4:图片中的中文显示为乱码?
A:请检查 Syslab 的系统字体设置,或尝试在脚本中指定中文字体。

Q5:如何修改电机转速?
A:修改脚本 01 中的 speed = 1800 变量,转频 fr 会自动重新计算。

Q6:为什么轴承故障频谱不如包络分析明显?
A:直接 FFT 对冲击类故障不够敏感。包络解调(Hilbert 变换 + 带通滤波 + FFT)是轴承故障诊断的进阶方法,已在本案例的拓展方向中提及。


十九、拓展方向

19.1 信号处理进阶

  • 加窗函数(汉宁窗、汉明窗、布莱克曼窗)的对比实验
  • 功率谱密度 (PSD) 分析
  • 短时傅里叶变换 (STFT) 进行时频分析
  • 小波变换分析非平稳信号

19.2 故障诊断进阶

  • 包络解调分析轴承故障特征频率
  • 倒频谱 (Cepstrum) 分析
  • 阶比分析(适用于变转速工况)
  • 多传感器数据融合

19.3 真实数据对接

  • 读入真实电机振动 CSV 数据
  • 添加数据预处理(去噪、去趋势)
  • 与振动测试实验台的数据对接

19.4 算法开发

  • 自动峰值提取算法优化
  • 基于阈值的故障自动分类
  • 机器学习方法(SVM/KNN/CNN)进行故障识别

附录

A. 推荐参考书目

  1. 《机械故障诊断学》- 钟秉林
  2. 《振动信号处理与分析》- 杨世锡
  3. 《数字信号处理——原理与实践》- 方勇
  4. 《旋转机械故障诊断技术》- 王济宇

B. 技术参数总览

参数 说明
采样频率 fs 2000 Hz 满足 Nyquist 采样定理 (> 2×最高频率)
采样时长 5 s 足够的分辨率 (Δf = 0.2 Hz)
采样点数 N 10000 fs × duration
频率分辨率 Δf 0.2 Hz fs / N
电机转速 1800 rpm 四极异步电机典型转速
转频 fr 30 Hz speed / 60
最大分析频率 300 Hz 10X 倍频范围