在pylab中改变numpy.sin(wt)的幅度和频率
在另一个项目中,我只需要制作一个简单的正弦波,频率为f。
我发现改变“样本数”会在pylab绘图中产生一些奇怪的效果,我不知道为什么会这样!
当我设置样本数为500时,绘制出的图的频率是1/50赫兹。
而当样本数设置为1000时,绘制出的图的频率变成了1/100赫兹。
如果样本数更大,比如5000或10000,绘制的波形在时间轴上会出现幅度变化,呈现出一些规律。
import numpy as N
f = 10.
w = 2. * N.pi * f
time_interval = 100
samples = 5000
t = N.linspace(0, time_interval, samples)
y = N.sin(w * t)
pylab.plot(t, y)
pylab.show()
如果有人能帮帮我就太好了!我只是想要一个基本的正弦波,但似乎连这个都做不好!
4 个回答
1
这是一个基本的例子。
import pylab
x=pylab.arange(0,150,0.2)
y=pylab.sin(x);
pylab.plot(x,y)
pylab.show()
仔细看看正在创建的数据:
x
是一个数组(严格来说是 numpy.ndarray 类型),它的值从 0 到 149.8,间隔为 0.2,也就是说你可以输入 x
来查看它的内容,结果会是 array([0., 0.2, 0.4, ..., 149.8])
。
y
是一个数组,它的值是从 sin(0) 到 sin(149.8),也就是 array([0., 0.198..., ..., -0.839...])
。
2
为了让eat的回答更清楚,我把time_interval
设置为1,然后根据他的建议改变了samples
的数量:
import pylab
import numpy as N
f = 10.
w = 2. * N.pi * f
time_interval = 1
fig = pylab.figure()
for i, samples in enumerate((5, 50, 500, 5000)):
pylab.subplot(2, 2, i+1)
pylab.title('%i samples'%samples)
t = N.linspace(0, time_interval, samples)
y = N.sin(w * t)
pylab.plot(t, y, '.-')
fig.show()
50个样本显然对于time_interval
为1来说不够;这就是为什么5000个样本对于time_interval
为100来说也不够。
5
我觉得你对 samples
有一点误解。它只是表示时间的分辨率。试着把 time_interval= 1
设置好,然后改变 samples
的值(可以从10这样的较小值开始,然后逐渐增加)。你会看到不同的效果。