
信号処理素人老人がScilabの「信号処理のデモ」物色中デス。今回はARMAモデルの2回目です。ARMA関係はCACSD(Computer Aided Control System design)のところに含まれているので、数学不得意な老人には辛いっす。今回は、クロネッカー積登場。どしたら良いのか、皆目見当もつかず。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)
※自己回帰モデリング(ARMAは「定常時系列モデル」「自己回帰移動平均モデル」である)に関する忘却力の老人の備忘録はこちら
「.*.」という謎の演算子
今回のデモは、以下のデモ選択ウインドウから選択できるものです。
前回は「1次元」の時系列データでした。それに対して双方向?ってナンジャラホイ?
今回のデモが他のデモと異なるのは、デモ実行、即ソースコードがScilab内蔵のエディタSciNotes使って開くことです。こんな感じ。
今までのデモは「グラフ」のプルダウンメニューの片隅にソースを開くためのメニューが密においてある、というスタイルでしたが、今回は強制的にソースが開きます。まずは、ソースを読めと。
ソースを読ませていただくと、データに使っている定数も、使用している関数共も前回とクリソツ。何が違うの?とよく眺めてみると、あちこちに
.*. eye(2,2)
などと書かれていることに気づきました。eye(2, 2)は2x2の単位行列を生成するもの、このくらいはお惚け老人でも知ってます。 しかし、 .*. というのは何? ScilabのHelpの該当項から1か所引用させていただきます。
演算子としては .*. ですが、関数としては kron()。クロネッカー積っす。テンソルが出てきてしまった。ヤバイよ。
こんな時に頼りになるのが、Googleの生成AI、Gemini 2.0 Flash様です。こんな感じ。
途中ちょっと飛ばして、具体例が書かれている部分をまた引用。こんな感じ。
お惚け老人などは、こうして具体的な数値を見ると安心します。根っから頭が抽象化できてないデス。
なんでもお見通しのGemini様はこの使い途についても沢山ご存じです。
そうだったのね。前回のデモとクリソツなソースだけれども .*. (クロネッカー積)が登場するだけで、新たな地平(次元)が開けてくるみたい。
すると「双方向版」というタイトルは、「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ファイルよりは数段わかりやすい?(個人の感想デス)