Извлечение дельта, тета, альфа, бета и гамма-волн из сигналов - PullRequest
0 голосов
/ 16 октября 2018

Я хочу получить дельта, тета, альфа, бета и гамма-волны из набора сигналов.И вот как до сих пор я делаю это: -

fs = 256
data=copy.deepcopy(features[:100])
data=np.reshape(data,(len(data),256,64))

# Get real amplitudes of FFT (only in postive frequencies)
fft_vals=[] 
for d in data:
    fft_vals.append(np.absolute(np.fft.fft2(d)))
fft_vals = np.array(fft_vals) 
print(fft_vals.shape)

# Get frequencies for amplitudes in Hz
fft_freq = np.fft.fftfreq(len(data), 1.0/fs)    
print(fft_freq.shape)      #(100)


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

delta=[]
theta=[]
alpha=[]
beta=[]
gamma=[]

delta_labels=[]
theta_labels=[]
alpha_labels=[]
beta_labels=[]
gamma_labels=[]

delta_real=[]
theta_real=[]
alpha_real=[]
beta_real=[]
gamma_real=[]

# 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]) & 
                       (fft_freq <= eeg_bands[band][1]))[0]
    print(freq_ix.shape)   #prints first value of shape of each wave
    if band=='Delta':
        delta_real=data[freq_ix]
        delta_labels=labels[freq_ix]
        delta=fft_vals[freq_ix]
    elif band=='Theta':
        theta_real=data[freq_ix]
        theta_labels=labels[freq_ix]
        theta=fft_vals[freq_ix]
    elif band=='Alpha':
        alpha_real=data[freq_ix]
        alpha_labels=labels[freq_ix]
        alpha=fft_vals[freq_ix]
    elif band=='Beta':
        beta_real=data[freq_ix]
        beta_labels=labels[freq_ix]
        beta=fft_vals[freq_ix]
    elif band=='Gamma':
        gamma_real=data[freq_ix]
        gamma_labels=labels[freq_ix]
        gamma=fft_vals[freq_ix]
    eeg_band_fft[band] = np.mean(fft_vals[freq_ix])


print(delta.shape)
print(theta.shape)
print(alpha.shape)
print(beta.shape)
print(gamma.shape)

Но я получаю это как вывод как вывод формы всех волн: -

(2,256,64)
(2,256,64)
(1,256,64)
(7,256,64)
(6,256,64)

ТАК почемуя получаю только 18 значений, где мои данные имеют 100 значений?Я видел масло, которое стоило бы получить все 5 волн, но оно также не работает должным образом, поэтому я уверен, что я не понимаю его правильно, может кто-нибудь сказать мне, как я могу получить 5 волн, когда набор данных сигналов пропущен?Любая помощь будет высоко ценится.

Диапазон моих исходных данных почти от -19 до +30.И после применения fft2 он идет от 0-30K и т. Д. Я действительно запутался, как я могу получить эти 5 волн из моих данных.

...