[Eeglablist] Power in spectopo vs. fft

Makoto Miyakoshi mmiyakoshi at ucsd.edu
Tue Apr 27 12:05:21 PDT 2021


Dear Irene,

It is an erratum to the response I posted to the list to answer to your
question 7 years ago. Maybe you are no longer a student.
About the difference between the results generated by spectopo() and
pwelch(), please see the following Wikipage for the detail.
https://sccn.ucsd.edu/wiki/Makoto%27s_useful_EEGLAB_code#Comparison_between_spectopo.28.29_and_pwelch.28.29_.2804.2F27.2F2021_added.29

Makoto

On Thu, May 8, 2014 at 11:48 AM Makoto Miyakoshi <mmiyakoshi at ucsd.edu>
wrote:

> Dear Irene,
>
> EEGLAB uses pwelch() function, not fft(). This is why they did not match.
> If you want to see if Matlab pwelch() and spectopo() results match, try
> the code below.
>
> Makoto
>
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> % EEGLAB spectopo function
> [spectra,freqs] = spectopo(EEG.data(2,:), 0, EEG.srate, 'nfft', 1024); %
> For channel 2 (C4)
>
> thetaIdx   = find(freqs>=4 & freqs<=8);                    % theta=4-8
> thetaPower = 10^(mean(spectra(thetaIdx))/10);              % mean theta
> power
> alphaIdx   = find(freqs>=8 & freqs<=12);                   % alpha=8-12
> alphaPower = 10^(mean(spectra(alphaIdx))/10);              % mean alpha
> power
> eeglabThetaAlphaRatio = thetaPower/alphaPower;
>
> figure; subplot(1,2,1); plot(freqs,10.^(spectra/10))
>
> % Matlab pwelch function
> x  = EEG.data(2, :);      % For channel 2 (C4)
> Fs = EEG.srate;              % Sampling frequency
> L  = EEG.pnts;               % Length of signal
> NFFT = 2^nextpow2(L);        % Next power of 2 from length of x
> % X    = fft(x,NFFT)/L;
> % freqs   = Fs/2*linspace(0,1,NFFT/2+1);
> % spectra = abs(X(1:NFFT/2+1));
>
> NOVERLAP = 0;
> WINDOW = 512;
> [spectra,freqs] = pwelch(x,WINDOW,NOVERLAP,NFFT,EEG.srate);
>
> thetaIdx   = find(freqs>=4 & freqs<=8);            % theta=4-8
> thetaPower = mean(spectra(thetaIdx));              % mean theta power
> alphaIdx   = find(freqs>=8 & freqs<=12);           % alpha=8-12
> alphaPower = mean(spectra(alphaIdx));              % mean alpha power
> matlabThetaAlphaRatio = thetaPower/alphaPower;
>
> subplot(1,2,2); plot(freqs,spectra)
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>
>
> 2014-05-08 6:31 GMT-07:00 Trilla Gros, Irene (Stud. FPN) <
> i.trilla at student.maastrichtuniversity.nl>:
>
>> Dear all,
>>
>> I am trying to calculate an index of mu suppression by doing the log
>> ratio between alpha-band power in one condition (e.g. S5) and alpha-band
>> power in baseline (e.g. B5): log(powerS5/powerS6).
>>
>> To do that, I first extracted the mean absolute power of the alpha range
>> (8-12 Hz) for condition (S5) and for baseline (B5) using spectopo in EEGLAB:
>>
>>     [spectra,freqs] = spectopo(EEG.data(2,:,:), 0, EEG.srate);
>>   % For channel 2 (C4)
>>     AlphaIdx = find(freqs>=8 & freqs<=12);
>>           % alpha=8-12
>>     AlphaPower = 10^(mean(spectra(AlphaIdx))/10);
>>    % mean power
>>
>> Additionally, I did the same analysis but using directly the FFT function
>> in MATLAB instead:
>>
>>     x = EEG.data(2, :, :);       % For channel 2 (C4)
>>     Fs = EEG.srate;                 % Sampling frequency
>>     L = EEG.pnts;                     % Length of signal
>>     NFFT = 2^nextpow2(L);    % Next power of 2 from length of x
>>
>>     X = fft(x,NFFT)/L;
>>     f = Fs/2*linspace(0,1,NFFT/2+1);
>>     power = abs(X(1:NFFT/2+1));
>>
>>     AlphaIdx = find(f>=8 & f<=12);
>>     AlphaPower = mean(power(AlphaIdx));
>>
>> When I compute the ratio (power condition/power baseline) the results are
>> very different depending on whether I use the absolute power calculated
>> with spectopo or whether I use the power from the fft function. Even if the
>> magnitudes computed with spectopo and fft differ, shouldn’t the ratio
>> between the condition and baseline be the same? Aren't these two functions
>> comparable when extracting frequency power?
>>
>> Thanks in advance for your answers!
>>
>>
>> Irene
>>
>> _______________________________________________
>> Eeglablist page: http://sccn.ucsd.edu/eeglab/eeglabmail.html
>> To unsubscribe, send an empty email to
>> eeglablist-unsubscribe at sccn.ucsd.edu
>> For digest mode, send an email with the subject "set digest mime" to
>> eeglablist-request at sccn.ucsd.edu
>>
>
>
>
> --
> Makoto Miyakoshi
> Swartz Center for Computational Neuroscience
> Institute for Neural Computation, University of California San Diego
>


More information about the eeglablist mailing list