从包含 EEG 数据的 3D 数组中提取 PSD 特征
Extract PSD features from a 3D array that contains EEG data
我是 EEG 信号处理的新手,我正在尝试实现一个使用 Python.
计算 PSD 特征的函数
此函数的输入是一个名为“trials”的 NumPy 3D 数组,大小为 (240, 2047, 16),其中包含以下形式的 EEG 数据:(trials x time x channels)
我需要为整个试验提取 PSD 特征,为每个通道和 return 所有结果的数组。
Fs 为 512Hz
到目前为止,这是我的代码:
from scipy import signal
def PSD(trials):
psd = []
fs = 512.
for i in range(len(trials)):
for j in range(len(trials[i])):
f, Pxx = signal.welch(trials[i][j], fs, nperseg = 16)
psd.append(Pxx)
psd = np.array(psd)
return psd
有没有更有效的方法来实现这个?
根据 scipy.signal.welch
的 the documentation,默认情况下,PSD 是在数组的最后一个轴上计算的。
这意味着您可以:
f, Pxx = scipy.signal.welch(trials, fs=512.0, nperseg=16)
Pxx
则形状为 (240, 2047, 9)
。在您的示例代码中,psd
的形状为 (491280, 9)
。如果您希望结果采用这种形状,只需重塑数组即可:
Pxx = Pxx.reshape(491280, 9)
此外,在您的示例代码中,您将样本频率附加到 psd
而不是 PSD,因此您当前的代码不会 return PSD。
我是 EEG 信号处理的新手,我正在尝试实现一个使用 Python.
计算 PSD 特征的函数此函数的输入是一个名为“trials”的 NumPy 3D 数组,大小为 (240, 2047, 16),其中包含以下形式的 EEG 数据:(trials x time x channels)
我需要为整个试验提取 PSD 特征,为每个通道和 return 所有结果的数组。
Fs 为 512Hz
到目前为止,这是我的代码:
from scipy import signal
def PSD(trials):
psd = []
fs = 512.
for i in range(len(trials)):
for j in range(len(trials[i])):
f, Pxx = signal.welch(trials[i][j], fs, nperseg = 16)
psd.append(Pxx)
psd = np.array(psd)
return psd
有没有更有效的方法来实现这个?
根据 scipy.signal.welch
的 the documentation,默认情况下,PSD 是在数组的最后一个轴上计算的。
这意味着您可以:
f, Pxx = scipy.signal.welch(trials, fs=512.0, nperseg=16)
Pxx
则形状为 (240, 2047, 9)
。在您的示例代码中,psd
的形状为 (491280, 9)
。如果您希望结果采用这种形状,只需重塑数组即可:
Pxx = Pxx.reshape(491280, 9)
此外,在您的示例代码中,您将样本频率附加到 psd
而不是 PSD,因此您当前的代码不会 return PSD。