趋势项和趋势项的导数
https://blog.csdn.net/xiaiming0/article/details/137904569?spm=1001.2014.3001.5501
提示:以下是本篇文章正文内容,下面案例可供参考
一、趋势项特征
二、趋势项
"""趋势项"""
# 创建 EMD 对象
emd = EMD()
# 对信号进行经验模态分解
IMFs = emd(data_yunsuan)
IMFs_num = 3
# 绘制原始信号和每个本征模态函数(IMF)
plt.figure(figsize=(15, 10))
plt.subplot(len(IMFs) + 1, 1, 1)
plt.plot(data_yunsuan_index, data_yunsuan, 'r')
plt.title("Original signal")
# 绘制emd分解后的结果
for num, imf in enumerate(IMFs):
plt.subplot(len(IMFs) + 1, 1, num + 2)
plt.plot(data_yunsuan_index, imf)
plt.title("IMF " + str(num + 1))
plt.show()
# 绘制趋势项
qushixiang = np.zeros((data_yunsuan_len))
for i in np.arange(1, IMFs_num + 1, 1):
qushixiang = qushixiang + IMFs[-i]
plt.figure()
plt.title("原始图像和趋势向")
plt.plot(data_yunsuan_index, data_yunsuan)
plt.plot(data_yunsuan_index, qushixiang, 'r')
plt.show()
data_yuanshi:你所要求趋势的特征,例如:在寿命预测中,可以是有效值。
IMFs_num:值越大越接近原振动信号,值越小越能刻画变化的趋势。
三、趋势项求导
"""拟合曲线求导"""
"""拟合曲线求导"""
data_start = data_yunsuan_index[0]
data_end = data_yunsuan_index[-1]
data_len = len(data_yunsuan) # 数据的长度
# 画原始曲线
t = np.linspace(data_start, data_end, data_len) # 横轴
yy = qushixiang # 纵轴
plt.figure()
plt.scatter(t, yy, marker=".")
plt.title("拟合前:趋势项")
plt.show()
# 画插值拟合的曲线图
f = interp1d(t, yy, kind="cubic") # 'linear', 'zero', 'slinear', 'quadratic', 'cubic', 4, 5
xx = np.linspace(t.min(), t.max(), 5000)
yynew = f(xx)
# 挨个求导画图
a = np.empty((data_len - 2)) # 边界不可求导
tt1 = np.empty((data_len - 2))
x_weizhi = t[1:-1]
dx = t[0] - t[1]
for i_index, i in enumerate(range(data_len - 2)):
a[i] = derivative(f, x_weizhi[i_index], dx) # 求导,第二个参数是求导位置,第三个参数是dx
plt.figure(figsize=(15,8))
plt.plot(xx, yynew)
plt.plot(x_weizhi, a * (max(yynew) / max(a)), color="r")
plt.hlines(0, min(x_weizhi), max(x_weizhi), colors="y", linestyles="dashed")
for i_index, i in enumerate(a):
if i_index > 0:
if a[i_index - 1] * a[i_index] < 0:
plt.vlines(i_index, min(a * (max(yynew) / max(a))), max(yynew), colors="y", linestyles="dashed", linewidth=0.5)
plt.title("趋势项和其导数")
plt.show()
plt.figure()
plt.title("趋势项求导")
plt.hlines(0, min(x_weizhi), max(x_weizhi), colors="y", linestyles="dashed")
plt.plot(a)
plt.show()
四、结果
由于在现实生活中,机器在空载和带载这两种大的状态间变化,有些时候带载时,载荷也是在不断变化。这是一个很大的问题。所以选取一个标准状态(我觉得是空载)下的特征进行跟踪很重要。因为生产的产品在变,转速也在变,载荷也在变,但是空载状态是不变的,再该状态下的特征受工况影响而产生的变化不大。