if lapl: x = x.dot(montage.make_laplacian_proj('EEG')) del df x *= 1e6 x_split = np.split(x[:x.shape[0] - x.shape[0] % 10], 10) X_split = [] Y_split = [] delay = 0 n_taps = 200 band = (8, 12) for x in x_split: X, Y = get_XY(x, band_hilbert(x[:, channels.index('P4')], fs, band), n_taps, delay) X_split.append(X) Y_split.append(Y) del x corrs = np.zeros((10 - 3 - 2) * 3) mses = np.zeros((10 - 3 - 2) * 3) corrs_one = np.zeros((10 - 3 - 2) * 3) mses_one = np.zeros((10 - 3 - 2) * 3) for k in range(5): X_train = np.concatenate(X_split[k:3 + k]) Y_train = np.concatenate(Y_split[k:3 + k])
corrs_fir = np.zeros((len(indx) - 1, len(delays))) * np.nan corrs_cfir_f = np.zeros((len(indx) - 1, len(delays))) * np.nan corrs_cfir_wf = np.zeros((len(indx) - 1, len(delays))) * np.nan corrs_cfir_t = np.zeros((len(indx) - 1, len(delays))) * np.nan corrs_hilbert = np.zeros((len(indx) - 1, len(delays))) * np.nan corrs_rls = np.zeros((len(indx) - 1, len(delays))) * np.nan min_phase_delays = np.zeros((len(indx) - 1, len(delays))) * np.nan corrs_min_phase = np.zeros((len(indx) - 1, len(delays))) * np.nan for k, kk in enumerate(indx[1:]): print('****', k) x_train = x[indx[k - 1]:indx[k - 1] + int(step)] x_std = x_train.std() x_mean = x_train.mean() x_train = (x_train - x_mean) / x_std y_train = band_hilbert(x_train, 500, band) x_test = x[kk:kk + int(step)] / x_std x_test = (x_test - x_mean) / x_std y_test = band_hilbert(x_test, 500, band) freq, time, spec = stft(x_train, fs, nperseg=n_fft, return_onesided=False, noverlap=int(n_fft * 0.9)) mask = np.abs(spec).mean(1) w = np.diag(mask) for j, d in enumerate(delays): print('delay', d)
F = np.array([ np.exp(-2j * np.pi / n_fft * k * np.arange(n_taps)) for k in np.arange(n_fft) ]) fig, axes = plt.subplots(3, 2, sharex=True, sharey=True) for j, d in enumerate([200, 0, 100, -50, 50, 'rand']): if d != 'rand': #if d<999: #plt.close() H = get_ideal_H(n_fft, fs, band, d) b_cfir_f = cLS(F, H, 0) X_train, Y_train = get_XY(x[:fs * 60 * 2], band_hilbert(x[:fs * 60 * 2], fs, (8, 12)), n_taps, d) b_cfir_f = cLS(X_train, Y_train, 0) if d > 0: b_fir_band = firwin(d, band / fs * 2, pass_zero=False) b_fir_smooth = firwin(d, 2 / fs * 2) rec_fir = lfilter(b_fir_smooth, [1], np.abs(lfilter(b_fir_band, [1], x))) #plt.plot(b_cfir_f) #plt.show() #plt.plot(x) rec = np.abs(lfilter(b_cfir_f, [1], x)) else: rec = np.random.normal(size=len(x))
from data.loaders import load_alpha_delay_subjects from models import SWAnalyticFilter2, RLS import pylab as plt from helpers import band_hilbert, get_ideal_H, cLS, get_XY import numpy as np from scipy.signal import firwin, lfilter, filtfilt, stft, minimum_phase x = load_alpha_delay_subjects() fs = 500 band = (8, 12) n_fft = 2000 n_taps = 500 d = 100 x_test = x[:fs * 60 * 2] y_test = band_hilbert(x_test, 500, band) tar = np.abs(y_test) delays = np.arange(10, 300, 10) min_phase_delays = np.zeros_like(delays) corrs_min_phase = np.zeros_like(delays) * 0. fir_delays = np.zeros_like(delays) corrs_fir = np.zeros_like(delays) * 0. for j, d in enumerate(delays): print('delay', d) b_fir_band = minimum_phase( firwin(d, [8 / fs * 2, 12 / fs * 2], pass_zero=False)) b_fir_smooth = minimum_phase(firwin(d, 2 / fs * 2)) rec_fir = lfilter(b_fir_smooth, [1], np.abs(lfilter(b_fir_band, [1], x_test)))