2011-12-24 5 views
0

私のグラフィック(青色)がプロットに表示されず、他の(黒色)ベッグが早すぎる理由を教えてもらえますか(これを避けるために、赤いグラフィックで作業しましたか?私は黒の関数を正しく書いていないからだと思う。私は与えられたデータから21年間の平均を作りたいので、最初の10人のコレスポンダーxはグラフィック上で値を持つことができません。 Aプロット/平均化を作成する際のエラー

 C = textscan(fid,'%f %f %f','headerlines',32,'commentstyle','--'); 

     x = C{1}; 
     y1 = C{2}; 
     y2 = C{3}; 
     z = C{2}; 

     sum_21mt = 0; 
     for i = 11:153 
      sum_21mt = soma_21mt + z(21); 
      med_21mt = soma_21mt/21; 
     end 

     y1(y1==-99.99) = NaN; 
     y2(y2==-99.99) = NaN; 
     z1 = z(1:10); 
     z2 = z(154:length(z)); 
     z1 = NaN; 
     z2 = NaN; 

     plot(x, y1, 'b-', x, y2, 'r-', x, z, 'k-'); 
+0

あなたはx、y1、y2、zのwhosを教えてください。 – 0x90

+0

ここで 'z1'と' z2'の目的は何ですか? –

+2

また、あなたがループ内の 'soma_21mt'を変更しておらず、ループが' i'に全く依存しないので、ループは完全に冗長です(基本的に 'x = 1 + 2百万回)、あるいはループがあなたがしたいことをやっていないのですか? –

答えて

1

zとy1はコードサンプルで同じです。したがって、青い線と黒い線は同じです。したがって、黒い線が最後に作成されたため、青い線は黒い線の下に隠されます。 Toboldのz値のNaN-ingの修正により、青色/黒色/青色の線が表示されると思われます。

あなたのforループは実際には何もしません。ただし、zで簡単な平均化フィルタを実行しようとする場合は、次のように試してみてください。 Matlab filter function

windowSize = 21; 
z = filter(ones(1,windowSize)/windowSize,1,y1); 

私はそれが楽しみであるため、MATLABのfiltfilt()関数を好むし、フィルターを逆にそれが信号処理ツールボックスが必要です。

編集:これは初期化されていないフィルタであるため、最初のwindowsize-1の値は歪んでいることに注意してください。フィルタを初期化する方法はありますが、それはあなたの質問を超えています。

あなたのforループはまだ何もしていません。 i/jでy1にインデックスを付ける必要があります。私はあなたがzの点がy1 +/- 10のサンプルの値の平均と等しい場合に、中心の平均をしようとしていると思います。これを行うコードがいくつかあります。

% Define half window. True window size is 2*halfWindow+1 
halfWindow = 10; 

% Init z to zeros. 
% There will be halfWindow worth of zeros at the beginning and end of z after the loop. 
z = zeros(size(y1)); 

%Loop starting at 11 (if halfWindow = 10) and ending 10 from the end. 
for i = (1+halfWindow):(length(y1)-halfWindow) 
    z(i) = mean(y1(i-halfWindow:i+halfWindow)); %Take mean of current point +/- 10 samples 
end 

おそらく上記のコードの代わりにフィルタ関数を使用し、そのフィルタを初期化する方法を学習します。しかし、少なくとも配列にインデックスを付ける方法を示す必要があります。

1

zのNaNには何も設定しません。私は何がやりたいことは、あなたのループのために、私はあなたがそれをしたいと思うものを達成していないようです。また

z(1:10) = NaN; 
    z(154:length(z)) = NaN; 

代わりの

z1 = z(1:10); 
    z2 = z(154:length(z)); 
    z1 = NaN; 
    z2 = NaN; 

だと思います。

+0

私のグラフィックの一部は青色で残りは黒です。その変更によって私は問題が何であるかを理解していると思う。 – Dywabo

関連する問題