ふみきりのぼうけん

電子工作、プログラミング、旅行、書籍紹介などの雑多なブログです。

Matlabでplotした波形をGIFアニメーションで保存する

f:id:fumikirinobouken:20181016164609g:plain

今回はMatlabでプロットした波形をGIFアニメーションで保存する方法を紹介したいと思います。

こんなんネットの海にいくらでも転がっとるやろとか思ったんですが、説明の少ない公式のQ&Aとか英語の説明が多く、自分が使いたかったオプションの指定とかちょっと調べるのに手間取ったのでこちらにメモとしてまとめておきます。


基本的にこちらのQ&Aを参考にしました。
jp.mathworks.com

このページを参考に、自分がほしいなーと思ったオプションとかコメントを追加したコードがこちらです。

 

% 設定パラメータ%%%%%%%%%%%%%%%%

hight = 400; % プロットするfigureの縦幅
width = 800; % プロットするfigureの横幅

sizen= 512; % rgb2ind()の関数でRGBイメージをインデックス付きイメージに変換する…らしい(よくわからん)。
            % ただ、gifにアニメーションとして保存するサイズに対してこのsizeが小さいと"権限がない"
            % とかのエラーがでる。そうなったらこのsizeを大きくしてみよう。

delaytime = 0.5; % 画像を送る(更新する)間隔。単位は秒。つまり今回は0.5秒で切り替わる            


% プロット&保存 %%%%%%%%%%%%%%%

h = figure('Position',[100 100 width hight]);
axis tight manual % this ensures that getframe() returns a consistent size
filename = 'testAnimated.gif'; % 保存する名前
for n = 1:0.5:10
    % Draw plot for y = x.^n
    x = 0:0.01:1;
    y = x.^n;
    plot(x,y) 
    drawnow % figureを更新する
    % Capture the plot as an image
    frame = getframe(h);
    im = frame2im(frame);
    [imind,cm] = rgb2ind(im,sizen);
    % Write to the GIF File
    if n == 1
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',delaytime);
    else
        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',delaytime);
    end
end

こいつらをまとめた関数とか作りたいですね。

このコードを書き直して倒立振子の制御の比較をしたのがこちらのGIFです。
f:id:fumikirinobouken:20181016164609g:plain
スライディングモード制御についての解説とかも近い内に上げたいなあ。

GitHubにこのコードは乗っけておきます。

github.com