用Python编写程序,证明采样定理(香农采样定律、奈奎斯特采样定律)
请用动画描述这一定理。分为两种情况f s≥2f max和f s<2f max。
请对下边代码进行完善,使其符合要求,有动画效果
import numpy as np
import matplotlib.pyplot as plt
# 生成信号
Fmax = 20
t = np.linspace(0, 1, 1000)
signal = np.sin(2 * np.pi * Fmax * t)
# 采样
Fs1 = 20
Ts1 = 1 / Fs1
samples1 = np.sin(2 * np.pi * Fmax * np.arange(0, 1, Ts1))
Fs2 = 60
Ts2 = 1 / Fs2
samples2 = np.sin(2 * np.pi * Fmax * np.arange(0, 1, Ts2))
# 重建信号
reconstructed1 = np.zeros_like(t)
for i, s in enumerate(samples1):
reconstructed1 += s * np.sinc(Fs1 * (t - i * Ts1))
reconstructed2 = np.zeros_like(t)
for i, s in enumerate(samples2):
reconstructed2 += s * np.sinc(Fs2 * (t - i * Ts2))
# 绘图
fig, axs = plt.subplots(3, 2, figsize=(8, 6), sharex=True, sharey=False)
axs[0,0].plot(t, signal)
axs[0,0].set_title('Original Signal 1 ')
axs[1,0].stem(np.arange(0, 1, Ts1), samples1, use_line_collection=True)
axs[1,0].set_title('Samples 1 ')
axs[2,0].plot(t, reconstructed1)
axs[2,0].set_title('Reconstructed Signal 1 ')
axs[0,1].plot(t, signal)
axs[0,1].set_title('Original Signal 2 ')
axs[1,1].stem(np.arange(0, 1, Ts2), samples2, use_line_collection=True)
axs[1,1].set_title('Samples 2 ')
axs[2,1].plot(t, reconstructed2)
axs[2,1].set_title('Reconstructed Signal 2 ')
plt.tight_layout()
plt.show()