Data clip I'm using
我尝试对连接的EEG信号进行带通,然后应用希尔伯特变换并取希尔伯特的绝对值以获得瞬时功率(例如,here)。带通信号看起来很好(第一个图),原始信号的希尔伯特看起来很好(第二个图),但带通信号的希尔伯特没有出现(最后一个图)。结果数组为:[南+南+南+南...南+南+南+南+南+南]。
可重现错误:
import numpy as np
from neurodsp.filt import filter_signal
from scipy import signal
import matplotlib.pyplot as plt
Fs = 1024
LBP, HBP = 1, 100
Chan1 = np.loadtxt('SampleData')
Chan1_BP = filter_signal(Chan1, Fs, 'bandpass', (LBP,HBP))
analytical_signal = signal.hilbert(Chan1)
amplitude_envelope = np.abs(analytical_signal)
# Show bandpassed signal works:
fig0 = plt.figure(figsize=(10, 8))
plt.plot(Chan1)
plt.plot(Chan1_BP)
fig1 = plt.figure(figsize=(10, 8))
plt.plot(Chan1)
plt.plot(amplitude_envelope)
# Now with bandpassed signal
analytical_signal = signal.hilbert(Chan1_BP)
amplitude_envelope = np.abs(analytical_signal)
fig2 = plt.figure(figsize=(10, 8))
plt.plot(Chan1_BP)
plt.plot(amplitude_envelope)
1条答案
按热度按时间yptwkmov1#
仔细查看
Chan1_BP
中的值。您将看到数组开头和结尾的值是nan
。nan
由neurodsp.filt.filter_signal
生成。filter_signal
使用的默认过滤器是FIR filter,默认行为是用nan
s填充输出,以获得无法用FIR滤波器的全长计算的值。您可以通过传递
remove_edges=False
来更改该行为,例如:进行此更改后,打印结果应与预期一致。