2012-08-10 77 views
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) 

回答

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) 
0

你忘了在第二個for循環的縮進。 這實際上應該給你一個IndentationError,所以我不明白你怎麼可以說程序是可執行的(實際上,我編輯了你的條目以刪除剩餘的「在此輸入代碼」語句;如果你已經檢查並且複製粘貼你的條目,你可能會發現兩個錯誤)。

但是,你肯定不希望只是

max_y[:] = max(y) 

的而不是for循環?

+0

好的,對於縮進的抱歉錯誤。我看到了另一件事,但只要這是我的第一個問題,我就沒有看到編輯部分。現在我改變了,並且糾正了。我說它是可執行的,因爲我在放入這裏之前執行它。對不起,我一定做了一些事情,並改變縮進。但是你所說的代碼與我的做法不一樣。現在你所做的所有最大值都是相同的,但我正在進行樣本比較,併爲每個地方找到最大值。你確定他們是一樣的嗎? – sema 2012-08-12 21:02:52

+0

但我的問題仍然是一樣的。乳清第二副圖未更新? – sema 2012-08-12 21:26:14

+0

就我所知,子圖*正在被更新。然而,情節幾乎總是相同的(我可以看到它由於微小的變化而更新,可能是由於分辨率和舍入)。看看你正在打印的max_y值(更好的是,看看前5或10,避免填滿你的終端)。 這就是爲什麼我問你是否想要循環;嘗試用'max_y [:] = max(y)語句'替換循環並查看它是否更改。注意:在這種情況下,您需要調整第二個繪圖上的刻度或將max_y除以100;否則它繪製在圖的外面。 – Evert 2012-08-13 10:24:21