2

DAQにログオンした30の実験的試行があり、xlsreadを使用してこれらをMATLABに読み込みました。

30回の試行すべてを1つの図に表示するプロットができました。

私がやりたいのは、彼らが一つずつプロットしている様子を映し出す映画を作ることです。

実際、私は合計60のラインプロット(30の入力と30の出力)を持っているので、1つ、次に次の入力と出力などを表示できれば素晴らしいと思います。

今のところ私のコードはこれに似ています:

In_1 = xlsread(filename.xls, #1);
In_2 = xlsread(filename.xls, #2);
...

Out_1 = xlsread(filename.xls, #1);
Out_2 = xlsread(filename.xls, #2);
...
plot(t, In_1,'r')
plot(t, Out_1)
plot(t, In_2,'r')
plot(t, Out_2)
...

getframeとmovieを使用した例をたくさん見てきました。私はDATAをプロットしているので、これは役に立ちません。時間間隔で評価される関数ではありません。30回の試行データをプロットしようとしています。

4

3 に答える 3

1

これがあなたのニーズをカバーするはずの簡単な例です。

注:これにより、後でほとんどのマルチメディアプレーヤーで表示できる.aviファイルが作成されます。

%% Open avi file
aviobj = avifile('fileame.avi','compression','none','fps',framerate);

%% Add one frame at a time
for frame = 1:length(frames)             

    h = figure(1);
    % Plot what ever you want here...

    % Fetch frame
    aviobj = addframe(aviobj, getframe(h));
end

%% Close video
aviobj = close(aviobj);

入力と出力を2つの別々の軸にプロットする場合は、を使用できますsubplot

h = figure(1);
subplot(2,1,1)
% Plot input here...
subplot(2,1,2)
% Plot output here...
于 2012-07-10T17:59:04.890 に答える
1

を使用avifileしてAVIファイルを作成し、addframeプロットした各グラフをキャプチャしてフレームに変換します。また、両方のプロットを同じ図に保つために自由に追加subplotsし、コードをループに書き直しました。

これが私の(改訂された)提案された解決策です:

aviobj = avifile('output.avi');                     %# Create an AVI file
hh = figure;
for i = 1:30
    figure(hh)                                      %# Reuse the figure
    subplot(2, 1, 1)
    eval(['plot(t, In_', num2str(i), ', ''r'')']);  %# Plot i-th input
    %# axis([ something ]);
    subplot(2, 1, 2)
    eval(['plot(t, Out_', num2str(i), ', ''r'')']); %# Plot i-th output
    %# axis([ something ]);
    aviobj = addframe(aviobj, getframe(hh));        %# Convert to a frame
end
aviobj = close(aviobj);                             %# Close the AVI file

avifile生成されたビデオの品質を制御するためのオプションをいじることができます。

Alosは、それぞれplotがプロットされた値に従ってx軸とy軸を設定することに注意してください。アニメーションを「スムーズ」に保ちたい場合は、axisコマンドを使用して、すべてのプロットの後、各グラフの軸を強制的に一定に保つ必要があります。

于 2012-07-10T18:02:49.447 に答える
0

最も簡単な方法はgetframe、forループでコマンドを使用して各プロットをフレームに配置し、コマンドを使用して再生することmovieです。これにはいくつかの利点があります(たとえば、結果をaviとしてエクスポートできます)が、非常に低速です。アニメーションをmatlabで単純に表示し、それをいくらか高速にする必要がある場合は、プロットウィンドウでデータを更新して再描画できます。少し複雑ですが、ここで非常によく説明されています。リンク

また、 これらのコマンドの最適な使用方法に関する説明と例については、matlabに入力してくださいhelp getframehelp movie

お役に立てれば。

于 2012-07-10T17:45:11.533 に答える