period_cut=period_cut, drift_order=drift_order) #fmri = fmri / fmri.mean() * 100 niimgs = nb.Nifti1Image(fmri, affine=np.eye(4)) for iest, hrf_peak in enumerate(peak_range): # GLM using HRF with a different peak hrf_est = _gamma_difference_hrf(1., oversampling=1./dt, time_length=hrf_length + dt, onset=0., delay=hrf_peak, undershoot=hrf_ushoot, dispersion=1., u_dispersion=1., ratio=0.167) f_hrf_est = interp1d(x_0, hrf_est) _, design, _, _ = generate_spikes_time_series( n_events=n_events, n_blank_events=n_blank_events, event_spacing=event_spacing, t_r=t_r, event_types=event_types, return_jitter=True, jitter_min=jitter_min, jitter_max=jitter_max, period_cut=period_cut, drift_order=drift_order, time_offset=10, modulation=None, seed=seed, f_hrf=f_hrf_est, hrf_length=hrf_length) # Testing with a GLM glm = FirstLevelGLM(mask=mask_img, t_r=t_r, standardize=True, noise_model='ols') glm.fit(niimgs, design) #print 'n_timepoints, n_voxels: ', glm.results_[0][0].norm_resid.shape #print glm.results_[0][0].resid #print glm.results_[0][0].logL snr = np.linalg.norm(fmri, axis=3) / sigma_noise snr_db = 20 * (np.log10(np.linalg.norm(fmri, axis=3) / sigma_noise)) print 'sigma_noise = ', sigma_noise print 'SNR = ', snr.mean() print 'SNR = ', snr_db.mean(), ' dB'
plt.figure(figsize=(12, 8)) i = 0 for hrf_peak in range_peak: # Simulate with different hrf peaks hrf_sim = _gamma_difference_hrf(1., oversampling=1./dt, time_length=hrf_length+dt, onset=0., delay=hrf_peak, undershoot=hrf_ushoot, dispersion=1., u_dispersion=1., ratio=0.167) f_hrf_sim = interp1d(x_0, hrf_sim) paradigm, design, modulation, measurement_time = \ generate_spikes_time_series(n_events=n_events, n_blank_events=n_blank_events, event_spacing=event_spacing, t_r=t_r, return_jitter=True, jitter_min=jitter_min, jitter_max=jitter_max, f_hrf=f_hrf_sim, hrf_length=hrf_length, event_types=event_types, period_cut=64, time_offset=10, modulation=None, seed=seed) design = design[event_types].values # forget about drifts for the moment beta = rng.randn(len(event_types)) ys = design.dot(beta) noise = rng.randn(design.shape[0]) scale_factor = np.linalg.norm(ys) / np.linalg.norm(noise) ys_acquired = ys + noise * scale_factor * sigma_noise snr = 20 * (np.log10(np.linalg.norm(ys_acquired) / np.linalg.norm(ys - ys_acquired))) print 'SNR = ', snr, ' dB' # Estimation with 1 hrf. Uses glover as mean GP hrf_model = 'glover'