Simulinkのスイープジェネレータ表示プログラム
先日説明したSimulinkのスイープジェネレータの
プロットプログラムです。
モデルがSimulinkでプロットプログラムがMATLABなんですが・・・
かなり適当に作ったので、プログラムも適当です。
MATLABのプログラムの他にSimulinkモデルも必要となります。
が…
画像だけ添付しておきます。
ほしい人は連絡ください。
MATLABのプログラムですが、モデルパラメータの一部を
mファイルで記述しています。
シミュレーションのサンプリングタイム
スイープジェネレータの開始周波数
目標時間
目標周波数
です。
帯域としてはサンプリングが1Ks/sですので
扱う周波数が500Hz以下できれば200Hz位が良いかなと思います。
もっと高い周波数で考える場合、
サンプリングタイム(シミュレーションステップ)を細かくするやり方がありますが、
これから0.0001くらいならまだよいかもしれませんが、0.00001くらいまで細かくすると
インタプリタシミュレーションの実行速度がかなり遅くなってしまうのと、
シミュレーション時間が例えば10秒ならまだしも100秒とか1000秒シミュレーションする
ってことになると感動するくらい計算量がシミュレーション時間に比例するだけでなく、
メモリにシミュレーション結果を保存するのでかなりメモリを圧迫してシミュレーション時間が増えた以上に
実行速度が遅くなるので注意してください。
その場合はSimulinkのアクセラレータモードがSimulinkCoder持ってる人は
ラピッドシミュレーションすれば短時間でシミュレーションできます。
あとこのプログラムではmatlabオプションのsignal processing toolboxや
control system toolboxが不要です。
T = 0.001; % Sample time
Fs = 1/T; % Sampling frequency
fi=0;
tt=10;
tof=20;
open_system(‘sweptsample’)
sim(‘sweptsample’)
L = length(ScopeData.signals.values(:,2)); % Length of signal
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Yout = fft((ScopeData.signals.values(:,2)),NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Yout(1:NFFT/2+1)))
title(‘Single-Sided Amplitude Spectrum of y(t)’)
xlabel(‘Frequency (Hz)’)
ylabel(‘|Y(f)|’)
xlim([0 10])
figure
subplot 221
plot(ScopeData.time,ScopeData.signals.values(:,2))
title(‘input signal’)
ylabel(‘Amplitude’)
xlim([0 5])
xlabel(‘time(sec)’)
grid on
subplot 222
plot(ScopeData.time,ScopeData.signals.values(:,1))
title(‘output signal’)
grid on
xlim([0 5])
xlabel(‘time(sec)’)
subplot 223
plot(f,2*abs(Yout(1:NFFT/2+1)))
title(‘Swept Amplitude Spectrum of y(t)’)
xlabel(‘Frequency (Hz)’)
ylabel(‘|Y(f)|’)
xlim([0 150])
grid on
subplot 224
[nag ph]=bode(tf(1,[10 1 10000]));
aaa=reshape(nag,1,length(nag));
plot([1:length(nag)]/2/pi,aaa)
xlabel(‘Frequency (Hz)’)
grid on
Tags: MATLAB, Simulink, スイープジェネレータ