在 Python 中混叠,即使在奈奎斯特速率下

Aliasing in Python even though under Nyquist rate

根据我的理解,以下代码创建了一个 1 秒长的正弦波,采样频率为 256 Hz,这意味着奈奎斯特速率为 128 Hz。因此,如果正弦波的频率为 100 Hz,则不应出现混叠。

t = np.linspace(0,1,256)
x = np.sin(2*np.pi*100*t)
plt.plot(t,x)

然而,情节看起来像这样,我认为是混叠?

我做错了什么吗?这是什么原因?

首先,您的代码不正确。您的采样频率为 255Hz,而不是 256。要修复,

t = np.linspace(0, 1, 256, endpoint=False)

t = np.linspace(0, 1, 257)

这是您的(更正)图的放大版本,正弦波以更高的采样频率显示:

t = np.linspace(0, 1, 256, endpoint=False)
x = np.sin(2 * np.pi * 100 * t)
plt.plot(t, x)
plt.plot(t2 := np.linspace(0, 1, 10000), np.sin(2 * np.pi * 100 * t2), 'r:')

你每半个周期至少得到一个点,这意味着你可以从这些数据中有意义地估计真实频率。这是一个在奈奎斯特 (200Hz) 采样的类似数据集:

不同相位的采样会使线上下移动,但它不会让您找到有关输入信号的有意义的信息。

混叠看起来像这样(以 45Hz 采样):

由于采样频率远低于信号频率,因此您最终得到的估计值要低得多。