For my thesis I am re-analyzing a dataset where subjects were visually stimulated with 5.45, 8.57, 12 or 15 Hz. This well-known technique (steady state visual evoked potential) should elicit EEG peaks at similar frequencies. This is exactly what was shown in the original paper. Different classifiers were able to differentiate the 4 stimuli with a high accuracy.

The original study used CCA to analyze the data, whereas I am using a relatively new technique called FOOOF (fitting oscillations & one over f). FOOOF decomposes power spectra into an aperiodic component and a number of periodic components. It identifies peaks in a non-canonical fashion. Rather than pre-defining bands (alpha, beta, ...), it lets the data tell you where the peaks are. Supposedly, it should perform at least as well as CCA.

However, when I build classifiers on top of these FOOOF models, I get horrible accuracies (30-40%). From plots, it is clear that frequencies are not identified correctly. Overlaying periodic components of all 4 targets on the same plot shows major overlap, making it impossible for any classifier to distinguish them.

I don't understand what the problem is. I have never analyzed EEG data, so I might be missing something trivial. The only possible clue that I have is the following: the sampling rate is 1000Hz. Plotting power spectra shows high resolutions for higher frequencies (up to 500Hz), but a low resolution for low frequencies (exactly the ones I am interested in). I suspect this is inherent in EEG data?

I tried applying a bandpass filter (1-20; 1-40; or 1-100 Hz) before FFT, but to no avail. Maybe the time signals need to be downsampled (to 200 Hz for example?)? I don't understand the process of downsampling. Information will get lost, but maybe it somehow improves the precision of the 'remaining' data points? I'm quite stuck in this analysis, so any tips are more than welcome!


1 Answer 1


EEG representations are typically log-transformed to offset $1/f$ power scaling, and baseline-normalized, which can drastically change the final output.

Since you use a specific implementation, the best place to ask is at their Github; implementations make assumptions or follow specific standards which may defy expectation. I'm familiar with neither FOOOF nor this particular library, but it provides detailed examples.

Maybe the time signals need to be downsampled

This should be handled by library methods and not be done manually; information is lost.

As an aside, I recommend time-frequency (STFT, CWT) analysis over these methods, as they're fundamentally limited as 1D transforms. I recommend CWT (relevant post), as it is log-scaled just like brain waves, and places equal emphasis at each octave - which will fare much better at resolving lower frequencies. (FOOOF is based on FFT afaict, which spaces frequencies linearly.) The representations can be further enhanced with synchrosqueezing. I recommend this CWT tutorial, and this channel for EEG analysis.

  • $\begingroup$ Thank you very much for your answer! I have to admit I'm having a hard time fully grasping everything. First of all, the data that I'm using is a raw time series, so I don't think they've been log-transformed (log-transformation is done after FT, right?) or baseline-normalized. I'm assuming that, if any transformations are done, these would be mentioned with the dataset. I've contacted the authors, but have not received a reply. Also, I'm afraid abandoning FOOOF is not an option, since it is the topic of my thesis. $\endgroup$
    – Pelskens
    Commented Aug 16, 2021 at 20:21
  • $\begingroup$ @Pelskens Log is typically at the end of the entire transform pipeline, yes. I'd suggest opening an Issue for wider outreach. If the documentation doesn't cover your use case, SP basics should suffice for familiarizing with the code directly - some resources I'd recommend. $\endgroup$ Commented Aug 16, 2021 at 20:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.