如何在Python中绘制连续正弦波?

如何在Python中绘制连续正弦波?,python,python-3.x,matplotlib,waveform,Python,Python 3.x,Matplotlib,Waveform,我试图用Python模拟示波器产生的正弦波的显示。当我试图仅仅模拟它(而不是从示波器中提取数据)时,我想知道如何显示连续的正弦波。我有设备的采样率(200MHz-1GS/s)、波形频率(1MHz)和振幅(1V)。数据将以微秒为单位查看。我已经通读了关于StackOverflow的各种答案,对于不规则波浪或类似的情节,我有一些问题。有没有办法让这些数据如下所示 第二个问题是连续绘制该波的能力。例如,当使用Matplotlib时,如果我缩小它,它不会显示继续超过我的间隔的波。有没有一种方法可以持续地

我试图用Python模拟示波器产生的正弦波的显示。当我试图仅仅模拟它(而不是从示波器中提取数据)时,我想知道如何显示连续的正弦波。我有设备的采样率(200MHz-1GS/s)、波形频率(1MHz)和振幅(1V)。数据将以微秒为单位查看。我已经通读了关于StackOverflow的各种答案,对于不规则波浪或类似的情节,我有一些问题。有没有办法让这些数据如下所示

第二个问题是连续绘制该波的能力。例如,当使用Matplotlib时,如果我缩小它,它不会显示继续超过我的间隔的波。有没有一种方法可以持续地表示波浪?我不想拘泥于Matplotlib,所以我正在寻找其他在两个方向上不断创建(附加?)数据的解决方案。如果这是不可能的,是否有可能在每个方向上建立某种数量的波长

非常感谢你

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

Fs = 20E3
f = 1E6
sample = Fs/f
print(sample)
x = np.arange(sample)

y = 100*np.sin(2 * np.pi * f * x / Fs)

plt.plot(x, y)
plt.show()
你可以用它来实现你的目标

我拿了一个,并根据您的需要进行了调整(例如,正弦波和连续绘图)

关于连续打印:我设置了一个
continue
变量,您可以选择是否要连续打印(无法缩放)或不打印(无法缩放)。我还不能在一个情节中同时使用这两种功能。因此,只需使用
continuous=True
运行一次代码,然后使用
continuous=False
运行一次代码,看看它是否适合您的需要

但我认为这可能是绘制连续正弦波的一个良好开端

import numpy as np
from matplotlib.lines import Line2D
import matplotlib.pyplot as plt
import matplotlib.animation as animation

# Your Parameters
amp = 1         # 1V        (Amplitude)
f = 1000        # 1kHz      (Frequency)
fs = 200000     # 200kHz    (Sample Rate)
T = 1/f
Ts = 1/fs

# Select if you want to display the sine as a continous wave
#  True = Continous (not able to zoom in x-direction)
#  False = Non-Continous  (able to zoom)
continous  = True

x = np.arange(fs)
y = [ amp*np.sin(2*np.pi*f * (i/fs)) for i in x]


class Scope(object):
    def __init__(self, ax, maxt=2*T, dt=Ts):
        self.ax = ax
        self.dt = dt
        self.maxt = maxt
        self.tdata = [0]
        self.ydata = [0]
        self.line = Line2D(self.tdata, self.ydata)
        self.ax.add_line(self.line)
        self.ax.set_ylim(-amp, amp)
        self.ax.set_xlim(0, self.maxt)

    def update(self, y):
        lastt = self.tdata[-1]
        if continous :
            if lastt > self.tdata[0] + self.maxt:
                self.ax.set_xlim(lastt-self.maxt, lastt)

        t = self.tdata[-1] + self.dt
        self.tdata.append(t)
        self.ydata.append(y)
        self.line.set_data(self.tdata, self.ydata)
        return self.line,


def sineEmitter():
    for i in x:
        yield y[i]


fig, ax = plt.subplots()
scope = Scope(ax)

# pass a generator in "sineEmitter" to produce data for the update func
ani = animation.FuncAnimation(fig, scope.update, sineEmitter, interval=10,
                              blit=True)

plt.show()

你能展示你的代码吗?你是在Windows还是Linux中?你想要一个图像还是想要一个动态显示?@Imas没关系,提供代码(即使它不做你想做的事情),让其他用户可以更容易地开发符合你所做的事情的代码,并且你可以理解,它还表明,在开始之前,您已经对这个问题进行了一些思考和研究。鉴于
np.arange(20e3/1e6)
将返回
array([0.])
,上述代码不会绘制任何内容。看起来你希望f是你的波频率,Fs是你的采样频率。为什么采样频率低于波频率?如果你那样做,你的波形看起来就不太好了。