通过SNR检测EEG数据中的Alpha波?蟒蛇

时间:2019-02-23 10:58:20

标签: python math pycharm signal-processing

我正在编写一个实时检测Alpha波的函数。我的函数接收单个通道的256个样本值作为参数。 之后,必须找到其fft,然后将其分类为alpha,beta和gamma范围。然后我必须找到SNR来检查是否存在alpha波,即在10 Hz的频率处是否存在任何峰值。因此,我需要找到10hz处的值幅度的平方除以8-12hz的b / w范围内的所有值的平方和除以N个值。

SNR = 10hz时的安培值平方/(8-12hz中的其余值平方/这些值的数量)

然后输入20 log SNR和检查阈值。

所以基本上,如何获得10hz处的Amp值的平方,然后排除该值并除以其余值。

我在下面编写了启动程序代码,有人可以指导或帮助您完成代码以完成所需的工作。 非常感谢。

def分类(标志,数据= []):

fs = 200  # Sampling rate (512 Hz)


# Get real amplitudes of FFT (only in postive frequencies)
fft_vals = np.absolute(np.fft.rfft(data))    #these are my fft values rfft returns only the part of the result that corresponds to nonpositive frequences. (Avoids complex conjugaes) faster and for plotting

# Get frequencies for amplitudes in Hz
fft_freq = np.fft.rfftfreq(len(data), 1.0 / fs)     # that might be fixed (window length n , and  sample spacing) inverse of the sampling rate   returns sample freq of length n .

# Define EEG bands
eeg_bands = {'Delta': (0, 4),
             'Theta': (4, 8),
             'Alpha': (8, 12),
             'Beta': (12, 30),
             'Gamma': (30, 45)}

# Take the mean of the fft amplitude for each EEG band
eeg_band_fft = dict()
for band in eeg_bands:
    freq_ix = np.where((fft_freq >= eeg_bands[band][0]) &   #np.where is like asking "tell me where in this array, entries satisfy a given condition".
                       (fft_freq <= eeg_bands[band][1]))[0]    #for fft_frreq at all point where it satisfies it returns the index (in array)
                                                             #if fftfreq[np.where bla bla] will give values array
    eeg_band_fft[band] = np.mean(fft_vals[freq_ix])

1 个答案:

答案 0 :(得分:0)

此代码已经在使用带通滤波器提取Alpha频率。现在,要查找特定频率下的SNR,您只需将该频率下的值除以其余频率,再求和即可得到20 log的除法。