LoginSignup
4
4

COPILOTにMATLAB Functionの中身を書いてもらった【Simulink】

Posted at

このページについて

以下のようなことを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]のサイン波。

image.png

Simulation結果

なんか出来てるっぽい。。。
黒が入力信号で、青が出力信号ですね。
image.png

感想

COPILOT、悪くないっすね。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4