フーリエ変換には角周波数を扱うものと周波数を扱うものがある。角周波数と周波数の間には角度と1回転という差があるのみ。よって、周波数に2πをかければ角周波数となる。
シミュレーションで実物を扱わなくても仕事ができる環境を目指す。つまり家に引きこもって外に出なくてもOKな世界。
【FMI/FMU】最小構成のMBD事例 第2章 その86【PyFMI③】
PyFMIの動作確認方法を列挙。 実験用のFMUを作って、それをPyFMIで制御しつつmatplotlibで波形表示する。って流れ。 DCモータモデル改造。 改造と言ってもInputブロックを追加した程度。 InputブロックもOutputブロックと同様にエイリアスは生成される。 このエイリアスにアクセスする予定。
【FMI/FMU】最小構成のMBD事例 第2章 その85【PyFMI②】
PyFMIのインスト―ルについてあれこれ。 依存関係がヤバイ。 FMILibraryの64bitが必要。 Assimuloが依存したsundials、GLIMDAのsolverの64bit品が必要。 condaだと依存関係を一撃で解決してくれる。 python-canなどはconda管理になっていないなど万能では無い。
【FMI/FMU】最小構成のMBD事例 第2章 その84【PyFMI①】
PyhthonからFMUを制御するPyFMIの紹介。 内部でFMILibraryを使用している。 JModelicaの一部。 JModelicaはmodelon AB社のModelicaPlatform。 2019年にClosed Sourceに移行。 FMILibraryも開発元はmodelon AB社。
【FMIライブラリ】最小構成のMBD事例 第2章 その83【DCモータ⑪】
FMILibraryについての感想。 標準仕様であるが故の恩恵であるが、他ツールで出力したものを再利用できるのは助かる。 CAN、A/D、D/Aなどと繋げるとさらに強力な使い方ができるかも? 今後はPythonベースの環境を構築してみる。 ググっても情報少ないので手探り状態の失敗覚悟状態で進める。
【FMIライブラリ】最小構成のMBD事例 第2章 その82【DCモータ⑩】
固定値パラメータの変更の挙動確認。 Rampの挙動を変えた。 目標値(target)の挙動を変えたため、それに合わせて全体の挙動が変化。 狙った挙動になっている。 パラメータになっていれば、おおよそ変更可能。 変えられないのはアルゴリズムそのものや信号線の繋ぎぐらい。
【FMIライブラリ】最小構成のMBD事例 第2章 その81【DCモータ⑨】
FMU内部の固定値パラメータの変更ができるか? 以前やった方法で実現可能。 これのソースコード改造実施。 Rampの開始タイミング、0→1の期間を設定できるように改造。 "ramp.duration"が0.8[s] → 1.5[s]。 "ramp.startTime"が0.2[s] → 0.3[s]。
【FMIライブラリ】最小構成のMBD事例 第2章 その80【DCモータ⑧】
改造版fmi2_import_cs_testの実行してみた。 問題無く動作している様子。(目標値、制御電圧、モータ電流、モータ角速度) 試しにグラフで表示。 期待通りの波形が得られた。 これに伴い、OpenModelicaからexportしたFMUもFMILibraryで制御可能と言える。
【FMIライブラリ】最小構成のMBD事例 第2章 その79【DCモータ⑦】
シミュレーションループにvalueReferenceを渡すためのfmi2_import_cs_testのソースコード修正を確認。 流れは以下。 欲しいパラメータ名文字列列挙。 変数オブジェクト取得。 valueReference取得。 valueReferenceをシミュレーションループで利用。
【FMIライブラリ】最小構成のMBD事例 第2章 その78【DCモータ⑥】
OpenModelicaからexportしたFMUをFMILibraryで読み込んでみた。 無事読み込み成功。 変数リストによる列挙もできた。 必要なパラメータの情報は問題無く取得出来ている。 シミュレーションをするために若干の改造が必要。 シミュレーションループにvalueReferenceが渡るように修正。
【FMIライブラリ】最小構成のMBD事例 第2章 その77【DCモータ⑤】
OpenModelicaから無事FMUをexport。 FMU内部のmodelDescription.xmlを参照。 Outputブロック名のパラメータの存在を確認。 上記のvalueReferenceと同値のパラメータも確認。 モデル上、同一の信号線上のパラメータが該当。 利用するのはOutputブロック側。
【FMIライブラリ】最小構成のMBD事例 第2章 その76【DCモータ④】
OpenModelicaからFMUをexportするための設定確認が必要。 FMIオプション内を確認&修正。 バージョン:2.0。 タイプ:Co-Simulation。 Platforms:Static。 Linux環境だとDynamicでもOKだろうが、Windows環境だとStatic推奨。
【FMIライブラリ】最小構成のMBD事例 第2章 その75【DCモータ③】
クローズループ制御にしたDCモータモデルの動作確認を実施。 ちゃんと動いてるっぽい。 Outputブロック設置 各種信号にエイリアスを振るために設置。 目標値をtarget。 指令電圧値をvoltage。 電流センサで取れる電流をcurrent。 角速度センサで取れる角速度をspeed。
【FMIライブラリ】最小構成のMBD事例 第2章 その74【DCモータ②】
以前使ったDCモータモデルにPID制御器を付けた。 PID制御器はModelicaライブラリに最初から存在。 実際にはLimPID。 パラメータはKp、Ki、KdではなくKp、Ti、Tdな点に注意。 とりあえず、クローズループ(PID)制御のDCモータモデルが出来た。(つもり)
【FMIライブラリ】最小構成のMBD事例 第2章 その73【DCモータ①】
「OpenModelicaで作ったFMUをFMILibraryで制御する」のプランを提示。 モデルは以前扱ったDCモータモデルとする。 Rampをそのまま電圧としてDCモータに印加するモデル。 ただし、そのまま使わずPID制御を追加してみる。 オープンループ制御からクローズループ制御のモデルに変更。
【FMU】最小構成のMBD事例 第2章 その72【FMILibrary㉙】
パラメータ名文字列からFMUの制御までを動作確認。 valueReferenceの取得OK。 その後のvalueReferenceを使用したパラメータ変更も当然OK。 今後の予定としては、OpenModelicaがexportしたFMUを使っていろいろやっていこうと画策している。 ぶっちゃけると手探り状態。
【FMU】最小構成のMBD事例 第2章 その71【FMILibrary㉘】
パラメータ名文字列を元にFMU内パラメータ変更の実験コード提示。 変数オブジェクトを取得し、そこからvalueReference取得。 valueReferenceが分かれば、FMU内パラメータは好き勝手できる。 これにより今後、他のFMUを使う場合になっても比較的楽にパラメータアクセスができそう。
【FMU】最小構成のMBD事例 第2章 その70【FMILibrary㉗】
「パラメータ名文字列から変数オブジェクト取得」のAPI確認。 fmi2_import_get_variable_by_nameというAPI。 パラメータ名文字列を渡せば、変数オブジェクトが返ってくる。 修正箇所は恒例のイニシャルモード中。 今後のことも考え複数のvalueReferenceを取得する予定。
【FMU】最小構成のMBD事例 第2章 その69【FMILibrary㉖】
変数リストを取得する以外のvalueReference取得方法がある。 パラメータ名文字列を指定してvalueReference取得したいが、直接それができるAPIは無い。 パラメータ名文字列を元に変数オブジェクトを取得するAPIはある。変数オブジェクトが取得できれば、そこからvalueReferenceは取得できる。
【FMU】最小構成のMBD事例 第2章 その68【FMILibrary㉕】
変数リストのソートルールが複数あることを思い出した。 よって、他のソートルールも試した。 それぞれ想定通りの動作になっていることを確認。 ソートの変更は現実的にはあまり出番は無さそう。 HILS、RAPIDコントローラで使うかもしれないが、それらもそこそこの性能があるのでやはり使わない?
【FMU】最小構成のMBD事例 第2章 その67【FMILibrary㉔】
「modelDescription.xml内の変数情報を列挙」を実施。 問題無く動作。 modelDescription.xmlに記載されてる変数がすべて列挙されていることを確認。 ソートルールは「XMLファイルに記載されているオリジナルの順序」 こちらも想定通りの動作になっていることを確認。
【FMU】最小構成のMBD事例 第2章 その66【FMILibrary㉓】
modelDescription.xml内部変数列挙の処理手順確認。 コード追加箇所説明。 fmi2_import_enter_initialization_modeとfmi2_import_exit_initialization_modeの間。 コード提示。 前回までに説明したAPI(文字列変換含む)を全部使用した。
【FMU】最小構成のMBD事例 第2章 その65【FMILibrary㉒】
fmi2_import_get_variability、fmi2_import_get_causality、fmi2_import_get_initialと併用して使う便利APIが存在。 上記関数戻り値のenumに準じて文字列を返してくれるAPI。 中身はswich分で実現してるだけ。 次回は実際にソースコード作成。
【FMU】最小構成のMBD事例 第2章 その64【FMILibrary㉑】
valueReferenceの取得方法確認。 変数オブジェクトを渡すと取得できる。 変数名の取得。 これも変数オブジェクトを渡すと取得できる。 その他のdescription、variability、causality、initial。 これも一緒で変数オブジェクトを渡して取得。
【FMU】最小構成のMBD事例 第2章 その63【FMILibrary⑳】
「fmi2_import_get_variable_list_sizeによる変数リスト数の取得」の仕様確認。 やってることはそのままでリストの要素数を取得。 「fmi2_import_get_variableによる変数オブジェクトの取得」の仕様確認。 変数オブジェクトは変数関連の情報にアクセスするハンドルのようなもの。
【FMU】最小構成のMBD事例 第2章 その62【FMILibrary⑲】
fmi2_import_parse_xmlについては以前やったのでスルー。 fmi2_import_get_variable_listはmodelDescription.xmlの情報取得の起点。 ソートルールを切り替えられる。 型/valueReferenceでソートがちょっと特殊。 ベクトル的アクセスで使えそう。
【FMU】最小構成のMBD事例 第2章 その61【FMILibrary⑱】
FMUはパラメータ名とvalueReferenceの紐づけが出来た方が運用し易い。 FMILibraryはmodelDescription.xmlの内部情報を構造的に抱えている。 よって、APIで各種情報を取得可能。「modelDescription.xmlの内容を列挙」までの流れを確認。手順は多いが、流れはシンプル。
【FMU】最小構成のMBD事例 第2章 その60【FMILibrary⑰】
修正済みfmi2_import_cs_testを実行。 パッと見変化がわからないので以前の実行結果と比較。 明らかに初期のボールの高さは変わっている。 グラフにして確認。 初期のボールの高さが変わっているので、跳ね方も変わる。 このように初期パラメータもFMILibrary経由で変更可能。
【FMU】最小構成のMBD事例 第2章 その59【FMILibrary⑯】
修正コードができたので確認。 内容の詳細説明。 読み出すvalueReference群の定義。 fmi2_import_get_realで一気に読み出し。 ボールの初期の高さだけ変更。 fmi2_import_set_realで一気に書き戻し。 数値解析ツール由来のベクトルで一気に制御する方式になっている。
【FMU】最小構成のMBD事例 第2章 その58【FMILibrary⑮】
modelDescription.xmlでインターフェース定義を確認。 fmi2_import_set_realに渡すvalueReferenceはmodelDescription.xmlに定義されてるvalueReferenceを渡せばOK。 これを踏まえた上で最もシンプルと思われるコードサンプル提示。
【FMU】最小構成のMBD事例 第2章 その57【FMILibrary⑭】
fmi2_import_set_realのAPI仕様確認。 FMI statusの定義確認。 モデル記述オブジェクトはfmi2_import_parse_xmlで取得できるfmi制御用のハンドル。 FMUを展開した後に出てくるのmodelDescription.xmlを指定する必要がある。
【FMU】最小構成のMBD事例 第2章 その56【FMILibrary⑬】
FMUのシミュレーションパラメータを変更することができる。 ただし、イニシャルモード中。 イニシャルモードを指定するAPIが存在。 fmi2_import_set_realというAPIでパラメータ変更が可能。 型に応じたAPIになっており、他にinteger、boolean、string用のAPIが存在する。
「ブログリーダー」を活用して、KEIさんをフォローしませんか?
フーリエ変換には角周波数を扱うものと周波数を扱うものがある。角周波数と周波数の間には角度と1回転という差があるのみ。よって、周波数に2πをかければ角周波数となる。
動画作成関連のバックナンバー用ページ。立ち絵を作ったり、動画作ったり、アイキャッチ画像作ったりなどを掲載していく。
MATLAB,Python,Scilab,Julia比較するシリーズの第4章。第4章では分類問題で最終的にはニューラルネットワークや最適化アルゴリズムの話だった。第5章はフーリエ解析学から高速フーリエの話がメインとなる。
立ち絵の配置: PSDファイルをAviUtlに配置し、画面サイズやフレームレートを設定。のっぺらぼう化: 目と口を消して、アニメーション効果を追加。アニメーション効果: 目パチと口パクの設定を行い、リップシンクを調整。
フーリエ変換を定義。フーリエの積分公式の一部を抜き出す。逆フーリエ変換を定義。フーリエの積分公式にフーリエ変換を代入するだけ。
Δωで刻みにしたので、極限を利用して連続系へ。数式上は連続ではあるが、一般的な表現ではない。区分求積法とリーマン積分について。フーリエの積分公式を導出した。
VOICEVOXとAivisSpeechキャラと一緒に!AviUtlを使った動画作成 バックナンバーはじめに以前、AivisSpeechのAnneliというキャラの立ち絵を作成した。さらにそこに加えて、AivisSpeechのアイコン画像を...
PSDToolKitプラグインの導入の仕方を説明。PSDファイルを探してGIMPで内容を確認。GIMPで瞬き用、口パク用のレイヤー編集。
フーリエに積分公式は複素フーリエ級数と複素フーリエ係数から導出する。周期2Lの波の数を示すnを周期2πに於ける波の数である角周波数ωに変換。角周波数ωの刻みであるΔωについて説明。Δωを定義することで、離散的な係数算出が連続的な角周波数算出に近づけていっている。
区分求積法とリーマン積分について。離散と連続の分け目。フーリエの積分公式を導出した。演算したはずなのに変化しない。つまり変換、逆変換が成立することを示している。
Δωで刻みにしたので、極限を利用して連続系へ。数式上は連続ではあるが、一般的な表現ではない。よって、一般的な表現に書き換える必要がある。
角周波数ωの刻みであるΔωについて説明。Δωを定義することで、離散的な係数算出が連続的な角周波数算出に近づけていっている。
周期2Lの波の数を示すnを周期2πに於ける波の数である角周波数ωに変換。ω=nπ/Lを使用して変換するだけ。これにより少し数式がシンプルになった。
VOICEVOXとAivisSpeechキャラと一緒に!AviUtlを使った動画作成 バックナンバーはじめに以前、AivisSpeechのAnneliというキャラの立ち絵を作成した。ほぼ独自に作成したが、Anneliの画像自体はAivisS...
フーリエに積分公式は複素フーリエ級数と複素フーリエ係数から導出する。変換を想定した式に変換。複素指数関数との積と積分、総和を経由すると元に関数に戻るというイメージが重要。
AviUtlのセットアップと拡張編集Pluginの導入を行った。mp4ファイルの入力と出力の方法を説明。アニメーションgifの対応方法を説明。
分数は割り算の別表現として理解しやすく、逆数を掛けることで計算が簡単になる。これにより、小数の掛け算や割り算の理解が深まる。一次関数の数式をグラフにすることや、グラフから数式を導くことは、データのトレンド分析や物理現象の理解に役立つ。微分は関数の変化率を求める手法であり、数値微分を使って近似的に求めることができる。これにより、物理学や経済学など多くの分野で応用可能。
Youtube動画やブログ記事のアイキャッチ用に作成した、VOCEIVX(四国めたん、ずんだもん、春日部つむぎ)、AivisSpeech(Anneli)の画像たち。Stable Diffusionで生成&少しペン入れ&GIMPによる補正したものになります。
各種フーリエについてまとめてみた。いままでは級数→係数の順番でやっていたため、逆フーリエ変換→フーリエ変換の順番が自然。実際には「フーリエの積分公式を求める」ことになるが、これは逆フーリエ変換そのものである。
各種フーリエについてまとめてみた。いままでは級数→係数の順番でやっていたため、逆フーリエ変換→フーリエ変換の順番が自然。実際には「フーリエの積分公式を求める」ことになるが、これは逆フーリエ変換そのものである。
最適化アルゴリズム モーメンタムを用いて分類の学習をJuliaで実現。 問題無く動作。 学習の収束が通常の勾配降下法よりも比較的早い。
最適化アルゴリズム モーメンタムを用いて分類の学習をScilabで実現。 問題無く動作。 学習の収束が通常の勾配降下法よりも比較的早い。
最適化アルゴリズム モーメンタムを用いて分類の学習をScilabで実現。 問題無く動作。 学習の収束が通常の勾配降下法よりも比較的早い。
最適化アルゴリズム モーメンタムを用いて分類の学習をPythonで実現。 問題無く動作。 学習の収束が通常の勾配降下法よりも比較的早い。
最適化アルゴリズム モーメンタムを用いて分類の学習をMATLABで実現。 問題無く動作。 学習の収束が通常の勾配降下法よりも比較的早い。
モーメンタムを確認するプログラムの方針を確認。 以前の勾配降下法のプログラムをベースにする。 隠れ層のユニット数は4。 プログラムのフローを確認。 モーメンタム項とパラメータ更新が基本的な差分となる。
モーメンタムの更新式について確認。 指数移動平均を利用して直近の値を重視する。 モーメンタムの動作イメージについて確認。 最初は大きく更新して、最適解が近いと小さく更新。 勾配降下法で言うところの学習率が可変と同義な動きになる。
勾配降下法の更新式を確認。 勾配降下法の動作イメージを確認。 学習率が大きい場合と小さい場合で挙動が変わる。 ちょうど良い学習率を人間の手で探す。 これにより、一般的なパラメータとは異なるハイパーパラメータというカテゴリになる。
最適化アルゴリズムを取り扱う。 今回のネットワークだとさほど恩恵はないが知っていて損はない。 まずはモーメンタムから解説&実験をしていく。 最初は復習を兼ねて勾配降下法についても確認する。
モーメンタムを確認するプログラムの方針を確認。 以前の勾配降下法のプログラムをベースにする。 隠れ層のユニット数は4。 プログラムのフローを確認。 モーメンタム項とパラメータ更新が基本的な差分となる。
モーメンタムの動作イメージについて確認。 動作イメージの表現は難しい。 最初は大きく更新して、最適解が近いと小さく更新。 勾配降下法で言うところの学習率が可変と同義な動きになる。
モーメンタムの更新式について確認。 指数移動平均を利用して直近の値を重視する。 実際の指数移動平均とは異なっているので、その点は注意。
勾配降下法の動作イメージを確認。 学習率が大きい場合と小さい場合で挙動が変わる。 ちょうど良い学習率を人間の手で探す。 これにより、一般的なパラメータとは異なるハイパーパラメータというカテゴリになる。
今回改めてまじめに更新式を確認。 勾配降下法の更新式が一番シンプルなので今後の最適化アルゴリズムの更新式を見る際は比較対象になりやすい。
最適化アルゴリズムを取り扱う。 今回のネットワークだとさほど恩恵はないが知っていて損はない。 まずはモーメンタムから解説&実験をしてい 最初は復習を兼ねて勾配降下法についても確認する。
多層パーセプトロンの隠れ層のユニット数を2から4に変えたJuliaコードで分類を実施。 大きく2パターンの分類パターンがある。 やや複雑な分類パターンが4ユニットにすることで出てきたもの。
多層パーセプトロンの隠れ層のユニット数を2から4に変えたScilabコードで分類を実施。 大きく2パターンの分類パターンがある。 やや複雑な分類パターンが4ユニットにすることで出てきたもの。
多層パーセプトロンの隠れ層のユニット数を2から4に変えたPythonコードで分類を実施。 大きく2パターンの分類パタ やや複雑な分類パターンが4ユニットにすることで出てきたもの。
多層パーセプトロンの隠れ層のユニット数を2から4に変えたMATLABコードで分類を実施。 大きく2パターンの分類パターン やや複雑な分類パターンが4ユニットにすることで出てきたもの。
多層パーセプトロンの隠れ層のユニット数を2から4に変えたJuliaコードで分類を実施。 大きく2パターンの分類パターンがある。 やや複雑な分類パターンが4ユニットにすることで出てきたもの。