Почему мои функции интегрируются, а не дифференцируются? (Pywt.cwt) - PullRequest
1 голос
/ 03 марта 2020

Меня действительно смущает функция pywt.cwt, так как я не смог заставить ее работать. Функция, кажется, интегрирует, а не дифференцирует. Я хотел бы работать следующим образом: Пример CWT , но мой график выглядит так: Мой CWT . Идея состоит в том, чтобы интегрировать необработанный сигнал (av) с cumtrapz, затем дифференцировать с помощью гауссовой CWT (=> S1), а затем еще раз дифференцировать с гауссовой CWT (=> S2).

Как вы можете видеть на рисунках нижние пики красной линии должны располагаться в долинах, но земля под верхними пиками для меня, а зеленая линия должна сдвигаться на 1/4 периода влево, но движется вправо ... Что заставляет меня думать, что он почему-то интегрируется.

В настоящее время я понятия не имею, что вызывает это ... Кто-нибудь случайно знает, что происходит?

Заранее спасибо!

#Get data from pandas
av = dfRange['y']

#remove gravity & turns av right way up
av = av - dfRange['y'].mean()
av = av * -1


#Filter
[b,a] = signal.butter(4, [0.9/(55.2/2), 20/(55.2/2)], 'bandpass')
av = signal.filtfilt(b,a, av)

#Integrate and differentiate av => S1
integrated_av = integrate.cumtrapz(av)
[CWT_av1, frequency1] = pywt.cwt(integrated_av, 8.8 , 'gaus1', 1/55.2)
CWT_av1 = CWT_av1[0]
CWT_av1 = CWT_av1 * 0.05

#differentiate S1 => S2
[CWT_av2, frequency2] = pywt.cwt(CWT_av1, 8.8 , 'gaus1', 1/55.2)
CWT_av2 = CWT_av2[0]
CWT_av2 = CWT_av2 * 0.8

#Find Peaks
inv_CWT_av1 = CWT_av1 * -1
av1_min, _ = signal.find_peaks(inv_CWT_av1)
av2_max, _ = signal.find_peaks(CWT_av2)

#Plot
plt.style.use('seaborn')
plt.figure(figsize=(25, 7), dpi = 300)
plt.plot_date(dfRange['recorded_naive'], av, linestyle = 'solid', marker = None, color = 'steelblue')
plt.plot_date(dfRange['recorded_naive'][:-1], CWT_av1[:], linestyle = 'solid', marker = None, color = 'red')
plt.plot(dfRange['recorded_naive'].iloc[av1_min], CWT_av1[av1_min], "ob", color = 'red')
plt.plot_date(dfRange['recorded_naive'][:-1], CWT_av2[:], linestyle = 'solid', marker = None, color = 'green')
plt.plot(dfRange['recorded_naive'].iloc[av2_max], CWT_av2[av2_max], "ob", color = 'green')
plt.gcf().autofmt_xdate()
plt.show()
...