您好,我是用EEMD对实际振动信号进行分解,分解结果是这样的:
不太清楚如果看分解效果咋样,就用您的一篇博客中用fft画频谱图的方法,作出下图:
感觉效果很差,请问我该如果改进呀?
(已知的采样频率不清楚是否正确 会影响分解结果吗?)
这是我的代码,如果可以的话,麻烦您帮忙看一下~非常感谢
def signal_eemd(S):
# 这里是根据我的数据计算的时间
Ts = 1 / 12000 #采样时间间隔 采样频率12kHz
t = np.linspace(0, 2047 * Ts, num=2048) #创建等差数列 开始时间--结束时间 点数 2048个点 2047间隔
# t = np.array(t) #
eemd = EEMD()
eemd.trials = 1000 # 500 添加噪声次数
eemd.noise_seed(12345)
eemd.noise_width = 0.1 #高斯噪声标准差 0.01~0.4
eIMFs = eemd.eemd(S, t, -1) #EEMD分解
nIMFs = eIMFs.shape[0] #IMF分量的个数
#----频谱图
def fft_img(a, b):
Fs = 12000
N = 2048
# Ts = 1.0/Fs
# t = np.arange(2048)
k = np.arange(N)
T = N/Fs
frq = k/T
frq1 = frq[range(int(N/2))]
plt.rcParams['figure.figsize']=(12.8, 7.2)
plt.subplot(8, 1, 1)
data_f = abs(np.fft.fft(a)) / N
data_f1 = data_f[range(int(N/2))]
plt.plot(frq1, data_f1, 'red')
plt.title('outer')
for i in range(0, 7): #前7个IMF
plt.subplot(8, 1, i+2)
data_f2 = abs(np.fft.fft(b[i])) / N
data_f3 = data_f2[range(int(N / 2))]
plt.plot(frq1, data_f3, 'red')
plt.xlabel('pinlv(hz)')
plt.ylabel('IMF{}'.format(i + 1))
# plt.locator_params(axis='y', nbins=3) #刻度
plt.tight_layout()
plt.show()
不知道你说的这个是谁的代码,为什么不直接找文章作者提问呢。