def phase_amplitude(signals, phase=True, amplitude=True):
"""Extract instantaneous phase and amplitude with Hilbert transform"""
# one dimension array
if signals.ndim == 1:
signals = signals[None, :]
one_dim = True
elif signals.ndim == 2:
one_dim = False
else:
raise ValueError('Impossible to compute phase_amplitude with ndim ='
' %s.' % (signals.ndim, ))
n_epochs, n_points = signals.shape
n_fft = compute_n_fft(signals)
sig_phase = np.empty(signals.shape) if phase else None
sig_amplitude = np.empty(signals.shape) if amplitude else None
for i, sig in enumerate(signals):
sig_complex = hilbert(sig, n_fft)[:n_points]
if phase:
sig_phase[i] = np.angle(sig_complex)
if amplitude:
sig_amplitude[i] = np.abs(sig_complex)
# one dimension array
if one_dim:
if phase:
sig_phase = sig_phase[0]
if amplitude:
sig_amplitude = sig_amplitude[0]
return sig_phase, sig_amplitude
评论列表
文章目录