Strange power spikes in PSD plots at 20, 40, 60, ... Hz

I’ve received some data from sleep studies that have been divided into 30 second epochs, then concatenated together depending on the stage of sleep, like Wake, or REM. There’s a strange artifact at multiples of 20Hz in some channels, but in all the datasets.

It looks like a 60Hz filter has been applied, and I might expect some artifacts at, say, 120Hz, but at every 20Hz is a mystery.

It looks like F7 and F8 are affected in all the datasets, and usually O2.

Any ideas what might have caused it?


edge artifacts when concatenating epochs that are not following each others?


That’s a good thought.
I might need to extract the data, taper it, and do the psd myself, since I’ll be using it on an epoch-by-epoch basis anyway.

I tried setting tmin=5 and tmax=25 (these epochs are 30 seconds long), thinking that mne would handle any edge tapering that needed to occur, but the artifacts are still there.

I also think that the epoching process is a likely explanation, but maybe it could also be aliasing? What is the sampling frequency? Maybe the lowpass filter was not steep enough to suppress e.g. the peak at 120Hz (which is normally present as a harmonic of the 60Hz power line peak)? Regarding your last comment when you set tmin and tmax, maybe there is an offset and epochs don’t start at t=0?


Remarkably, it is 1kHz. I’m not sure if the eeg is acquired at that freq or not. I think the high sampling rate is motivated by the other physiological signals being captured, such as respiration, ECG, etc.
Just checked the, and it says lowpass: 93Hz, highpass: 0Hz.

I downsample to 100Hz for these images. Even without doing so, the spikes are still present 20,40,60,80,100, (but not 120). To wit;

There shouldn’t be, as there are no event markers in the file, it is just divided into 30s epochs.

So it sounds like you’ve already tried splitting the concatenated data back up into separate epochs, computing spectra for individual epochs (epochs.compute_psd() does this) and then plotting the spectra from a few individual epochs? It would be instructive to know if the spikes are in all epochs or are just in a few (but with really huge amplitudes so they show up as big spikes even when “diluted” by clean epochs).

If the spikes are missing from all individual epochs then it suggests the concatenation is the cause, but based on what you’ve said so far that seems unlikely.

One caveat: is it obvious exactly where the concatenation edges are? (if the concatenation were done in MNE there would be BAD_EDGE annotations but it sounds like these files come to you already concatenated, presumably not by MNE-Python). The caveat is that if you happen to be wrong about the epoch durations / concatenation boundaries when you re-separate the epochs (even if you’re off by just one sample), then any edge effects from concatentation will not be “undone” but will instead get lumped into the epochs themselves.

These spikes are so huge that they should be obvious in the continuous data. Are these high frequencies present constantly or only at specific times?

Turns out the “curated” data was laden with epochs with large artifacts.
Going through the epochs and rejecting removed the 20/40/…Hz artifacts.
Thanks to all who responded!

1 Like