scipy 希尔伯特变换的振幅包络未在带通信号上绘制

mdfafbf1  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(104)

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)
yptwkmov

yptwkmov1#

仔细查看Chan1_BP中的值。您将看到数组开头和结尾的值是nannanneurodsp.filt.filter_signal生成。filter_signal使用的默认过滤器是FIR filter,默认行为是用nan s填充输出,以获得无法用FIR滤波器的全长计算的值。
您可以通过传递remove_edges=False来更改该行为,例如:

Chan1_BP = filter_signal(Chan1, Fs, 'bandpass', (LBP,HBP), remove_edges=False)

进行此更改后,打印结果应与预期一致。

相关问题