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

偶然解決策を見つけました。理由はわかりませんが、最初に max_y プロットを他の値で更新してから、実際の更新を行い、プロットに変更が表示されます。これ以外は表示されません。1回の更新でプロットしている別のforループを試してみましたが、私のループでは2回更新したかったのです。

制限をよりよく確認するために 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 に答える
0

2 番目の for ループのインデントを忘れています。実際には IndentationError が返されるはずなので、プログラムが実行可能であるとどのように言うことができるかわかりません (実際、エントリを編集して、残りの「ここにコードを入力してください」ステートメントを削除しました; チェックしてコピーした場合-エントリを貼り付けた場合、おそらく両方の間違いを見つけたでしょう)。

しかし、あなたは本当にしたくないのですか?

max_y[:] = max(y)

その for ループの代わりに?

于 2012-08-10T16:06:20.337 に答える