フーリエ変換には角周波数を扱うものと周波数を扱うものがある。角周波数と周波数の間には角度と1回転という差があるのみ。よって、周波数に2πをかければ角周波数となる。
シミュレーションで実物を扱わなくても仕事ができる環境を目指す。つまり家に引きこもって外に出なくてもOKな世界。
【PyFMI】最小構成のMBD事例 第2章 その116【リアルタイム描画⑩】
Scaleの配置確認。 問題無く配置されているのを確認。 Scaleの挙動確認。 値をprintしているのでそれを確認。 Scaleの値が出力されているの挙動もOK。 tkinterはmainloopに入ると、戻ってこない。 よって、タイマ処理を使ってうFMU関連、描画関連をうまくハンドリングする必要あり。
【PyFMI】最小構成のMBD事例 第2章 その115【リアルタイム描画⑨】
最後のウィジットとしてScaleを配置。 いままでのウィジットの中では最もパラメータが多い。 縦置き、横置きの指定ができる。commandという引数で値変更時のコールバックを設定できる。to、from_で値の範囲を指定できるが大きさが逆転しても良い。0値の配置を逆にしたい場合は意図的に逆転させる。(公式もOK情報あり)
【PyFMI】最小構成のMBD事例 第2章 その114【リアルタイム描画⑧】
チェックボックスの配置。 チェック状態を確認するための変数を用意し、ウィジット生成時に渡しておく。 この変数を見ればチェック状態が分かる。 チェック状態をPython側から変更することも可能。 placeで座標指定して配置。 同様の処理を必要なチェックボックス分実施。 GUI上でも設置されていることを確認。
【PyFMI】最小構成のMBD事例 第2章 その113【リアルタイム描画⑦】
FigureCanvasTkAggを使用してtkinterへmatplotlibを埋め込み。pack(side = tkinter.RIGHT)でメインウィンドウの右端に接するよう配置。NavigationToolbar2Tkを使用してメニューバー配置。place(x=0, y=h/2-40)を使用して座標指定で配置。
【PyFMI】最小構成のMBD事例 第2章 その112【リアルタイム描画⑥】
matplotlibをtkinterに埋め込む際には以下のモジュールが必要。 matplotlib.pyplot。 プロット用。 FigureCanvasTkAgg。 プロット画面埋め込み用。 NavigationToolbar2Tk。 メニューバー。 埋め込む前に図(figure)を用意しておく。
【PyFMI】最小構成のMBD事例 第2章 その111【リアルタイム描画⑤】
tkinterのimportはそのまんま。 「import tkinter」 VisualStudioのリソースエディタのようなものは無い。 メインウィンドウ生成方法解説。 titleも指定可能。 メインウィンドウの大きさと位置指定。 文字列で以下のような感じで指定。 '960x540+960+0'。
【PyFMI】最小構成のMBD事例 第2章 その110【リアルタイム描画④】
tkinterはPython標準ライブラリのためインストール済み。 動作確認。 「python -m tkinter」でウィンドウが出てくればとりあえずOK。 メインウィンドウをrootとして定義し、そこに各ウィジットを生成&紐づけしていく。 matplotlib関連もtkinter連携用モジュールが存在する。
【PyFMI】最小構成のMBD事例 第2章 その109【リアルタイム描画③】
実験構成はGUIから決めていく。 GUIでおおよそのインターフェースが確定しそうだから。 GUIの概要図を描いた。 各種チェックボックス、Scale、plot画面。 上記の機能、目的を定義。 処理負荷が分かるようにする。 pauseに関してはリアルタイム描画を抑制した際の負荷を見る為に設置。
【PyFMI】最小構成のMBD事例 第2章 その108【リアルタイム描画③】
実験構成はGUIから決めていく。 GUIでおおよそのインターフェースが確定しそうだから。 GUIの概要図を描いた。 各種チェックボックス、Scale、plot画面。 上記の機能、目的を定義。 処理負荷が分かるようにする。 pauseに関してはリアルタイム描画を抑制した際の負荷を見る為に設置。
【PyFMI】最小構成のMBD事例 第2章 その108【リアルタイム描画②】
実験環境は「シミュレーションしながらリアルタイムで波形表示」。 上記以外にも以下を組み込む。 スライダー等で入力を手動操作。 sin波、のこぎり波などを入力。 リアルタイム表示の一時停止。 tkinterを使用する予定。 Tk GUIツールキットをPythonから呼ぶライブラリ。
【PyFMI】最小構成のMBD事例 第2章 その107【リアルタイム描画①】
前回までやってたシミュレーション時間と実時間の同期には課題がある。 シミュレーション時間の方が長いと破綻。 Python側でグラフ表示等すると破綻し易い。 よって、別案。 前回まではシミュレーション時間に実時間を追いつかせる。 対して、新方式は実時間に対してシミュレーション時間を追いつかせる。
【PyFMI】最小構成のMBD事例 第2章 その106【ダミーFMU⑧】
ダミーFMU実験の動作確認。 タイミングによっては若干ズレるがシミュレーション時間と実時間の同期はOK。 シミュレーション波形確認。 Ramp Up、Ramp Downの台形状の波形が出ており、期待通りの指令値になっている。 上記によりダミーFMUによる実験がし易くなる。 簡単なアルゴリズムであればPythonで実施。
【PyFMI】最小構成のMBD事例 第2章 その105【ダミーFMU⑦】
ダミーFMU実験用ソースコードは以前のマルチFMUの時の物を流用。 do_step周りの追加が主な修正部分。 ソースコード開示。 FMUModelCS2の一部をDummy_FMUModelCS2。 do_stepをdo_dummyで上書き。 時刻同期ができてるかを確認できるよう一部printを入れている。
【PyFMI】最小構成のMBD事例 第2章 その104【ダミーFMU⑥】
do_stepの実装方針を決めた。 Ramp UpとRamp Down。 出力信号のソースコード。 シミュレーション時間を見ながら出力信号を決定する方式。 時刻同期のソースコード。 単にタイマーを使ってシミュレーション時間が実時間に追いつくのを待つ。 do_stepメソッドの上書きはそのまま作成関数で上書きすればOK。
【PyFMI】最小構成のMBD事例 第2章 その103【ダミーFMU⑤】
Dummy_FMUModelCS2を使用する実験構成を提示。 以前作ったマルチFMUの構成をベースにちょい修正の方針。 ついでにPythonからstep毎の出力も制御してみる。 各FMUのロードのコード。 Dummy_FMUModelCS2で既存のFMUを指定しておくとインターフェース仕様だけは取り込める。
【PyFMI】最小構成のMBD事例 第2章 その102【ダミーFMU④】
do_stepをオーバーライドしている理由の説明。 Cythonによる静的関数でそのままではPython側からの上書きができない。 do_stepの重要性の説明。 masterモジュールからシミュレーションステップ毎に呼ばれるメソッドだから。 これを自由に書き換えられれば時間制御ができる。実時間に追いつくまで待たせる。
【PyFMI】最小構成のMBD事例 第2章 その101【ダミーFMU③】
FMUロード関数を一旦整理。 Dummy_*という謎関数が各FMUタイプ別に存在。 Dummy_FMUModelCS2を題材として掘り下げ。 FMUModelCS2を継承している。 オーバーライドしているメソッド多数。 重要なのはdo_step。 cpdef定義なので外部から上書きできないのを回避している。
【PyFMI】最小構成のMBD事例 第2章 その100【ダミーFMU②】
ダミーFMU定義に向けての方針を提示。 FMUのロードの仕方を再確認。 _connect_dllという引数があった。 _connect_dllをFalseにするとFMUがロードされずインターフェースだけが定義される。 インターフェースを利用してでPython側からFMU出力制御可。 しかし、時間の制御はできない。
【PyFMI】最小構成のMBD事例 第2章 その99【ダミーFMU①】
HILSに於いてのシミュレーション時間と実時間の合わせこみ方法は大きく2種類。 HILS自体が時間保証。 モデルの一部で時間の辻褄合わせ。 今回はモデルの一部で辻褄合わせの方針。 PyFMIでダミーFMUを定義できそう。 「Undocumented specification」なので当たって砕けろ方式。
【PyFMI】最小構成のMBD事例 第2章 その98【マルチFMI⑧】
マルチFMU制御用のコード実行結果を提示。 事前に取っていたOpenModelicaのシミュレーション結果も一緒に提示。 今回の方法だと目的のHILS環境としては課題がある。 シミュレーションが1関数の中で閉じてるのでリアルタイムに外部とのやり取りができない。 ググっても情報出て来ないのでいろいろ模索するしかない。
【PyFMI】最小構成のMBD事例 第2章 その97【マルチFMI⑦】
マルチFMU制御用のコード提示。 前半は前回まで説明した内容。 ロード、モデルセット、モデル間接続セット、Master定義 後半はシミュレーション結果取得と波形表示。 FMILibraryの時とは異なり、結果取得と波形表示が楽なのは本当に有難い。 結果は連想配列で取得。 波形表示はmatplotlib使用。
【PyFMI】最小構成のMBD事例 第2章 その96【マルチFMI⑥】
Masterにオプション設定が可能。 今回はstep_sizeを調整。 デフォルト値が0,01秒なので0,001秒に変更。 step_size以外にも大量のオプションがある。 補間の仕方、並列処理の有無、結果出力、ログ出力などなど。 どういうものがあるかだけ把握し、必要になった際に再度確認すればOK。
【PyFMI】最小構成のMBD事例 第2章 その95【マルチFMI⑤】
Masterが土台になるが必要な情報がある。 モデルセット。 FMUをロードしたモデルをリスト化。 モデル間接続セット。 モデルの出力、入力を1セットとしたリスト。 モデルセットとモデル間接続セットをMasterに渡せばシミュレーションをする準備はおおよそ完了。 まだ、若干の調整はある。
【PyFMI】最小構成のMBD事例 第2章 その94【マルチFMI④】
PyFMIでマルチFMU制御する際にある程度の前提知識が必要になる。 FMUロード。 以前はload_fmuを使ったが、今回はFMUModelCS2を使用。 引数が増えている。 PATHの指定がファイル名のPATHに分けることが可能。 DLLロード有無の引数がある。 つまりロードしない使い方が・・・。
【PyFMI】最小構成のMBD事例 第2章 その93【マルチFMI③】
DCモータモデル分解とFMU exportを実施。 前回までのやり方で簡単にできるはず。 (よって詳細説明は端折った) PyFMIからのFMU呼び出しをする際のおおまかな構成を提示。 各FMUの信号はPython側で接続するイメージ。 マルチFMU制御ならではの処理。 (それだけでは解決しない話もあったり)
【PyFMI】最小構成のMBD事例 第2章 その92【マルチFMI②】
元にするDCモータモデルは使いまわし。 Ramp、PID制御器、DCモータの構成が一番部品が多い。 モデルの分解もRamp、PID制御器、DCモータの単位でやってく予定。 念のため、OpenModelicaで現状の動作結果を取得しておく。 PyFMIで統合したときの成功/失敗の判定用。 次はモデル分解。
【PyFMI】最小構成のMBD事例 第2章 その91【マルチFMU①】
「完璧に把握したかもしれん」は幻。 ダニング=クルーガー効果。 FMUの本体の目的は「完成車メーカがサプライヤからの提供されたFMUを統合する」 よって、複数のFMUを作成。 DCモータモデルを分解して複数のFMUを作ってみる方針。 とりあえず上記をやってみて課題が出たら、それを次のネタにする。
【FMI/FMU】最小構成のMBD事例 第2章 その90【PyFMI⑦】
PyFMIでFMU制御するPythonコードを開示。 割とあっさり実現。 Pythonなのでmatpotlibでそのままグラフ表示。 FMILibraryと比べるとvalueReferenceに振り回されることが無い点がとても良い。 PyFMIによるFMU制御の有用性がなんとなく見えてきた。
【FMI/FMU】最小構成のMBD事例 第2章 その89【PyFMI⑥】
シミュレーション実施。 開始時刻、終了時刻、入力オブジェクトを渡すことで実施可能。 シミュレーション結果取得。 simulate関数の戻り値が連想配列になっている。 voltage = res['voltage']のような指定方法。 シミュレーション結果のグラフ表示。 matplotlibでプロットするのみ。
【FMI/FMU】最小構成のMBD事例 第2章 その88【PyFMI⑤】
時間軸作った。 とりあえず、0秒から2秒の等差数列で作った。 Ramp作った。 等差数列で斜めにプロットした後にmax,minでサチらせた。 時間軸とRamp入力と統合&縦方向に。 vstackとtransposeを使用。 入力オブジェクト作った。 voltageに入力行列を紐づけた。
【FMI/FMU】最小構成のMBD事例 第2章 その87【PyFMI④】
FMUをPythonで使用する上で必要ライブラリのimport。 PyFMIのload_fmu。 numpy。 matplotlib。 load_fmuの戻りのオブジェクトはFMU次第。 FMUModelCS1。 FMUModelCS2。 FMUModelME1。 FMUModelME2。
「ブログリーダー」を活用して、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ユニットにすることで出てきたもの。