You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将正弦波混叠效应的系列采样图设为幻灯片式定时展示?

问题

我编写了一段用于研究正弦波混叠效应(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:25:22