When writing down the math behind multitaper, I read that the number of tapers L of is recommended to be [1,2]:
L<<2 alpha -1,
where alpha = 1/2 * R * T, with R: full frequency bandwidth, and alpha >=1 [1, eq. 22].
From the MNE description for tfr_array_multitaper:
"The number of good tapers (low-bias) is chosen automatically based on this to equal floor(time_bandwidth - 1)”,
where time_bandwidth is the product between the temporal window length (in seconds) and the full frequency bandwidth (in Hz), and time_bandwith>=2.
In the code I found this as well ( mne-python/mne/time_frequency/tfr.py at main · mne-tools/mne-python · GitHub ):
n_taps = int(np.floor(time_bandwidth - 1))
...
# Get dpss tapers
tapers, conc = dpss_windows(
t.shape\[0\], time_bandwidth / 2.0, n_taps, sym=False
)
So if I understand these correct, time_bandwidth in MNE is equal to 2alpha in [1], and thus in MNE: L = 2alpha-1, against the recommendation in [1,2], which would be L<<2alpha-1, meaning that, e.g., L=alpha.
I wanted to ask if I understood something wrong, or if there is a reason why in MNE the number of tapers is chosen differently that recommended.
I also found this post: mne.time_frequency.psd_multitaper details which mentions that some related code may come from here: Neuroimaging in Python — nitime 0.9.dev documentation , where they indeed used the same value for L as MNE does.
- MNE version: e.g. 1.12.1
- operating system: e.g. macOS Tahoe 26.5.2
[1] https://ieeexplore.ieee.org/abstract/document/6767046/
[2] https://www.cambridge.org/core/books/spectral-analysis-for-physical-applications/A9195239A8965A2C53D43EB2D1B80A33 chapter 7