フーリエ変換には角周波数を扱うものと周波数を扱うものがある。角周波数と周波数の間には角度と1回転という差があるのみ。よって、周波数に2πをかければ角周波数となる。
シミュレーションで実物を扱わなくても仕事ができる環境を目指す。つまり家に引きこもって外に出なくてもOKな世界。
【XCP】最小構成のMBD事例 第2章 その177【XCP Basic㉛】
DAQパケット送信周期精度改善の方針を決めた。 時間精度を引き上げるためマルチメディアタイマを使用。 1ms精度の過去実績あり。 Sleepを挟んだWhileループをマルチメディアタイマによる1msコールバックに変更。 これに伴い10ms周期だけでなく、イベントチャンネル3も1ms保証ができる。
【XCP】最小構成のMBD事例 第2章 その176【XCP Basic㉚】
DAQパケット送信周期の精度が悪い理由を確認。 イベントチャンネルが15msになってる。 Sleepで10ms周期を作ろうとしているが、実際は15msになってる。 この部分はPC依存な面はある。 上記により小手先の回収ではどうにもならなそう。 一応対策も考えてるので次回確認予定。
【XCP】最小構成のMBD事例 第2章 その175【XCP Basic㉙】
XCP Basic PCシミュレーションの問題点は送信周期。 前回のCAN回線ログのDAQパケットだけを抽出し、それのタイムスタンプと元に現状の送信周期を算出。 10[ms]周期で送信されるべきところが15[ms]になっていた。 一応、原因は分かってはいるので、そこらへんを次回確認予定。
【XCP】最小構成のMBD事例 第2章 その174【XCP Basic㉘】
実際にSET_MTAとDOWNLOADを使ってRAM値書き換えを実施。 RAM値書き換え前にDAQを起動しておき、RAM値書き換えとDAQパケットの状況をCAN回線モニタして確認。 RAM値書き換えに合わせてDAQパケットの計測データが変化。 おおよそXCP Basicの挙動はOKだが、まだちょっと問題がある。
【XCP】最小構成のMBD事例 第2章 その173【XCP Basic㉗】
計測RAM値の変更方法はSET_MTAとDOWNLAOD。 SET_MTAとDOWNLOADの電文確認。 折角なので連続で投げて見る。 ただ、同じ値だと変化が分からない無いのでちょっと書き込みデータを変える。 さらにDAQパケット送出前に書き換えてしまう可能性もあるのでsleep関数を挟む。
【XCP】最小構成のMBD事例 第2章 その172【XCP Basic㉖】
START_STOP_SYNCHコマンドを投げて見た。 並行してcan.loggerでCAN回線モニタを実施。 DAQパケットの計測ができた。 タイムスタンプ有効設定をしていたため先頭の方にタイムスタンプが埋まっている。 タイムスタンプの後ろから計測データが続く。 今回は0値が取得されている。
【XCP】最小構成のMBD事例 第2章 その171【XCP Basic㉕】
DAQの開始方法は大きく2パターン。 DAQ list毎に個別開始。 開始可能状態にして複数のDAQ listを同時開始。 今回は後者で実施。 START_STOP_DAQ_LISTコマンドで個別開始/停止と開始可能状態の設定できる。 これでDAQの開始条件は揃った状態となる。
【XCP】最小構成のMBD事例 第2章 その170【XCP Basic㉔】
SET_DAQ_LIST_MODEコマンドでDAQの計測データ送信ポリシーを設定できる。 TIMESTAMP有無、使用するEvent channel、分周比など。 Event channelと実際の周期はECU側の実装依存。 今回は1:10ms、2:100ms、3:1msとなっている。
【XCP】最小構成のMBD事例 第2章 その169【XCP Basic㉓】
DAQ listの構造的な準備はできたので、実際にODT_ENTRYを更新していく。 更新するODT_ENTRYを参照するにはSET_DAQ_PTRを使用する。 実際にODT_ENTRYを更新するにはWRITE_DAQを使用する。 WRITE_DAQ実行後は参照するODT_ENTRYは自動的に一個後ろになる。
【XCP】最小構成のMBD事例 第2章 その168【XCP Basic㉒】
ALLOC_ODT_ENTRYは物理層の都合やODTのフォーマットによる制限がある。 CANの場合だとデータフィールド8byteが制限。 タイムスタンプ等が入ることで計測データを格納する範囲が少なくなる。 ALLOC_ODT_ENTRYを複数回投げてみた。 リソースが枯渇するまで生成は可能。
【XCP】最小構成のMBD事例 第2章 その167【XCP Basic㉑】
ALLOC_ODTを送信してみた。 ODT1個あたり4byteの管理領域のリソース割り当てがされる。 試しに5個ずつODTを生成してみた。 20個のODT生成時にエラー。 エラー理由はメモリ不足。 1ODTあたり8byteの送信バッファも必要なのでそれも含めてメモリ不足。 この点含めてリソース管理が必要。
【XCP】最小構成のMBD事例 第2章 その166【XCP Basic⑳】
FREE_DAQコマンドを送信。 ECU内部のDAQ list構造を真っ新にするコマンド。 "とりあえず"一番最初に投げらえる。 ALLOC_DAQコマンドを送信。 生成するDAQ listの数を指定するコマンド。 XCP Basicの場合、DAQ list毎に6byte消費。
【XCP】最小構成のMBD事例 第2章 その165【XCP Basic⑲】
XCPパケット送受信処理を関数化してみた。 CAN送信は従来通り。 CAN受信でいろいろ判定を追加 タイムアウト追加。 1秒タイムアウト。 CANID判定追加 PID判定追加。 0xFE(エラー)か0xFF(正常)以外はレスポンスとして扱わない。 レスポンスのタイミングでDAQパケットが来ても無視できる。
【XCP】最小構成のMBD事例 第2章 その164【XCP Basic⑱】
メモリアクセス系コマンド以外のメモリアクセスとして(Data AcQuisition)がある。 DAQは過去記事で数回にわたって説明しているのでそちらを参照。 必要なコマンドをそこそこあるので、一個ずつ試していく。 尚、XCP BasicはDynamic DAQが実装されている。 Static DAQは未実装。
【XCP】最小構成のMBD事例 第2章 その163【XCP Basic⑰】
なんとSHORT_UPLOAD時にMTAも更新される仕様になっていた。 よって、続けて読み出す場合はSET_MTA無しでUPLOADを実施すればOK。 この仕様を利用してSHROT_UPLOAD→UPLOAD×n回とすると、効率的なメモリダンプが実現できる。 メモリアクセス系コマンドはこれで動作確認OKとなる。
【XCP】最小構成のMBD事例 第2章 その162【XCP Basic⑯】
UPLOAD系コマンドの実験開始。 UPLOADコマンドが基本形のコマンドでその派生形としてSHORT_UPLOADがあるが、SHORT_UPLOADのとある挙動を確認するためにSHORT_UPLOADから実施。 SHORT_UPLOADでDOWNLOADで書き込んだ値が読めた。 よって、両コマンド共に動作OKとなる。
【XCP】最小構成のMBD事例 第2章 その161【XCP Basic⑮】
DOWNLOADコマンドを実施。 正常応答あり。 実際に書き込まれたかはUPLOAD系コマンド実験時に確認予定。 DOWNLOAD_MAXコマンド実施 MTAは読み書き時にそのサイズ分参照アドレスが後方にズレる。 C言語のポインタ的な仕様。 MAX_CTO(今回の場合は8)-1分のサイズが無条件に書き込みサイズになる。
【XCP】最小構成のMBD事例 第2章 その160【XCP Basic⑭】
XCP Basicがサポートしているメモリアクセス系コマンドを列挙。 SET_MTA。 DOWNLOAD。 DOWNLOAD_MAX。 SHORT_UPLOAD。 UPLOAD。 Python-CAN初期化とCONNECTコマンドを発行してからSET_MTAコマンド発行。 正常応答あり。
【XCP】最小構成のMBD事例 第2章 その159【XCP Basic⑬】
xcp_cfg.hについかしたXCP_ENABLE_MEM_ACCESS_BY_APPLのdefine定義について説明。 XCP経由のメモリアクセスが直接アクセスからフック関数を経由する状態に切り替わる。 ecu.cの修正。 アクセス用の配列を定義。 メモリアクセス用フック関数の定義と実装。
【XCP】最小構成のMBD事例 第2章 その158【XCP Basic⑫】
xcp_cfg.hの修正は以下のdefine定義を追加するだけ。 XCP_ENABLE_CALIBRATION。 XCP_ENABLE_MEM_ACCESS_BY_APPL。 XCP_ENABLE_CALIBRATIONはDOWNLOADとDOWNLOAD_MAXが有効になる。 SHORT_DOWNLOAD等は使用不可。
【XCP】最小構成のMBD事例 第2章 その157【XCP Basic⑪】
PCシミュレーションの場合、XCP Basicでメモリアクセス系コマンドを実施には課題がある。 各変数のアドレスが起動毎に変わる可能性あり。 よって、以下のどちらかが必要。(後者を採用) 変数のアドレスをファイル出力して、XCPマスタからアクセス毎にファイル参照。 配列定義して配列先頭を0アドレスとする。
【XCP】最小構成のMBD事例 第2章 その156【XCP Basic⑩】
XCP BasicにGET_STATUSコマンドを送ってみた。 問題無く応答あり。 次にSYNCコマンドを送ってみた。 応答があったがエラー応答? 実は「コマンドプロセッサの同期。」を示す0x00というエラーコードで通常応答になる。 メモリ非依存のコマンド確認は取れた状態。
【XCP】最小構成のMBD事例 第2章 その155【XCP Basic⑨】
とりあえずXCP Basicのテスト用にメモリアクセスに絡まない以下のコマンドを送ってみる。 CONNECT。 GET_STATUS。 SYNC。 コマンドの送信はPythonの対話モードかJupyter Notebookで実施。まずはCONNECTコマンドを送信。無事送信&受信できた。他のコマンドも同様に試してみる。
【XCP】最小構成のMBD事例 第2章 その154【XCP Basic⑧】
XCP BasicのVisual Studio 2015から2017へのアップグレードは特に何もなかった。ビルドを実施。warningは出ているが、sscanfをsscanf_sにする話。起動オプションがある。XCPsim -hでヘルプを参照可能。デフォルトはCANでオプションでEthernetへの切り替えもできる。
【XCP】最小構成のMBD事例 第2章 その153【XCP Basic⑦】
XCP Basicのフォルダ構成を確認。 ドキュメント、EULA、Sample、XCP Basicハード非依存コードなどが配置されている。 Sampleに各物理層のポーティングコードが入っている。 XCPsimがPCシミュレーションを想定。 Ethernet(TCP/UDP)かCAN(VN16xx)を物理層と想定。
【XCP】最小構成のMBD事例 第2章 その152【XCP Basic⑥】
XCP Basicを入手方法。 Vector社のサイトから入手。 インストール。 最初にEULAが出てくる。 インストール先にはXCP Basicのソースコードが展開されるので好きなところでOK。 ビルド環境は恒例のVisual Studio 2017 express。 Virtual CAN Busのインストール。
【XCP】最小構成のMBD事例 第2章 その151【XCP Basic⑤】
XCP Basic動作までの方針を決めた。 数点、要否が確定できない作業があるが、実際に確認してみてから決める。 実験構成を提示。 CANの制御はPython-CANを使用。 単純な送受信であればお手軽。 恒例のVirtual CAN Busを使用。 物理的な制約を一旦無視して論理的な正しさを求める場合はこれが一番楽。
【XCP】最小構成のMBD事例 第2章 その150【XCP Basic④】
プロプライエタリ品との差別化のためXCP Basicには機能制限がある。 XcpBasic.cに機能制限について記載されている。 特に大きいのがSTIM使用不可。 STIM使用不可に関してはDOWNLOADで代替可能。 ただし、スループットはどうしても落ちる。 とりあえずの落としどころとしてやむを得ず。
【XCP】最小構成のMBD事例 第2章 その149【XCP Basic③】
XCPのシミュレーション環境が欲しい。 候補としてはVector社で無償で公開されているXCP basicがある。 XCP basicはEULAとしてはVector社の責が無いことを前提に自由にして良い。 サポートが必要な場合は有償。 XCP ProfessionalやMICROSAR XCPというプロプライエタリ品もある。
【XCP】最小構成のMBD事例 第2章 その148【XCP Basic②】
ECUの外側の疑似化にXCPを使うってのはインターフェースをXCPにするってことだった。 以前やったBypassとはデータの流れは逆向きになっている。 XCPで直接RAMの読み書きを行うことで物理的なインターフェースの制約を無視できる。 逆に物理的な制約に紐づいた検証はできないという欠点はある。
「ブログリーダー」を活用して、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ユニットにすることで出てきたもの。