ブロック線図からボー​ド線図をプロットする​にはどうすれば良いで​すか?

134 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2013 年 10 月 25 日
編集済み: MathWorks Support Team 2021 年 3 月 9 日
ブロック線図からボード線図をプロットするにはどうすれば良いか、教えてください。

採用された回答

MathWorks Support Team
MathWorks Support Team 2021 年 3 月 9 日
編集済み: MathWorks Support Team 2021 年 3 月 9 日
主に以下に示す1. 2.のようなアプローチ手法があります。またそれぞれのアプローチ手法において、2通りの方法を説明します。現在ご利用のツールにより使い分けて下さい。
※サンプルプログラム・モデルは、"関連ドキュメント"よりダウンロードすることができます。
1. 線形システム、または非線形システムを一旦、線形システムへ近似しボード線図をプロットする方法(サンプル:case1.mdl)
(1) Simulink Control Design(Control System Toolboxが必要)を利用する場合
Simulink Control Designのモデル線形化器(線形解析機能)により容易にボード線図をプロットすることができます。
R2011a 以降をご利用の場合、下記 URL をご覧ください。
始めに、システムの入力ポイントと出力ポイントを設定します。
モデルウィンドウの[ツール]-[制御設計]-[線形解析]メニューを選択します。
プロットタイプを「ボード応答プロット」とし、「モデルの線形化」ボタンをクリックします。(R14以前のリリースをご利用の場合には、LTI Viewerウィンドウの[編集]-[プロットの設定]メニューから、「応答タイプ」で「ボード」を選択します)
LTI Viewerウィンドウへボード線図がプロットされます。
(R14以前のリリースをご利用の場合には、LTI Viewerウィンドウの[Simulink]-[線形化したモデルの取得]メニューを選択します)
(2) Control System Toolboxのみを利用する場合
対象のモデル(ここではcase1.mdl)をオープンし、linmodコマンドにより線形化を行います。線形化されたシステムの入力ポイント、出力ポイントは、モデルのトップ階層に配置されたInport、Outportブロックが基準となります。
>> [num,den] = linmod('case1')
Returning transfer function model
num = 0 0 25.0000
den = 1.0000 1.0000 25.0000
伝達関数の分子係数ベクトルnum、分母係数ベクトルdenが得られます。
bodeコマンドを使って、取得された伝達関数からボード線図を計算、作成します。
>> bode(num,den)
(3) MATLAB/Simulinkのみを利用する場合
対象のモデル(ここではcase1.mdl)をオープンし、linmodコマンドにより線形化を行います。線形化されたシステムの入力ポイント、出力ポイントは、モデルのトップ階層に配置されたInport、Outportブロックが基準となります。
>> [num,den] = linmod('case1')
Returning transfer function model
num = 0 0 25.0000
den = 1.0000 1.0000 25.0000
伝達関数の分子係数ベクトルnum、分母係数ベクトルdenが得られます。
取得された伝達関数から周波数応答を計算し、ボード線図をプロットします。
%---スクリプト例(サンプル:script1.m)---w = logspace(-1,2,100);
j = sqrt(-1);
Gjw = polyval(num,j*w)./polyval(den,j*w);
Mag_dB = 20*log10(abs(Gjw));
Ph = unwrap(angle(Gjw))/(pi/180);
subplot(211)
semilogx(w,Mag_dB)
xlabel('Frequency (rad/s)'); ylabel('Magnitude (dB)');
subplot(212)
semilogx(w,Ph)
xlabel('Frequency (rad/s)'); ylabel('Phase (deg)');
なお、Signal Processing Toolboxが利用可能な場合には、下記 2. の(1)の方法も利用可能です。
2. 非線形システムから直接、ボード線図をプロットする方法(サンプル:case2.mdl)
(1) Signal Processing Toolboxを利用する場合
シミュレーション実行後のシステムへの入力データ、出力データから周波数応答関数を計算し、ボード線図をプロットします。周波数応答関数の計算には、Signal Processing Toolboxの関数tfeを使用します。
まず、システムへの入力部、出力部にTo Workspaceブロックを配置し、シミュレーションデータを収録できるようにしておきます。以下例では、入力データindata、出力データoutdataが、シミュレーション実行後にワークスペースへ保存されます。
周波数応答関数の計算を行い、ボード線図をプロットします。
%--- スクリプト例(サンプル:script2.m) ---[Txy,F] = tfe(indata,outdata,4096,1/0.05,ones(4096,1));
Mag_dB = 20*log10(abs(Txy));
Ph = unwrap(angle(Txy))/(pi/180);
w = 2*pi*F;
subplot(211)
semilogx(w,Mag_dB)
xlabel('Frequency (rad/s)'); ylabel('Magnitude (dB)');
xlim([1 10]); ylim([-10 15]);
subplot(212)
semilogx(w,Ph)
xlabel('Frequency (rad/s)'); ylabel('Phase (deg)');
xlim([1 10]); ylim([-200 0]);
(2) MATLAB/Simulinkのみを利用する場合
シミュレーション実行後のシステムへの入力データ、出力データから周波数応答関数を計算し、ボード線図をプロットします。
まず、システムへの入力部、出力部にTo Workspaceブロックを配置し、シミュレーションデータを収録できるようにしておきます。以下例では、入力データindata、出力データoutdataが、シミュレーション実行後にワークスペースへ保存されます。
周波数応答関数の計算を行い、ボード線図をプロットします。
%---スクリプト例(サンプル:script3.m) ---Pxx = fft(indata,4096);
Pyy = fft(outdata,4096);
Pxy = (Pyy.*conj(Pxx))./(Pxx.*conj(Pxx));
Pxy = Pxy(1:2048);
F = (0:2047)*(1/0.05)/4096;
Mag_dB = 20*log10(abs(Pxy));
Ph = unwrap(angle(Pxy))/(pi/180);
w = 2*pi*F;
subplot(211)
semilogx(w,Mag_dB)
xlabel('Frequency (rad/s)'); ylabel('Magnitude (dB)');
xlim([1 10]); ylim([-10 15]);
subplot(212)
semilogx(w,Ph)
xlabel('Frequency (rad/s)'); ylabel('Phase (deg)');
xlim([1 10]); ylim([-200 0]);
その他の非線形システムのボード線図の描画方法は、関連ソリューション”非線形の Simulink モデルのボード線図を描くにはどうすればよいですか?” を参照ください。
をご参照ください。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange時間領域および周波数領域解析 についてさらに検索

製品


リリース

R2006a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!