Python 信号处理——包络分析
前言
设备在正常状态下,其输出的信号主要为工频或者噪声。当设备出现故障时,设备正常状态下的信号会被故障调制,输出复合信号。由于故障信号大多相对为低频信号,因此在设备信号分析中,包络分析常用于故障特征的提取,即包络分析可提取复合信号中的低频调制部分。
包络分析的方法有多种,其中基于希尔伯特(hilbert)的方法最为常用,本篇主要基于hilbert变换来提取信号的包络谱
二、使用步骤
1.主函数
代码如下(示例):
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
def Envelop(x, fs):
xh = signal.hilbert(x)
xe = np.abs(xh)
xe = xe - np.mean(xe)
xh3 = np.fft.rfft(xe) / len(xe)
mag = abs(xh3) * 2
fre = np.linspace(0, fs / 2, int(len(xe) / 2 + 1))
return mag, fre
2.demo
代码如下(示例):
w = 5
z = 30
fs = 1024
fsw = 5
time = 1
f = w * z
t = np.linspace(0, time - 1 / fs, int(time * fs))
x = (1 + 1 * np.sin(2 * np.pi * 20 * t)) * \
np.sin(2 * np.pi * f * t)
amp, fre = Envelop(x, fs)
plt.subplot(2, 1, 1)
plt.plot(t, x)
plt.ylabel('Amplitude')
plt.xlabel('time')
plt.subplot(2, 1, 2)
plt.plot(fre, amp)
plt.ylabel('Amplitude')
plt.xlabel('Frequency')
plt.show()
总结
如果信号是由低频加高频线性叠加组成,那么包络分析有可能会产生错误的分析结果,这点在实际使用过程中需要注意。欢迎各位同行交流,后续有啥想实现的信号处理功能,请在下方评论区留言,或者关注公众号(PS提现更新):不说话上代码