資源簡介
傳統的經驗模態分解,適合初級的研究生學習故障診斷,信號處理方式。
代碼片段和文件信息
#-*-?coding:?utf-8?-*-
import?math
import?numpy?as?np
import?pylab?as?pl
import?matplotlib.pyplot?as?plt
import?scipy.signal?as?signal
from?scipy?import?fftpack
from?scipy.fftpack?import?fft?ifft
import?scipy.signal?as?signal
from?scipy?import?interpolate
#?判定當前的時間序列是否是單調序列
def?ismonotonic(x):
????max_peaks?=?signal.argrelextrema(x?np.greater)[0]
????min_peaks?=?signal.argrelextrema(x?np.less)[0]
????all_num?=?len(max_peaks)?+?len(min_peaks)
????if?all_num?>?0:
????????return?False
????else:
????????return?True
#?尋找當前時間序列的極值點
def?findpeaks(x):
????return?signal.argrelextrema(x?np.greater)[0]
#?判斷當前的序列是否為?IMF?序列
def?isImf(x):
????N?=?np.size(x)
????pass_zero?=?np.sum(x[0:N?-?2]?*?x[1:N?-?1]?0)??#?過零點的個數
????peaks_num?=?np.size(findpeaks(x))?+?np.size(findpeaks(-x))??#?極值點的個數
????if?abs(pass_zero?-?peaks_num)?>?1:
????????return?False
????else:
????????return?True
#?獲取當前樣條曲線
def?getspline(x):
????N?=?np.size(x)
????peaks?=?findpeaks(x)
????print?(‘當前極值點個數:‘?len(peaks))
????if?(len(peaks)?<=?3):
????????if?(len(peaks)?2):
????????????peaks?=?np.concatenate(([0]?peaks))
????????????peaks?=?np.concatenate((peaks?[N?-?1]))??#?這里是為了防止樣條次數不夠,無法插值的情況
????????t?=?interpolate.splrep(peaks?y=x[peaks]?w=None?xb=None?xe=None?k=len(peaks)?-?1)
????????return?interpolate.splev(np.arange(N)?t)
????t?=?interpolate.splr
評論
共有 條評論