首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的功能似乎是集成的,而不是区分的?(pywt.cwt)

为什么我的功能似乎是集成的,而不是区分的?(pywt.cwt)
EN

Stack Overflow用户
提问于 2020-03-03 12:26:16
回答 1查看 216关注 0票数 2

我对函数pywt.cwt感到非常困惑,因为我一直无法让它工作。这个函数似乎是集成的,而不是区别的。我想将其工作如下:示例CWT,但是我的图形看起来如下:我的CWT。其思想是将原始信号(av)与累积量积分,然后用高斯小波变换(=> S1)进行鉴别,然后再与高斯小波变换(=> S2)进行区分。

如图所示,红线底部的山峰应该在山谷中排列,而山顶下的土地对我来说,绿线应该向左移动1/4,但向右移动.这让我觉得它是因为某种原因整合起来的。

我现在不知道是什么原因.有没有人碰巧知道发生了什么事?

提前感谢!

代码语言:javascript
复制
#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()
EN

回答 1

Stack Overflow用户

发布于 2022-02-11 14:11:54

我不确定这是你的答案,但我在和pywt玩的时候观察到.

文档出发,小波基本上是由高斯的微分给出的,但存在一个阶相关的归一化常数。

绘制Guassian与小波的微分(通过输入脉冲响应来提取)提供如下结果:

有趣的观察是,顺序依赖的正常化常数有时似乎包括一个'-1‘。特别是,它适用于一阶gaus1

所以,我的问题是,你真的可以像你所期望的那样进行微分,但也可以乘以-1?

图的代码:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt

import pywt

dt = 0.01
t = dt * np.arange(100)

# Calculate the differentials of a gaussian by quadrature:
# start with the gaussian y = exp(-(x - x_0) ^ 2 / dt)
ctr = t[len(t) // 2]
gaus = np.exp(-np.power(t - ctr, 2)/dt)
gaus_quad = [np.gradient(gaus, dt)]
for i in range(7):
    gaus_quad.append(np.gradient(gaus_quad[-1], dt))

# Extract the wavelets using the impulse half way through the dataset
y = np.zeros(len(t))
y[len(t) // 2] = 1
gaus_cwt = list()
for i in range(1, 9):
    cwt, cwt_f = pywt.cwt(y, 10, f'gaus{i}', dt)
    gaus_cwt.append(cwt[0])

fig, axs = plt.subplots(4, 2)

for i, ax in enumerate(axs.flatten()):
    ax.plot(t, gaus_cwt[i] / np.max(np.abs(gaus_cwt[i])))
    ax.plot(t, gaus_quad[i] / np.max(np.abs(gaus_quad[i])))
    ax.set_title(f'gaus {i+1}', x=0.2, y=1.0, pad=-14)
    ax.axhline(0, c='k')
    ax.set_xticks([])
    ax.set_yticks([])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60507260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档