フーリエ変換には角周波数を扱うものと周波数を扱うものがある。角周波数と周波数の間には角度と1回転という差があるのみ。よって、周波数に2πをかければ角周波数となる。
シミュレーションで実物を扱わなくても仕事ができる環境を目指す。つまり家に引きこもって外に出なくてもOKな世界。
【FMU】最小構成のMBD事例 第2章 その55【FMILibrary⑫】
fmi2_import_cs_testのシミュレーションステップとシミュレーション時間を変えてみた。 上記のシミュレーションを実行。 精度を細かくしたのと、シミュレーション時間を延ばしたことでデータ量は増えた。 グラフで確認。 前回の100msサンプリングと同じ特性で精度、時間が変わっていた。
【FMU】最小構成のMBD事例 第2章 その54【FMILibrary⑪】
シミュレーション時間とシミュレーションステップはFMUの外側の制御の仕方次第で確定する。 FMU処理自体はfmi2_import_do_stepという関数の中で指定時間分実施する動き。 サンプルプロジェクトfmi2_import_cs_testの場合はhstepとtendを調整すればOK。 時間は「秒」である点に注意。
【FMU】最小構成のMBD事例 第2章 その53【FMILibrary⑩】
fmi2_import_cs_testの実行結果のうちシミュレーション部分のところだけ抜き出し。 Ball heightとBall speedのパラメータがある。 本シミュレーションはボールを投げたあとのバウンドに伴うボールの高さと縦方向の速度を示したもの。 Excelでグラフ表示してみたところ確かにそんな感じ。
【FMU】最小構成のMBD事例 第2章 その52【FMILibrary⑨】
fmi2_import_cs_testの起動時パラメータ確認。 FMUとテンポラリディレクトリのPathを設定。 実行と結果を取得。 「log level = VERBOSE」ってのはFMILibraryの内部のデバッグログ。 Ball height、Ball speedとその次に続いている数値がシミュレーション上重要。
【FMU】最小構成のMBD事例 第2章 その51【FMILibrary⑧】
fmi2_import_cs_testの引数について確認。 fmu_fileとtemporary_dir。 fmu_fileはその名の通りFMUを指定。 今回はFMI2.0且つCSのFMUであるBouncingBall2_cs.fmuが該当。 temporary_dirはFMUを展開するためのワーク用。
【FMU】最小構成のMBD事例 第2章 その50【FMILibrary⑦】
FMILibraryのサンプルプロジェクトを確認。 大量にある。 今回はfmi2_import_cs_testを使用。 すでにビルド済みのものが存在。 fmi2_import_cs_testは引数を要求するタイプの実行プログラム。 よって、ただ起動しただけでは何もしてくれない。 引数については次回説明予定。
【FMU】最小構成のMBD事例 第2章 その49【FMILibrary⑥】
再びFMILibraryのビルドにチャレンジ。 今回は無事ビルドが通った。 ライブラリが生成されたのも確認。 その後、指定したインストール先にライブラリ及びヘッダファイルが配置された。 FMILibraryビルド時にサンプルプロジェクトが生成されているので、今後はこれをベースに話を進める予定。
【FMU】最小構成のMBD事例 第2章 その48【FMILibrary⑤】
FMILibraryのビルドエラーの原因究明。 stddef.hにoffsetofが定義されていなかった。 厳密にはC++向けには定義されていたが、C言語向けには定義されていなかった。 Visual Studio自体がC++を想定した環境であるためC言語のケアが薄いためなのかもしれない。
【FMU】最小構成のMBD事例 第2章 その47【FMILibrary④】
cmakeの前回のコマンドを使ってコンフィグレーション開始。 問題無く完了。 そのままcmakeでビルド開始。 ビルドの途中でエラーが発生。 xmlparse.cの中でBLOCKとsという構造体とメンバ変数の絡みでエラーが起きたようだが・・・。 とりあえず、頑張って調べてみる。
【FMU】最小構成のMBD事例 第2章 その46【FMILibrary③】
FMILibraryのビルド手順を確認。 開発者コマンドプロンプト起動、cmakeでビルド、ライブラリインストール。 cmakeへのオプションがちょっとややこしい。 FMILIB_INSTALL_PREFIXでインストール先。 FMILIB_FMI_PLATFORMでプラットフォーム。 -Gでビルドする環境指定。
【FMU】最小構成のMBD事例 第2章 その45【FMILibrary②】
バックナンバーはこちら。はじめに前回、C言語からのFMU/FMI制御するライブラリとしてFMILibraryというものが存在することが分かった。しかし、ビルド済みのものはwin32版のみ。欲しいのはwin64版。よって、win64版をソース
【FMU】最小構成のMBD事例 第2章 その44【FMILibrary①】
C言語からFMU/FMIを制御するライブラリはFMILibrary Windows版のFMILibraryはあるにはあるが…。 win32版のみ。 64bit版は自分でビルドする必要がある。 OpenModelica64bit版のFMUは恐らく64bitビルド。 FMILibrary 64bit版を用意することに。
【FMU】最小構成のMBD事例 第2章 その43【FMI⑭】
FMU/FMIを読めそうなツールを確認。 以前、太郎くんが調査した情報をベースに確認。 CANoeがすぐ使えそうだった。 CANoeでFMU/FMIの変数確認。 問題無く確認できた。 FMU/FMIの変数をCANoeのシステム変数に割り付ける形。 よって、CAPLからでも簡単に制御できそう。
【FMU】最小構成のMBD事例 第2章 その42【FMI⑬】
modelDescription.xmlのcausalityの内容を確認。parameter、calculatedParameter、input、output、local、independentの6種が存在。parameterはModelicaのparameter相当。calculatedParameterは初期値関連
【振り返り】ブログ開設一年半記念記事【技術ブログのPV数と収益】
祝1年半。 記事数は540記事に到達。 直近半年の記事はSDカード、FileSystem、Modelica、FMU/FMI。 「G検定」が稼ぎ頭なのは変わらないが、「MATLAB、Python、Scilab比較」「エンジニアの人事目標」「故障診断通信」も浮上。 収益は大体2千円/月オーバーあたり。
【FMU】最小構成のMBD事例 第2章 その41【FMI⑫】
modelDescription.xmlのvariabilityの仕様について。 constant(定数)、fixed(固定値)、tunable(調整可能値)、discrete(離散)、continuous(連続)。 fixedはシミュレーション前であれば変更可能。 tunableは変更時にODE演算のイベントが発生。
【FMU】最小構成のMBD事例 第2章 その40【FMI⑪】
modelDescription.xmlの中身を確認。 name、valueReference、description、variability、causality、Real unitが存在。 valueReferenceについて仕様確認。 変数ハンドル用で数値の衝突は禁止。 ただし、エイリアスはその限りではない。
【FMU】最小構成のMBD事例 第2章 その39【FMI⑩】
FMU/FMIのプラットフォーム上での位置づけを再確認。 FMUのユーザ視点に於いての位置づけを確認。 modelDescription.xmlとMotor.DLLの位置づけなど。 これを元に仕様の性質から予測される利用手順を列挙。 やはりmodelDescription.xmlの中身が気になるので、簡単に説明予定
【FMU】最小構成のMBD事例 第2章 その38【FMI⑨】
FMUとzipとして解凍してみた。 何個かのフォルダとxmlファイルがあった。 binariesにプラットフォーム別のライブラリが格納。 resourcesフォルダに依存関係があるファイル群を格納。 modelDescription.xmlにinput。output、内部パラメータが定義されている。
【FMU】最小構成のMBD事例 第2章 その37【FMI⑧】
FMU/FMIはあまり一般的に知られているものではないので利用方法の情報が皆無。 よって、仕様に踏み込まないと利用方法も見えない。 仕様書を読み込むのも大変なのでFMU自体の中身を見て行った方が理解としては楽そう。 実はFMUは特定のファイルとフォルダ構成をzip圧縮したもの。 つまり解凍して中身を参照できる。
【FMU】最小構成のMBD事例 第2章 その36【FMI⑦】
FMU/FMIのシミュレーション方式とSolverの位置づけを図解した。 MEは近似精度を調整したい場合に有利。 ECUの粗い制度を再現したい。 プラントの演算負荷を下げてシミュレーションを高速化したい。 CSは内部にSolverがあり、繋ぐだけで動くので設定が簡単。 CSのみのサポートしかしていないツールもある。
【FMU】最小構成のMBD事例 第2章 その35【FMI⑥】
FMU/FMIのシミュレーション方式は2種類ある。 Model Exchange(通称ME)。 外部にSolver。 Co-Simulation(通称CS)。 内部にSolver。 SolverはODE Solverのこと。 常微分方程式を解決する機能。 オイラー法、ホルン法などが有名。
【FMU】最小構成のMBD事例 第2章 その34【FMI⑤】
各社ツールでFMU/FMIの利用で追加費用は発生しない。 非競争領域と考えて広めることを重要視している可能性が高い。 2016年くらいから流行り始めている。 SDKのリリースが2014年なのが理由かも。 FMU/FMIのVersionは1.0と2.0がある。 ただし、互換性はない点に注意が必要。
【FMU】最小構成のMBD事例 第2章 その33【FMI④】
知ってる範囲でFMU/FMIに対応しているツールを調べてきた。 自動車業界限定且つメジャー所だと5社ほど。 対応Versionやアドオン追加などのの制約はある。 対応ツールは多いので結構使えそう。 ただし、Vector社製品のようにCANoeは対応しているが、CANapeは対応していない。などはある。
【FMU】最小構成のMBD事例 第2章 その32【FMI③】
FMU/FMIの存在価値について確認。 S-Functionと同等とすると存在価値が薄くなる。 自動車業界なりの狙いはある。 サプライヤから納入される部品と同等の振る舞いするモデルモジュールをもらい、完成車メーカ側で統合する。 FMU/FMIはSimulink、LabViewをプラットフォームとして入出力を繋げられる。
【FMU】最小構成のMBD事例 第2章 その31【FMI②】
FMI仕様の公開場所確認。 FMI-Standardにて公開されている。 FMI/FMUはMATLAB/Simulinkで言うところのS-Functionみたいなもの。 コンセプトとしてはほぼ一緒。 FMI/FMU側は標準仕様と言うことでもうマルチプラットフォームを意識したものとなっている。
【FMU】最小構成のMBD事例 第2章 その30【FMI①】
Modelicaモデルを外部から利用する手段は一応ある。 OpenModelicaからFMIをもったFMUを出力可能。 FMIは物理モデルをモジュール化したものの標準インターフェース。 MODELISARプロジェクトで策定。 その後、Modelica Association Project(MAP)で管理。
【Modelica】最小構成のMBD事例 第2章 その29【DCモータ⑥】
DcPermanentMagnetDataをOpenModelica Connection Editorで確認。UI上でパラメータを設定可能。さらにそのパラメータをDC_PermanentMagnetに渡すことでモデル初期化している。初期化するモデルが一個だとあまり意味がないかもだが、同特性モデルが複数あるとサボれる。
【Modelica】最小構成のMBD事例 第2章 その28【DCモータ⑤】
Modelicaコード モデル宣言部を確認した。 以下が存在しており、OpenModelica Connection Editor上にもある。 DC_PermanentMagnet、Ramp、SignalVoltage、Inertia、TorqueStep。 DcPermanentMagnetDataが特殊な位置づけ。
【Modelica】最小構成のMBD事例 第2章 その27【DCモータ④】
Modelicaコードのparameter部を確認。 parameterに関しては以前やった。 しかし、今回はReal型ではない。 厳密には、Real型に単位の定義を付加したもの。 電圧だったら"V"。 トルクなら"N.m"。 SI単位系で存在するものはModelica.SIunitsの中にすでに定義済み
【Modelica】最小構成のMBD事例 第2章 その26【DCモータ③】
DCモータモデルのModelicaコードを確認。 半分くらいはannotationなのでそれほど規模は大きくない。 見るべきポイントを列挙。 先頭のparameter部。 中間のモデル宣言部。 真ん中DcPermanentMagnetData。 これが今回のサボりポイントの目玉となる。
「ブログリーダー」を活用して、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ユニットにすることで出てきたもの。