Обнаружение альфа-волн в данных ЭЭГ через SNR?питон - PullRequest
0 голосов
/ 23 февраля 2019

Я пишу функцию, которая обнаруживает альфа-волны в режиме реального времени.Моя функция получает 256 выборочных значений одного канала в качестве аргумента.После этого его БПФ должен быть найден и затем классифицирован по альфа, бета и гамма диапазонам.Затем я должен найти SNR, чтобы проверить, присутствуют ли альфа-волны или нет, т.е. есть ли пик, который существует на частоте 10 Гц.Поэтому мне нужно найти квадрат амплитуды значений в 10 Гц, разделенный на сумму квадратов всех значений в ч / б диапазоне 8-12 Гц, разделенных на значения N.

SNR = Квадрат значения усилителя в 10 Гц / (Квадрат значений покоя в 8-12 Гц / № этих значений)

Затем 20 log SNR и проверьте порог.

Итак, в принципе, как получить квадрат Amp значений, которые находятся на 10 Гца затем исключить это значение и разделить на остальные значения.

Я написал приведенный ниже код для запуска, кто-то может помочь или дополнить код для выполнения желаемой работы.Большое спасибо.

Классификация 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])
...