ゲイン線図だけが欲しかった【備忘録】

クソ忙しいときに限って,妙にマニアックなことがやりたくなるのは常なわけで昨日の夜もご多分に漏れずやってしまった.そもそも,事の始まりは修論に乗せるH^\infty制御系の重み関数のゲイン線図を描き始めたことにある.bodeコマンドで表示されるダイアグラムは位相線図も出るので使えない.っちゅうわけで,何とかゲイン線図だけ取り出せませんかということになった.


僕は,基本的に論文に載せるグラフのフォントの調整や色の変更などは全てMatlabでやってしまってIllustratorを使わないことにしている.(Illustratorでcmmi10が入ったグラフを読み込みと,cmmi10があるにもかかわらず強制的に別のフォントで置換されて,挙句文字の位置がずれてしまって全体の図に統一感が出なくなるから)そんなわけでゲイン線図も,まずグラフだけ表示してラベルとかはあとからコマンドで挿入する感じでやろうと思って,bodemagコマンドを走らせると,なにやらラベルに別のテキストがのってしまう(単位とか).30分くらいこのテキストが取れないか奮闘するも結局取れず.


しょーがないのでbodeコマンドで直接ゲインを計算させて,その結果をデシベルに計算しなおして,semilogxでプロットすることに.簡単に行くかと思いきや,bodeコマンドで計算したゲインは3-D配列とかいうデータ構造で保存されていらしく,いままでそんなもん扱ったことないので取り扱いがわからず見事にハマッテしまった.その後色々やってみるも一括でゲインだけを抜き出すことが出来ず,時間も無くなってきたので次のスクリプトを書いて強引に解決.あぁ,かっこ悪いやり方だorz

numw = [1];
denw = [1 0.001];

Sys = tf(numw,denw)

w = logspace(-5,1,100);
[mag, phase] = bode(Sys,w);

temp = [];
for i=1:length(w)
temp = [temp; mag(1,1,i)];
end

gain = 20*log10(temp);

figure(1)
set(figure(1),'position',[630 100 512, 356]);
set(figure(1),'DefaultAxesFontSize',16,'DefaultAxesFontName','cmss10')
h11 = semilogx(w,gain);
set(h11,'LineWidth',2,'Color',[0 0 1])
grid on
xlabel('Frequency [Hz]')
ylabel('Gain [dB]')
xlim([0.00001 10])
ylim([-40 65])