从包含 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.welchthe 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。