如何使用python识别和区分EEG数据中的频率和时间?

信息处理 Python 脑电图
2022-02-12 05:18:46

我有一个 200 Hz 的 EEG 数据,采样频率为 4097。我对此数据几乎没有疑问和问题:

  1. 在 EEG 数据中采样是什么意思?
  2. 当我绘制数据时,我得到了采样率和频率,如下所示。不应该是时间和频率吗?

我不明白我在这里缺少什么。谁能解释我应该如何识别 EEG 数据的时间和频率?

脑电数据文件: http: //filesave.me/file/123174/eeg-txt.html

先感谢您。

上图的代码:

x = np.array([])
input = open('eeg.txt', 'r')
for file in input:
    file = file.replace(',','')
    x = np.append(x, float(file))
input.close()
plt.subplot(1, 1, 1)
plt.plot(x)
plt.ylabel('EEG signal')
plt.show()

FFT计算:

import numpy as np
x = np.array([])
input = open('eeg.txt', 'r')
for file in input:
    file = file.replace(',','')
    x = np.append(x, float(file))
input.close()
plt.subplot(1, 1, 1)
ff = fft(x)
plt.plot(ff)
plt.ylabel('EEG signal')
plt.show()

小波分解:

coeffs = wavedec(x, 'db4', level=6)
cA2, cD1, cD2,cD3,cD4,cD5,cD6 = coeffs

plt.subplot(7, 1, 1)
plt.plot(x)
plt.ylabel('Noisy Signal')
plt.subplot(7, 1, 2)
plt.plot(cD6)
plt.ylabel('noisy')
plt.subplot(7,1,3)
plt.plot(cD5)
plt.ylabel("gamma")
plt.subplot(7,1,4)
plt.plot(cD4)
plt.ylabel("beta")
plt.subplot(7,1,5)
plt.plot(cD3)
plt.ylabel("alpha")
plt.subplot(7,1,6)
plt.plot(cD2)
plt.ylabel("theta")
plt.subplot(7,1,7)
plt.plot(cD1)
plt.ylabel("delta")
plt.draw()
plt.show()

小波的结果: 在此处输入图像描述

3个回答

在 EEG 数据中采样是什么意思?

这样想吧。存在一些真正的 EEG 信号,但是当您“采样”时,您会抓取该信号的小片段,以尝试按照真实的方式重建它。该信号的频谱如下所示

脑电图谱

您必须以称为“奈奎斯特”的速率进行采样,以正确重建信号。这意味着该信号中最高频率的两倍。

另请注意 60 Hz 处的尖峰。这可能不是来自脑电图,而是来自你的电源线。你现在在哪里?60 Hz 噪声在 eeg/ekg 信号中非常常见。过滤掉。

当我绘制数据时,我得到了采样率和频率,如下所示。不应该是时间和频率吗?

如果您正在分析频谱(如图所示),通常会根据信号的幅度或功率绘制信号频率。另一方面,您可能希望在“时域”中查看信号。您可能拥有的是没有任何时间参考的“样本数”,但如果您知道采样率,那么您可以将 x 轴转换为时间。

samples = 1:4097;    % 4097 samples
Fs = 200;            % Sampling Frequency (Hz)
t = samples/Fs;      % Time Vector (seconds)

在此处输入图像描述

很难回答您的问题,因为您似乎没有 EEG 数据和/或一般信号处理方面的经验。

你说,你的数据是以 200 Hz 的频率采样的,这对我来说对于 EEG 数据来说似乎很好。

  1. 在 EEG 数据中采样是什么意思?这意味着,(连续)EEG 信号被分割成离散值。这对于使用计算机进行进一步的信号处理始终是必要的。

  2. 当我绘制数据时,我得到了采样率和频率,如下所示。不应该是时间和频率吗?

我不知道您在绘制数据时获得采样率和频率是什么意思。你当然不知道。采样率/频率是您的实验硬件给出的固定数字。你不能从你的数据中得到它——你必须从你的实验中知道它才能从你的数据中得到有意义的结果。

我也不知道应该是什么时间和频率?方法。您的脑电图数据肯定是随时间推移的电压信号,因此您在时域中有一个信号。

您的采样率是根据您的实验设置给出的,如您所说,为 200 Hz。因此,每个时间点由

Δt=1f=1200Hz=5ms

因此,您绘制的总信号是

4097×5×103s=20.485s
长。

这就是你从数据中知道的。任何进一步的数据提取取决于您或您的研究问题。如果您想获得信号中的频率,请尝试对其进行傅里叶变换并提取您感兴趣的频率区域。正如我所见,您在大约有一些明显的频率分量。13.4 赫兹、57.7 赫兹、81.0 赫兹和 88.0 赫兹。可能您只对 13.4 Hz 附近的较低频谱感兴趣...

好吧,你们很多人不理解这个问题可能是因为它没有被很好地问到。这是您的解决方案:

当您绘制 EEG 数据时,您会在 y 轴上获得幅度(这就是您所说的频率),在 x 轴上获得样本的数据点(这就是您所说的采样率)。

要在 x 轴上获取时间,这是您需要在 python 中执行的操作。回忆你的频率 = 200 Hz,这意味着你的时间变化是=1/200=0.005

在 python 中为你的 x 轴创建一个 np 数组,如下所示:

x_axis = []
samples = 4097
start = 0

for n in range(samples):
    X_axis.append(start)
    start = start + 0.005
x_axis = np.array(x_axis)

现在根据您的 EEG 数据 (y_axis) 绘制它以获得所需的波形。