このページについて
以下のようなことをSimulinkでやりたいと思ったんだが、どうも通常のSimulinkのブロックだと作りづらい。
ってことで、Matlab Functionを使うことにした。ただ、自分で書くのは面倒くさいので、COPILOTに書いてもらった。
★やりたいこと★
・2入力1出力のMatlab Functionブロック中身を作りたい。
・入力1の過去Nサンプリング分の平均値を出力するようなMatlab Functionブロックを作りたい。(つまりFIRフィルタ)
・パラメータNについては、入力2で規定できるようにしたい。
COPILOTにMATLAB Functionの中身を書いてもらった
↑で書いた"やりたいこと"をCOPILOTに伝えたら、一瞬で以下のようなコードを書いてくれました。
function y = movingAverage(u, N)
% 持続的なメモリを持つ変数
persistent samples;
persistent index;
persistent sum;
% 初期化
if isempty(samples)
samples = zeros(N, 1); % Nサンプル分の配列をゼロで初期化
index = 1; % インデックスを1で初期化
sum = 0; % 合計を0で初期化
end
% サンプルの更新
sum = sum - samples(index) + u; % 古いサンプルを引いて新しいサンプルを足す
samples(index) = u; % 新しいサンプルを配列に格納
% インデックスの更新
index = mod(index, N) + 1; % インデックスを循環させる
% 出力の計算
y = sum / N; % 平均値を計算して出力
end
Simulinkブロック図
こんな感じで作りましたわ。
処理周期は0.01[s]にしました。入力は、5[rad/sec]のサイン波。
Simulation結果
なんか出来てるっぽい。。。
黒が入力信号で、青が出力信号ですね。
感想
COPILOT、悪くないっすね。