如何将正弦波混叠效应的系列采样图设为幻灯片式定时展示?
问题
我编写了一段用于研究正弦波混叠效应(alias effect)的代码,通过while循环以50Hz的增量提升正弦波频率,生成一系列展示给定采样频率下正弦波采样结果的图表。当前代码会逐个弹出图表,我希望将这些图表设置为幻灯片形式,即每隔t秒自动展示一张,请问该如何实现?
原代码如下:
import numpy as np from math import pi import matplotlib.pyplot as plt f_0 = 50 f_s = 150 t_a = np.arange(0, 0.1, 10e-06) t_d = np.arange(1/f_s, 0.1, 1/f_s) def a_sinewave(t_a, f_0): return np.sin(2 * pi * f_0 * t_a) def d_sinewave(t_d, f_0): return np.sin(2 * pi * f_0 * t_d) while f_0 <= 300: y = a_sinewave(t_a, f_0) z = d_sinewave(t_d, f_0) plt.plot(t_a, y) plt.plot(t_d, z, 'ro') plt.show() f_0 += 50
解决方案
利用matplotlib的plt.pause()函数替代plt.show(),配合画布清除操作即可实现自动切换的幻灯片效果,具体修改如下:
- 定义切换间隔时间
t,用plt.pause(t)替代plt.show(),实现图表停留指定时长 - 每次循环末尾调用
plt.clf()清除当前画布,避免图表叠加 - 可选添加标题,更直观区分不同频率的混叠效果
修改后的代码示例(设置间隔为2秒):
import numpy as np from math import pi import matplotlib.pyplot as plt f_0 = 50 f_s = 150 interval = 2 # 自动切换间隔,单位:秒 t_a = np.arange(0, 0.1, 10e-06) t_d = np.arange(1/f_s, 0.1, 1/f_s) def a_sinewave(t_a, f_0): return np.sin(2 * pi * f_0 * t_a) def d_sinewave(t_d, f_0): return np.sin(2 * pi * f_0 * t_d) while f_0 <= 300: y = a_sinewave(t_a, f_0) z = d_sinewave(t_d, f_0) plt.plot(t_a, y) plt.plot(t_d, z, 'ro') plt.title(f"正弦波频率:{f_0}Hz | 采样频率:{f_s}Hz") plt.pause(interval) # 停留指定时间后自动切换 plt.clf() # 清除当前画布 f_0 += 50 plt.close() # 循环结束后关闭所有绘图窗口
关键说明
plt.pause(t)会显示当前图表并等待t秒,期间窗口保持可交互状态plt.clf()确保下一次绘图时不会与之前的内容重叠- 标题可以帮助你清晰观察不同频率下混叠效应的变化规律
内容的提问来源于stack exchange,提问作者In the blind
相关产品推荐
相关产品推荐

