为什么mne resample方法不对数据进行点对点采样?

Why does mne resample method does not sample the data point to point?

我对下采样的理解是,它是通过保留第一个样本,然后在第一个样本之后每隔n个样本来降低x的采样率的操作。 scipy 包的重采样方法提供的示例清楚地说明了此操作,如描述的图片可从 link (https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.resample.html) 访问或提取如下

放大来看,可以看出原始数据点是逐点重采样的

但是,使用可通过 link 访问的下采样的 mne 示例 : https://mne.tools/dev/auto_examples/preprocessing/plot_resample.html ,我注意到数据点没有逐点重新采样,如下图所示

鉴于此,mne resample 基于 scipy 包的 resample 方法,如 mne resample 函数所示: https://github.com/mne-tools/mne-python/blob/607fb4613fb5a80dd225132a4a53fe43b8fde0fb/mne/filter.py#L1342

请问这个问题是振铃问题还是其他问题?

此外,是否有缓解此问题的补救措施。

感谢您的任何见解。点赞

mne discussion repo 中提出了同样的问题,但截至撰写本文时尚未回答

My understanding of downsampling is that it is an operation to decrease the sample rate of x by keeping the first sample and then every nth sample after the first.

重采样通常包括两个步骤:低通滤波以避免混叠,然后降低采样率(从结果信号中选择样本)。低通实际上改变了值,因此过滤数据的子选择步骤不一定会产生“在”原始信号上的点。

May I know whether this issue is due to the ringing artifacts or due to other problems?

在这种情况下,这可能是由于信号的频域重采样中的(隐式)低通滤波。这对我来说看起来很合理。如果你想尝试一下,你可以

  1. 直接对您的数据调用 scipy.signal.resample 并查看它的匹配程度。
  2. 填充你的信号,调用 scipy.signal.resample,然后删除(现在 减少长度)填充——这是 MNE 内部所做的。
  3. 直接对您的数据使用 scipy.signal.resample_poly。
  4. 手动低通滤波器,然后直接从低通信号中选择样本,这是 resample_poly 内部所做的。

此外,scipy.signal.resample 进行频域重采样,因此在下采样时隐式地使用 Nyquist 的砖墙滤波器(除非您为 window 参数指定一些内容,该参数应用于频率域以及有效的砖墙过滤器)。

p.s。提供的答案摘自与 mne 人员的讨论,即 Eric Larson、Brunner Clemens、Phillip Alday。应该给他们点赞