绘制脑电信号的 PSD - python

Plotting the PSD of EEG signals - python

提问人:NMA 提问时间:11/7/2023 最后编辑:NMA 更新时间:11/10/2023 访问量:50

问:

我有这行代码来计算和绘制原始脑电图信号的 psd

我尝试的第一个样品,我从以下位置取了 Sub-S01https://openneuro.org/datasets/ds004367/versions/1.0.2

我厌倦了第二个样本,我从以下地点拿走了 SUB-002https://openneuro.org/datasets/ds002718/versions/1.0.5

psds, freqs = raw.compute_psd(method="welch", fmin=1, fmax=100, 
              tmin=0, tmax=120, n_fft=n_fft, 
              picks=picks, verbose=True).plot()

虽然我得到了这张图,但这是第一个充足的:请点击查看图表 1

第二个样本的图表:请点击查看图表 2

对于上面的代码行,我收到错误,上面写着:TypeError:无法解压缩不可迭代的 MNELineFigure 对象

而且我不知道这些图表是否应该看起来像这样,而且两者如何在中间发出相同的高信号是没有意义的。

我还想添加以下参数:

dB=True, estimate='power'

但我也收到错误: TypeError:得到意外的关键字参数 dB,估计 PSD 方法“welch”

因此,如果您知道如何修复错误,以及添加参数的另一种方法,那就太好了。谢谢!

信号处理 mne-python 时频 eeglab

评论

0赞 W_999 11/7/2023
您能分享一个信号数据样本吗?帮助会更容易。
0赞 NMA 11/8/2023
@W_999当然,我在上面的问题中添加了示例源,因为我无法直接共享文件。

答:

0赞 W_999 11/10/2023 #1

第一个错误来自以下事实:compute_psd() 方法返回一个对象,您尝试将其连续分配给两个变量。让我们将结果分配给一个变量:

x = raw.compute_psd(method="welch", fmin=1, fmax=100, tmin=0, tmax=120, n_fft=n_fft, picks=picks, verbose=True).plot()

如果要以 nd 数组的形式获取数据,可以使用以下方法:

psds, freqs = x.get_data(return_freqs=True)

您提到的 dbestimate 参数不在这两种方法的语法中,这就是出现此错误的原因。我建议你看一下MNE文档

您可以使用 MNE 以外的任何绘图仪以 ndarray 格式可视化 get_data() 获得的数据,但您也可以使用 MNE 中可用的 plot() 方法可视化作为 compute_psd() 获得的对象(在我们的例子中为变量 x)。您可以在链接中找到语法和参数。

同时,脑电图谱上50 Hz的高峰值当然是有道理的。脑电信号的幅度足够低,以至于在它们的频谱中可以看到来自交流电的干扰,而交流电正好是 50 Hz。因此,在处理EEG信号时,必须设计一个滤波器来抑制该频率。