[Mne_analysis] TIME FREQUENCY ANALYSIS: power spectral density using Welch's method
Jasmina Wallace
jasmina.wallace23 at gmail.com
Wed Dec 12 10:38:26 EST 2018
External Email - Use Caution
Hi everybody!
I've just started using MNE and I would like to do a time frequency
analysis (mne.time_frequency.psd_welch) for all frequency bands with EEG
and MEG data: delta 1-4 Hz, theta 4-7 Hz, lower and upper alpha in 7-13 Hz
range and lower and faster beta in 13-30Hz range.
Using the script here below I can compute the psd for each frequency needed
changing the fmin and the fmax, *except for the theta*. The script allows
to analyse one recorded Run on EEG and MEG channels with open eyes (YO)
and closed eyes (YF). More precisely, this script runs well and I don't
have any error message, but in the end the final file .mat is empty. I
tried to change the n_fft, using 128 or 64, but nothing has changed. So I
couldn't find out where I'm going wrong and I can't understand where is the
difference between the theta band script and the other ones.
Any suggestion or comments are really welcome!
Thank you very much!
Best,
Jasmina
This is the script that I used :
***************
dirs_f=['brain_rf01_s01']
suj_count = len(dirs_f)
i=0
while i<suj_count:
n=dirs_f[i]
path1, dirs1, files1 = next(os.walk(data_path_BRF+n))
for ch in dirs1:
if ch.startswith("171"): # faire attention a changer le date
path2, dirs2, files2 = next(os.walk(path1+'/'+ch))
for file in files2:
if file.endswith('corrected_mne.fif') and
(file.startswith('run01')):
fname=path2+'/'+file
raw = mne.io.read_raw_fif(fname, preload=True)
info = mne.io.read_info(fname)
ev=mne.find_events(raw, output='step')
tmin, tmax = 8, 180 # use the first 120s of data
*fmin, fmax = 4, 7 # look at frequencies band*
n_fft = 2048 # the FFT size (n_fft). Ideally a power of
2
psd_picks = mne.pick_types(raw.info, meg=True, eeg=True,
stim=False, eog=False, exclude='bads')
tmin=(ev[0][0]+20-raw.first_samp)/info['sfreq']
tmax=(ev[3][0]-20-raw.first_samp) /info['sfreq']
psd, freqs= psd_welch(raw, fmin, fmax, tmin, tmax,
n_fft=256, n_overlap=0, n_per_seg=None, picks=psd_picks, proj=False,
n_jobs=1, reject_by_annotation=True, verbose=None)
filename, file_extension = os.path.splitext(fname)
filename_psd, file_extension_psd = os.path.splitext(file)
psds = 20 * np.log10(psd)
ch_names=info['ch_names']
ch_names_meeg = [ch_names[ii] for ii in
np.array(psd_picks)]
chan_types = [mne.io.pick.channel_type(info, ch) for ch
in psd_picks ]
psd_name_04_07=path2+'/'+filename_psd+'_YO_meg_04hz_07hz.mat'
scipy.io.savemat(psd_name_04_07,{'freq_04_07':psds[74:380]})
psd_name_04_07=path2+'/'+filename_psd+'_YO_eeg_04hz_07hz.mat'
scipy.io.savemat(psd_name_04_07,{'freq_04_07':psds[0:74]})
tmin=(ev[3][0]+20-raw.first_samp)/info['sfreq']
tmax=(raw.last_samp-raw.first_samp) /info['sfreq']
psd, freqs= psd_welch(raw, fmin, fmax, tmin, tmax,
n_fft=256, n_overlap=0, n_per_seg=None, picks=psd_picks, proj=False,
n_jobs=1, reject_by_annotation=True, verbose=None)
psds = 20 * np.log10(psd)
ch_names=info['ch_names']
ch_names_meeg = [ch_names[ii] for ii in
np.array(psd_picks)]
chan_types = [mne.io.pick.channel_type(info, ch) for ch
in psd_picks ]
psd_name_04_07=path2+'/'+filename_psd+'_YF_meg_04hz_07hz.mat'
scipy.io.savemat(psd_name_04_07,{'freq_04_07':psds[74:380]})
psd_name_04_07=path2+'/'+filename_psd+'_YF_eeg_04hz_07hz.mat'
scipy.io.savemat(psd_name_04_07,{'freq_04_07':psds[0:74]}
i=i+1
************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.nmr.mgh.harvard.edu/pipermail/mne_analysis/attachments/20181212/de4ac7d4/attachment-0001.html
More information about the Mne_analysis
mailing list