参考资料:
书籍:机械故障诊断及典型案例解析(第2版,时献江)
目录
摘要
1. 机械系统振动的概念及分类
1.1 机械振动的基本概念
1.2 机械振动的分类
1.3 机械振动的描述
2. 实战代码
3. 总结
摘要
自由振动、受迫振动、自激振动是怎么区分的?
1、机械振动的概念及分类
1.1 机械振动的基本概念
1.1 机械振动的分类
(1) 按产生振动的原因分类
自由振动:给系统一定的初始能量后所产生的振动。若系统无阻尼,则系统维持等幅振动;若系统有阻尼,则系统为自由衰减振动。
受迫振动:元件或系统的振动是由周期变化的外力作用所引起的,如不平衡、不对中所引起的振动。
自激振动:在没有外力作用下,只是由于系统自身的原因所产生的激励引起的振动,如旋转机械的油膜振荡、喘振等。
(2) 按激振频率与工作频率的关系分类
同步振动:机械振动频率与旋转转速同步(即激振频率等于工作频率),由此产生的振动称为同步振动。例如转子不平衡会激起转子的同步振动。
亚同步振动:振动频率小于机械的旋转频率的振动称为亚同步振动,滑动轴承的油膜涡动频率约为同步旋转频率的一半,是典型的亚同步振动。
(3) 按振动所处频段分类
低频振动,
采用低通滤波器(截止频率
中频振动,
采用高通或带通滤波器滤除低频信号,再进行相关谱分析等处理。这个频段通常包含设备的结构共振故障频率成分,可采用加速度传感器获得。通常需要采用包络解调或细化等特殊信号处理方法,提取结构共振频率调制的低频故障信息,避免其他部件的低频段故障频率的影响。
高频振动,
这个频段仅用于滚动轴承诊断的冲击脉冲法,采用加速度传感器的谐振频率来获取故障的冲击能量等。
(4) 按描述系统的微分方程分类
(5) 按振动系统的自由度分类
(6) 按振动的运动规律分类
图1 机械振动的分类
下面主要依据这种分类方式,分别对机械振动进行进一步详细描述
1.3 机械振动的描述
(1) 简谐振动
图2 简谐振动
式中
图3 简谐信号及其频谱
(2) 周期振动
式中,
图4 两个正弦信号的叠加(有公共周期)
图4所示是两个简谐振动信号叠加成一个周期振动信号的例子。两个简谐信号
合成信号
(3) 非周期振动
① 准周期振动
图5 两个正弦信号的叠加(无公共周期)
② 瞬态振动
图6 自由衰减振动
(4) 随机振动
图7 某机器振动信号
2、实践代码
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
plt.rcParams['axes.unicode_minus'] = False # 显示负号
font = {'family': 'Times New Roman', 'size': '20', 'color': '0.5', 'weight': 'bold'}
##========生成第1个模拟信号=======##
fs = 100 # 采样率100Hz
f1 = 2
t = np.linspace(0, 10, 10*fs) # 采集时长10s
x1 = 10*np.sin(2*np.pi*f1*t+np.pi/6) # x1(t)=10sin(2*pi*2*t+pi/6)
# 绘制时域图
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.title('时域图')
plt.plot(t, x1, label='x1(t)=10sin(2*pi*2*t+pi/6)', color='b')
plt.xlabel('时间 (s)')
plt.ylabel('幅值')
plt.legend()
plt.show()
##========生成第2个模拟信号=======##
fs = 100 # 采样率100Hz
f2 = 3
t = np.linspace(0, 10, 10*fs) # 采集时长10s
x2 = 5*np.sin(2*np.pi*f2*t+np.pi/3) # x1(t)=10sin(2*pi*2*t+pi/6)
# 绘制时域图
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.title('时域图')
plt.plot(t, x2, label='x2(t)=5sin(2*pi*3*t+pi/3)', color='b')
plt.xlabel('时间 (s)')
plt.ylabel('幅值')
plt.legend()
plt.show()
##========生成第3个模拟信号=======##
x3 = x1 + x2
# 绘制时域图
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.title('时域图')
plt.plot(t, x3, label='x1(t)+x2(t)', color='b')
plt.xlabel('时间 (s)')
plt.ylabel('幅值')
plt.legend()
plt.show()
##========生成第3个信号FFT图=======##
# 计算频域图
fft_result = np.fft.fft(x3)
fft_freq= np.fft.fftfreq(len(x3), d=t[1]-t[0]) # FFT频率
fft_amp= 2*np.abs(fft_result)/len(t) # FFT幅值
# 绘制频域图
plt.subplot(2, 1, 2)
plt.title('频域图')
plt.plot(fft_freq[0: int(len(t)/2)], fft_amp[0: int(len(t)/2)], label='Frequency Spectrum', color='b')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅值')
plt.legend()
plt.tight_layout()
plt.show()
输出结果:
##========生成第1个模拟信号=======##
fs = 100 # 采样率100Hz
f1 = np.sqrt(3)
t = np.linspace(0, 10, 10*fs) # 采集时长10s
x1 = 0.9*np.sin(2*np.pi*f1*t+np.pi/6) # x1(t)=10sin(2*pi*2*t+pi/6)
# 绘制时域图
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.title('时域图')
plt.plot(t, x1, label='x1(t)=10sin(2*pi*2*t+pi/6)', color='b')
plt.xlabel('时间 (s)')
plt.ylabel('幅值')
plt.legend()
plt.show()
##========生成第2个模拟信号=======##
fs = 100 # 采样率100Hz
f2 = 2
t = np.linspace(0, 10, 10*fs) # 采集时长10s
x2 = 0.9*np.sin(2*np.pi*f2*t+np.pi/3) # x1(t)=10sin(2*pi*2*t+pi/6)
# 绘制时域图
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.title('时域图')
plt.plot(t, x2, label='x2(t)=5sin(2*pi*3*t+pi/3)', color='b')
plt.xlabel('时间 (s)')
plt.ylabel('幅值')
plt.legend()
plt.show()
##========生成第3个模拟信号=======##
x3 = x1 + x2
# 绘制时域图
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.title('时域图')
plt.plot(t, x3, label='x1(t)+x2(t)', color='b')
plt.xlabel('时间 (s)')
plt.ylabel('幅值')
plt.legend()
plt.show()
##========生成第3个信号FFT图=======##
# 计算频域图
fft_result = np.fft.fft(x3)
fft_freq= np.fft.fftfreq(len(x3), d=t[1]-t[0]) # FFT频率
fft_amp= 2*np.abs(fft_result)/len(t) # FFT幅值
# 绘制频域图
plt.subplot(2, 1, 1)
plt.title('频域图')
plt.plot(fft_freq[0: int(len(t)/2)], fft_amp[0: int(len(t)/2)], label='Frequency Spectrum', color='b')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅值')
plt.legend()
plt.tight_layout()
plt.show()
##========生成第1个模拟信号=======##
fs = 100 # 采样率100Hz
f1 = 3 # 频率
n = 0.5 # 衰减系数
t = np.linspace(0, 10, 10*fs) # 采集时长10s
x4 = 10*np.exp(-n*t)*np.sin(2*np.pi*f1*t+np.pi/6) # x1(t)=10sin(2*pi*2*t+pi/6)
# 绘制时域图
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.title('时域图')
plt.plot(t, x4, label='$x_4(t)=10e^{-0.5 t}sin(2\pi3t)$', color='b')
plt.xlabel('时间 (s)')
plt.ylabel('幅值')
plt.legend()
plt.show()
##========生成衰减信号FFT图=======##
# 计算频域图
fft_result = np.fft.fft(x3)
fft_freq= np.fft.fftfreq(len(x4), d=t[1]-t[0]) # FFT频率
fft_amp= 2*np.abs(fft_result)/len(t) # FFT幅值
# 绘制频域图
plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)
plt.title('频域图')
plt.plot(fft_freq[0: int(len(t)/2)], fft_amp[0: int(len(t)/2)], label='Frequency Spectrum', color='b')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅值')
plt.legend()
plt.tight_layout()
plt.show()
3、总结
自由振动、受迫振动、自激振动是怎么区分的?
自由振动:无外界力干扰、由本身的初始动能引起的振动,如钟摆运动
受迫振动:有外界力干扰的振动,如不平衡、不对中
自激振动:无外界力干扰,由系统本身产生的激励引起的振动,如油膜振动、喘振
多个振动信号叠加后的公共周期是所有叠加信号的周期的最小公倍数,如果公倍数为实数,则为周期振动;如果公倍数为无穷大,则为准周期振动。
注明
本文内容摘抄自《机械故障诊断及典型案例解析》,仅供学习交流,若有侵权,烦请联系处理!
参考文献
[1] 《机械故障诊断及典型案例解析,第2版,时献江等,2020年第一次印刷》