フーリエ変換には角周波数を扱うものと周波数を扱うものがある。角周波数と周波数の間には角度と1回転という差があるのみ。よって、周波数に2πをかければ角周波数となる。
シミュレーションで実物を扱わなくても仕事ができる環境を目指す。つまり家に引きこもって外に出なくてもOKな世界。
【XCP】最小構成のMBD事例 第2章 その238【CAN-FD⑮】
STIMの送信レイアウト調整した。 int.to_bytesを使用指定していたので一撃で修正完了。 STIM送信時のrawデータ変換(浮動小数点→1/65536)を実施。 xcp_canのテストコードとしては送信データをリスト管理しているだけなので、そのリスト修正するのみ。 仮想HILS修正時に要注意。
【XCP】最小構成のMBD事例 第2章 その237【CAN-FD⑭】
DAQ listのODT_ETNRYのデータ長変更(16bit→32bit)。 namedtupleを使用していたので修正は楽。 DAQの受信レイアウト調整。 int.from_bytesを使用してるので16bitから32bitへの変更は楽。 DAQ受信データの物理値変換(1/65536→浮動小数点)。
【XCP】最小構成のMBD事例 第2章 その236【CAN-FD⑬】
xcp_canクラス改造箇所を整理。 予想以上に多いが、仮想HILSにXCPの都合を見せないための部分なので修正内容が集中し易い。 コンフィグレーション用のJSON記述の修正。 事前のPyXCP CAN-FD実験を元に修正。 SERIALを消して、FDとDATA_BITRATEと追加。
【XCP】最小構成のMBD事例 第2章 その235【CAN-FD⑫】
PyXCP Version0.16.5にてCAN-FDの動作確認。 UPLOAD、DOWNLOAD、DAQ、STIMを確認。 基本的にOK。 PyXCP側からのCAN-FDはBitrate_switchが無効になっているが、現状のPyXCPの仕様上やむを得ない。 この結果を元にxcp_canクラスを改造予定。
【XCP】最小構成のMBD事例 第2章 その234【CAN-FD⑪】
PyXCP Version0.16.5にてCAN-FDの動作確認再開。 まずはコンフィグレーション用JSON記述を修正。 SERIALパラメータを削除。 SERIALパラメータはデバイスの製品シリアルを指定するもの。 CAN-FD対応有無を判断しているようで、この判定でCAN-FD不可側になってるように見える。
【XCP】最小構成のMBD事例 第2章 その233【CAN-FD⑩】
PyXCPのVersion別CAN-FD対応状況を確認。 かなり、いろいろ変化してい居る。 SERIALパラメータがあると、CAN-FDフレーム送信でエラーが発生する。 よって、現時点では0.16.5のVersionを使用する。 CAN-FDフレーム送信可能、DLC可変。
【XCP】最小構成のMBD事例 第2章 その232【CAN-FD⑨】
PyXCPのCAN-FD対応の動作確認の結果を確認。 一見するとうまく動いているように見える。 が、どうやらPyXCP側からの送信フレームがCAN-FDになっていない。 少なくともCAN-FDフレームの受信はできている。 PyXCPもVersionがあるので、Version別の挙動を確認してみる。
【XCP】最小構成のMBD事例 第2章 その231【CAN-FD⑧】
PyXCPのCAN-FD対応はコンフィグレーションのJSON記述部分だけではあるが、動作確認用に修正する部分もある。 UPLOAD、DOWNLOADのサイズ。 DAQ listのODTのサイズ。 上記の方針に合わてコード修正実施。 DAQ listはODT_ENTRYの数を増やした。
【XCP】最小構成のMBD事例 第2章 その230【CAN-FD⑦】
xcp_canクラスのCAN-FDに関係する部分を確認。 要はPyXCPをCAN-FD対応にする部分。 コンフィグレーションのJSON記述を修正すればOKっぽい。 ソースコードからのリバースエンジニアリングによる調査結果。 本当合ってるか不安なのでJupyterNoteBookで動作確認を先に実施予定。
【XCP】最小構成のMBD事例 第2章 その229【CAN-FD⑥】
指令器の修正範囲を確認。 CANがCAN-FDに変えることから逆算して特定。 バス初期化とメッセージ構築の部分。 バス初期化はCAN-FD有効化とDataRateの設定。 メッセージ構築はCAN-FD化とbitrate_switch有効。 bitrate_switch無効でもOKだがbitrateは切り替わらない。
【XCP】最小構成のMBD事例 第2章 その228【CAN-FD⑤】
仮想ECU側のPID制御の入出力定義はポインタで実施。 元々が符号付き16bit変数へのポインタだったのでこれを符号付き32bit長変数に差し替え。 上記に伴い、参照先のアドレス境界を16bitから32bitに切替。 PID制御器の入力はfloat64で、参照変数が16bitか32bitかは気にしなくてもOKなコード。
【XCP】最小構成のMBD事例 第2章 その227【CAN-FD④】
AUTOSAR-XCPのパケット長変更を実施。 MAX_CTOとMAX_DTOを8から64に変更すればOK。 CTO、DTOについては過去記事で復習。 念のためCANFD_SUPPORTで#ifdefで切り分けられるようにしておく。
【XCP】最小構成のMBD事例 第2章 その226【CAN-FD③】
AUTOSAR-XCPのCAN-FD対応に向けての方針を決める。 CanIf相当の部分とXCPのパケット長のところを修正する必要あり。 といってもCanIf相当の部分は実はすでにCAN-FD対応済み CAN-FD対応の際はDLCの仕様の特殊さに注意する必要がある。 8以下の時と8を超えた時で雰囲気が変わる。
【XCP】最小構成のMBD事例 第2章 その225【CAN-FD②】
XCPonCAN-FDに対応すべく現状の仮想ECU、仮想HILS構成を再確認。 CANのところをCAN-FD化。 XCP経由で変数のやり取りをしている部分を32bit化。 改造方針と同時に動作確認手段も模索する必要あり。 python-can、PyXCPを駆使すればなんとかなりそうという当たりだけ付けた。
【振り返り】ブログ開設二周年記念記事【技術ブログのPV数と収益】
祝2周年。 記事数は740オーバー。 技術ブログとしてのアクセス数と収益の話。 集客力は低くとも、放置しても集客し続けるネタってのもたぶんアリ。 「最小構成のMBD事例 第2章」のシリーズがずっと続いていた。 今後は数値解析系や問答系記事のまとめ記事を書くかも。
【XCP】最小構成のMBD事例 第2章 その224【CAN-FD①】
XCPonCANとしての課題を明確化。 CANのデータフィールド8byteの仕様がODTの限界値を決めていた。 よって、データフィールドが長くなれば解決と言える。 CANのデータフィールドの上限が8byteに対し、CAN-FDは64byte。 よって、4byte、3変数が載っても十分な長さ。
【XCP】最小構成のMBD事例 第2章 その223【仮想HILS⑥】
ついに仮想ECUと仮想HILSの連携動作。 とりあえず動いたんで録画してYoutubeに上げた。 想定よりもキレイだはあるが、やはりカクついている。 カクついている原因は変数の精度も含まれているかもしれない。 変数を32bit長にすることで精度を上げられるがODTを増やす必要がある。 CAN-FDを使うと・・・。
【XCP】最小構成のMBD事例 第2章 その222【仮想HILS⑤】
構成がややこしいことになってきたので仮想ECUと仮想HILSの実験構成を再確認。 ネットワーク構成と論理的構成を確認。 論理的構成はModelicaモデルベースでシンプルだが、ネットワーク構成は各信号をCANやXCPに変えてるため複雑化。 このようにノードを分割しておくと部分的に実物に差し替えるなどがし易くなる。
【XCP】最小構成のMBD事例 第2章 その221【仮想HILS④】
ついに仮想HILSのPythonコード完成。 基本的には前回までの修正内容を盛り込んだだけ。 指令値取得用のCANバス初期化の位置を先頭から実処理の前に移動。 XCP関連のCANフレームがFIFOに詰まれてしまうため、それを避ける目的で移動。 使用する前にFIFOクリアしてもOK。
【XCP】最小構成のMBD事例 第2章 その220【仮想HILS③】
XCP関連の処理を追加。 基本xcp_canクラスを呼び出すだけ。 DAQ受信とSTIM送信はFMU処理が実装してあるFMU_handler内で呼び出す。 DAQ受信はFMU処理直前。 STIM送信はFMU処理直後。 これにより、仮想ECU側の変数と仮想HILS側のシグナルの同期が取れる。
【XCP】最小構成のMBD事例 第2章 その219【仮想HILS②】
DummyFMU化したPID制御の辻褄合わせを実施。 Dummy_FMUModelCS2のdo_stepメソッドをオーバーライドすればOK。 do_stepをdp_pidとして実装。 do_pid関数内部でPID.fmuの変わりに出力を決定する仕掛け。 このように入出力の辻褄合わせをすればOK。
【XCP】最小構成のMBD事例 第2章 その218【仮想HILS①】
再びPyFMIを使うということでPyFMI関連の復習。 過去記事のリンクを貼っておいた。 PIDのFMUをDummy_FMUModel化実施。 FMUModelCS2でロードしていたものをDummy_FMUModelCS2でロードするに変えるだけ。 当然、これに伴う変更もあるが。
【仮想ECU】最小構成のMBD事例 第2章 その217【PID制御⑧】
DAQリスナーの動作確認実施。 問題無く動作した。 やや表示範囲が有ってないが次に作る「HILSもどき」向けの設定になってる。 「HILSもどき」改め「仮想HILS」と命名変更。 仮想HILS作成に向けてのロードマップ確認。 下位レイヤの動作が先に保証済みになっていると計画が立てやすい。
【仮想ECU】最小構成のMBD事例 第2章 その216【PID制御⑦】
DAQリスナーのPythonコードを開示。 基本的にはPython-canで受信。 DAQパケットならば取り込む。 上記を元にmatplotlibで描画。 波形表示はリアルタイムではあるが負荷低減のため0.2秒周期。 ここらへんの描画負荷の事情はHILSもどきの時と一緒。
【仮想ECU】最小構成のMBD事例 第2章 その215【PID制御⑥】
HILSもどきの前にDAQパケットを取得して波形表示する機能が必要。 仮想ECU側の内部変数を表示することが目的。 DAQパケットはECU側の計測値なので、内部変数と解釈しても差し支えない。 上記機能はDAQリスナと命名。 DAQリスナの実験構成を図示した。 横からCANを覗き見るだけのシンプルな機能。
【仮想ECU】最小構成のMBD事例 第2章 その214【PID制御⑤】
仮想ECU側のPID制御器の入出力する信号の種類を確認。 実際にXCPのDAQ、STIMを実施して制御状態を計測。 想定通りの挙動になっていた。 CAN回線モニタを確認。 DAQとSTIMの目標値、実施のレイアウトを合わせていたので、縦に慣れべることで挙動が推測できる。
【仮想ECU】最小構成のMBD事例 第2章 その213【PID制御④】
PID制御器動作確認用Pythonコードを開示。 コンフィグレーション、XCPマスター生成、DAQ起動、計測、書き換えを隠蔽している。 エントリポイントとして起動した際は簡単なXCP通信をしてXCPスレーブの挙動が見れる。 ライブラリとして呼び出すことも可能。 こんな感じのちょっとずづの積み上げが割と重要。
【仮想ECU】最小構成のMBD事例 第2章 その212【PID制御③】
PID制御器の動作確認方法としてPyXCPを使う。 HILSもどきから使用することを想定してクラス化。 クラス化は目的次第で隠蔽する度合いが変化する。 つまり何をサボりたいかが動機になり易い。 エントリーポイントとして呼び出すかライブラリで呼び出すかで振る舞いを変えると便利。 単体テストをする場合はエントリーポイント。
【仮想ECU】最小構成のMBD事例 第2章 その211【PID制御②】
PID制御器のコードを用意した。 過去に使用したものを今回向けに修正したもの。 ecu_t10ms_job関数で10ms周期で処理。 ecu_init関数で初期化処理。 変数の初期化を実施。 コンパイルが通ることのみ確認済み。 動作確認にPyXCPを使用するが具体手なコードは次回以降に説明。
【仮想ECU】最小構成のMBD事例 第2章 その210【PID制御①】
仮想ECUを作るべくAUTOSAR-XCPに制御器を組み込む必要がある。 PID制御器は過去記事で作ったものを流用予定。 制御周期はとりあえず、10msあたりにしておく。 PID制御器の動作確認はXCP経由で入出力を制御することで実施する予定。 PID制御器自体のソースコードは以前、SILS等で確認済み。
【XCP】最小構成のMBD事例 第2章 その209【AUTOSAR⑮】
AUTOSAR-XCPのSTIMの気になる点がある。 STIMパケットに対してRESパケットが発行されている点。 仕様書上は、RESパケット応答に関する振る舞いは明記されていなかった。 恐らくデファクトスタンダード的な仕様が紛れている。 上記は何が正しいというのは恐らくない。 こういうものがあるということに気を付ける。
「ブログリーダー」を活用して、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による補正したものになります。
各種フーリエについてまとめてみた。いままでは級数→係数の順番でやっていたため、逆フーリエ変換→フーリエ変換の順番が自然。実際には「フーリエの積分公式を求める」ことになるが、これは逆フーリエ変換そのものである。
各種フーリエについてまとめてみた。いままでは級数→係数の順番でやっていたため、逆フーリエ変換→フーリエ変換の順番が自然。実際には「フーリエの積分公式を求める」ことになるが、これは逆フーリエ変換そのものである。
最適化アルゴリズム モーメンタムを用いて分類の学習を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ユニットにすることで出てきたもの。
多層パーセプトロンの隠れ層のユニット数を2から4に変えたScilabコードで分類を実施。 大きく2パターンの分類パターンがある。 やや複雑な分類パターンが4ユニットにすることで出てきたもの。