gpt4 book ai didi

python - EEG 信号的带宽

转载 作者:太空宇宙 更新时间:2023-11-04 09:05:33 27 4
gpt4 key购买 nike

我正在尝试在 Python 中对 EEG 信号执行 FFT,然后根据带宽确定它是 alpha 信号还是 beta 信号。它看起来不错,但结果图与它们应该的完全不同,频率和幅度值不是我预期的。感谢任何帮助,这是代码:

from scipy.io import loadmat
import scipy
import numpy as np
from pylab import *
import matplotlib.pyplot as plt

eeg = loadmat("eeg_2013.mat");
eeg1=eeg['eeg1'][0]
eeg2=eeg['eeg2'][0]
fs = eeg['fs'][0][0]
fft1 = scipy.fft(eeg1)
f = np.linspace (fs,len(eeg1), len(eeg1), endpoint=False)
plt.figure(1)
plt.subplot(211)
plt.plot (f, abs (fft1))
plt.title ('Magnitude spectrum of the signal')
plt.xlabel ('Frequency (Hz)')
show()
plt.subplot(212)
fft2 = scipy.fft(eeg2)
f = np.linspace (fs,len(eeg2), len(eeg2), endpoint=False)
plt.plot (f, abs (fft2))
plt.title ('Magnitude spectrum of the signal')
plt.xlabel ('Frequency (Hz)')
show()

情节: img

最佳答案

为了获得 fft 频率数组,您应该使用 fftfreq ;它为您提供了一系列用作横坐标的频率:

from scipy.fftpack import fftfreq

eeg = loadmat("eeg_2013.mat");
eeg1=eeg['eeg1'][0]
eeg2=eeg['eeg2'][0]
fs = eeg['fs'][0][0]
fft1 = scipy.fft(eeg1)
f=fftfreq(eeg1.size,1/fs)

抱歉,我无法在真实条件下测试此代码,因为您没有发布数据示例,但我希望这应该有效。

关于如何确定带宽,据我了解,你想得到基频。有不同的方法,或多或少复杂,无论你的信号是否有噪声,......在你的情况下,你只想知道基频 f0 是否在 8-13Hz(alpha)或 13-30Hz(beta)范围内);一种非常简单的方法是计算 8-13Hz 范围内的 fft 最大值:fft1[(f>8) & (f<13)].max()如果它大于,比方说,1000,那就是 alpha 波,否则就是 beta 波。如果您的信号不太相似,请发布一些不同种类的样本示例和您将得到的结果,以便我们可以尝试更复杂的算法。

关于python - EEG 信号的带宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com