Advanced Search
Hi Flor,
Thank you for your interest in our article.
Our protocol for normalizing the strength at a given signal is the same for all frequencies, and is achieved by calculating the Signal-to-Noise Ratio (SNR).
In our case the 'Signal' term in our SNR is the strength of our frequency-domain data, at frequency f .
To calculate the SNR, we also compute the average signal strength in a symmetric neighbourhood adjacent to f. This will be the 'Noise' part of SNR, but 'Neighbourhood' might be more appropriate.
We define the 'Noise' or 'Neighbourhood' using [f-2.5, f-0.5] Hz and [f+0.5, f+2.5] Hz.
So for example, if f = 15 Hz, then the neighbourhood below the peak is the average signal strength between 12.5 and 14.5 Hz. The upper neighbourhood is the average between 15.5 Hz and 17.5 Hz.
Dividing the signal strength at f = 15 Hz, by the average of these lower and upper neighbourhoods, then gives us the SNR. You can repeat this procedure to normalize the signal strength at every frequency by its neighbours.
Please note that when defining the range of your neighbourhood, it is important to account for the frequency half-bandwidth of your analysis. The neighbourhood should always begin at least one half-bandwidth away from your signal of interest, otherwise you will be mixing signal with noise when you compute the SNR.
The half-bandwidth (W) is inversely proportional to the duration of your data, and can be calculated using the formula
W= (K+1) / (2 *T)
Where K is the number of tapers used to transform your data from the temporal to frequency domain (if using FFT, this value is 1). T is the duration of your data segment in seconds.
In the example above, and within the paper, we used a T= 2.5 second sliding window for our time-frequency analysis.
Thus the half-bandwidth, with a single taper, is (2)/ 5 = 0.4 Hz.
As a result, our 'Neighbourhood' does not encroach within 0.4 Hz of our 'Signal', and we use 0.5 Hz as the minimum distance between a signal and its neighbourhood ([f-2.5, f-0.5] Hz and [f+0.5, f+2.5] Hz).
When we analyzed whole-trial data, we had a much longer duration, and consequently smaller frequency half-bandwidth. The entire duration of our trials was T = 60 seconds, which gives W = .0167 Hz. As a result, our Neighbourhood for whole trial analysis did not encroach within .02 Hz of our signal, and we use .06 Hz as the minimum distance between a signal and its neighbourhood ([f-0.12, f-0.06] Hz and [f+0.06, f+0.12] Hz).
You might like to view the analysis code, available at https://github.com/Davidson-MJ/SSVEP_invisible_proj.
If you look at the script 's3_EEG_F_epochdynamicRESS_SNR.m', lines 197-241, you can see how this is performed (in Matlab). I have used the Matlab function conv.m to quickly compute the SNR via convolution, instead of iterating through each frequency using a for-loop.
If you have any other questions happy to help,
Best wishes,
Matt
Do you have any questions about this protocol?
Post your question to gather feedback from the community. We will also invite the authors of this article to respond.
Share
Bluesky
X
Copy link