手習ひデジタル信号処理(184) Scilab、{Scilabデモ}、ARMAその2

Joseph Halfmoon

信号処理素人老人がScilabの「信号処理のデモ」物色中デス。今回はARMAモデルの2回目です。ARMA関係はCACSD(Computer Aided Control System design)のところに含まれているので、数学不得意な老人には辛いっす。今回は、クロネッカー積登場。どしたら良いのか、皆目見当もつかず。

※「手習ひデジタル信号処理」投稿順 Indexはこちら

※Windows11上の    Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)

※自己回帰モデリング(ARMAは「定常時系列モデル」「自己回帰移動平均モデル」である)に関する忘却力の老人の備忘録はこちら

「.*.」という謎の演算子

今回のデモは、以下のデモ選択ウインドウから選択できるものです。selectARMA2

前回は「1次元」の時系列データでした。それに対して双方向?ってナンジャラホイ?

今回のデモが他のデモと異なるのは、デモ実行、即ソースコードがScilab内蔵のエディタSciNotes使って開くことです。こんな感じ。arma2scinote

 

今までのデモは「グラフ」のプルダウンメニューの片隅にソースを開くためのメニューが密においてある、というスタイルでしたが、今回は強制的にソースが開きます。まずは、ソースを読めと。

ソースを読ませていただくと、データに使っている定数も、使用している関数共も前回とクリソツ。何が違うの?とよく眺めてみると、あちこちに

.*. eye(2,2)

などと書かれていることに気づきました。eye(2, 2)は2x2の単位行列を生成するもの、このくらいはお惚け老人でも知ってます。 しかし、 .*. というのは何? ScilabのHelpの該当項から1か所引用させていただきます。kron

演算子としては .*. ですが、関数としては kron()。クロネッカー積っす。テンソルが出てきてしまった。ヤバイよ。

こんな時に頼りになるのが、Googleの生成AI、Gemini 2.0 Flash様です。こんな感じ。geminiKRON

途中ちょっと飛ばして、具体例が書かれている部分をまた引用。こんな感じ。geminiKRON2

お惚け老人などは、こうして具体的な数値を見ると安心します。根っから頭が抽象化できてないデス。

なんでもお見通しのGemini様はこの使い途についても沢山ご存じです。geminiKRON3

そうだったのね。前回のデモとクリソツなソースだけれども .*. (クロネッカー積)が登場するだけで、新たな地平(次元)が開けてくるみたい。

すると「双方向版」というタイトルは、「2次元版」くらいの感じがよかったのかも。知らんけど。

デモ実行結果

今回はグラフなし。コンソールにダラタラと結果を書き出して終わりです。基本、前回と同じ手順で「同様」な結果を出してます。唯一違うのは前回との「次元」の違い。画面に出力された結果を搔い摘んだものが以下に。

"ARMAX過程のシミュレーション: "

  A(z^-1)y=B(z^-1)u + D(z^-1) e(t)
  "A(x) ="
  1 -2.851x +2.717x^2 -0.865x^3  0                            
  0                              1 -2.851x +2.717x^2 -0.865x^3
  "B(x) ="
  x +x^2 +x^3
  x +x^2 +x^3
  "D(x)"
  1 +0.7x +0.2x^2  0              
  0                1 +0.7x +0.2x^2
  e(t)=Sig*w(t); w(t) 2-dim white noise
        | 1  0 |
  Sig=  | 0  1 |

  "ARX同定 (最小二乗): "
  A(z^-1)y=B(z^-1)u + D(z^-1) e(t)
  "A(x) ="
  1 -2.8651416x +2.750371x^2 -0.8847265x^3  0.0309454x -0.0651742x^2 +0.03475x^3     
  0.0247419x -0.044858x^2 +0.0201151x^3     1 -2.8692826x +2.7504318x^2 -0.8801384x^3
  "B(x) ="
  0.4937984x +1.4770867x^2 +1.147829x^3 
  0.5210155x +1.5940568x^2 +1.1735946x^3
  "D(x)"
  1  0
  0  1
  e(t)=Sig*w(t); w(t) 2-dim white noise
        | 1.2921295  0.0114477 |
  Sig=  | 0.0114477  1.2569522 |

素人老人には中々辛いのだが、唯一の救いは、Gemini様がScilabのことをよくご存じみたいで、いろいろお聞きできること。Helpファイルよりは数段わかりやすい?(個人の感想デス)

手習ひデジタル信号処理(183) Scilab、{Scilabデモ}、ARMAその1 へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です