gpt4 book ai didi

python - 确定振荡信号上的事件位置

转载 作者:行者123 更新时间:2023-12-01 04:05:11 25 4
gpt4 key购买 nike

我正在进行事件驱动的集成,其中一个事件应该检测信号的幅度何时低于某个值/限制。

例如,衰减的正弦信号:

signal = sin(t)*exp(-t/50)
limit = 0.05

Decaying sine signal

从图中可以看出,在t =~ 90时应该满足条件。虽然我可以看到它,但我想在积分过程中以数字方式获取位置。我怎样才能做到这一点?如何定义条件?

注意:如果我只是第一次跨越 limit = 0.05,它会发生在 t =~ 0.05,这显然不是我想要的。

最佳答案

您可以使用scipy.signal.hilbert计算包络:

import numpy as np
from scipy import signal

# Add some padding to limit the periodic extension effect
padlen = int(np.floor(0.1*len(x)))
y = np.pad(x, (0,padlen), mode='edge');
# Compute the envelope
envelope = np.abs(signal.hilbert(y));
# Truncate to the original signal length
envelope = envelope[:-padlen]

或者使用简单的diode detector实现:

def diode_detector(x,alpha):
xmax = abs(x[0])
y = np.array(x)
for i in np.arange(len(x)):
if (xmax < abs(x[i])):
xmax = abs(x[i])
else:
xmax = alpha*xmax
y[i] = xmax
return y

# you may need to tweak the alpha parameter depending on your signal bandwidth
envelope = diode_detector(x,0.9997)

那么这只是计算触发位置的问题:

T = t[1]-t[0]
print T*np.min(np.where(envelope < limit))

关于python - 确定振荡信号上的事件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35721100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com