1

我正在尝试找到正弦曲线的最大值并将其显示在子图中。并尝试像动画一样更新它。但是最大值的子图给出了所有零值。当我打印数组时,它不是零。我认为它没有更新 y 值。我无法弄清楚原因。任何帮助将不胜感激。

我将把我的代码放在可执行文件中:

from pylab import *
import time

ion()
fs = 1e6
Ts = 1/fs
SNR=10
sinfreq=2*pi*1e5
pack= 512
t = Ts*arange(0,pack)
f = fs*(arange(0,pack)-pack/2)/pack
max_y = zeros (len(t))
y=sin(sinfreq*t)        
y=y+randn(size(y))/sqrt(10^(SNR/10)*2) 
subplot(211)       
line1, = plot(y)

subplot(212)
line2, = plot(max_y)
for i1 in arange(1,1000):  
    y=sin(sinfreq*t)
    y=y+randn(size(y))/sqrt(10^(SNR/10)*2)

    line1.set_ydata(y)  

    mk=0
    for mk in range(0,len(y)):
        if y[mk] > max_y[mk]:
            max_y[mk] = y[mk]
    print max_y
    line2.set_ydata(max_y) 
    draw()                        
    waitforbuttonpress(timeout=0.5)
4

2 回答 2

0

您忘记了第二个 for 循环中的缩进。那实际上应该给您一个 IndentationError,所以我不明白您如何说该程序是可执行的(实际上,我编辑了您的条目以删除剩余的“在此处输入代码”语句;如果您已检查并复制-粘贴您的条目,您可能会发现两个错误)。

但是,你确定你不想简单地

max_y[:] = max(y)

而不是那个for循环?

于 2012-08-10T16:06:20.337 回答
0

好的,我偶然找到了解决方案,我不知道原因,但我首先更新我的 max_y 绘图任何其他值,然后进行真正的更新,然后绘图显示我的更改。除此之外,它没有显示。我尝试使用不同的 for 循环,他们正在绘制一次更新,但对于我的循环,它想要更新两次。

我还添加了 set_ylim 以更好地查看限制。我把星星放在我改变的地方。我也在放新代码。我希望它能帮助有同样问题的人。

from pylab import *
import time

ion()
fs = 1e6
Ts = 1/fs
SNR=10
sinfreq=2*pi*1e5
pack= 512
t = Ts*arange(0,pack)
f = fs*(arange(0,pack)-pack/2)/pack
max_y = zeros (len(t))
y=sin(sinfreq*t)        
y=y+randn(size(y))/sqrt(10^(SNR/10)*2) 
subplot(211)      
line1, = plot(y)

sub2=subplot(212) #****
line2, = plot(max_y)
for i1 in arange(1,1000):  
    y=sin(sinfreq*t)
    y=y+randn(size(y))/sqrt(10^(SNR/10)*2)

    line1.set_ydata(y)  

    mk=0
    for mk in range(0,len(y)):
        if y[mk] > max_y[mk]:
            max_y[mk] = y[mk]
    #print max_y
    line2.set_ydata(zeros(len(max_y)))#****     
    line2.set_ydata(max_y) 
    sub2.set_ylim(min(max_y),max(max_y)) #****
    draw()                        
    waitforbuttonpress(timeout=0.5)
于 2012-08-16T07:02:12.227 回答