アフターコロナとアフター5
アフターコロナと社会人
コロナウイルスの影響で,家にいる時間はもちろん,仕事をする時間もどんどん削減されつつある.
今でこそ,暫定的な規制かもしれないが,これを機に,これまでなんとなくしてきたよくわからない仕事,慣習,体制が見直されることは間違いない.
事実,自分も半年前までは会社で過ごすことがほとんどで,土日はその休息に充てるしかない,という典型的な会社人間になっていたのだが,今や,定時後の時間の使い方を持て余してしまっている有様である.
自分ですらこうなので,多くの社会人は今,定時後や休日の過ごし方を再考しているだろう.
過ごし方は人それぞれあれど,自分としては,大学や大学院に通うという選択肢に興味がある.
下記のように,社会人でありながら,大学に通う人は少なからずいる.
blog.kentarok.org
www.ito-tomohide.com
そして,自分もそうであった.
自分は2018年4月~2019年3月まで社会人博士として過ごした.
このときの過ごし方は別に記録したいが,ともかく,振り返って言えるのは,社会人でこそ勉強する,研究する,というのはとても楽しく感じられるということだ.
大学生はお客様
学生時代は,就職がゴールであることが多いので,仕方なく学位を取る姿勢になるのは当然だと思う.何せ,学生という身分はとても自由なのである.その時代で学業以外に興味のあることがあっても当然なのだ.
さらに,多くの人が忘れがちなのが,学生時代に大学に通うとき,費用はほとんど親負担である.奨学金を借りることはあっても,返すのは将来の自分なので,実質,自身が身を切っている感覚はない.大学側としては,学生はお金を払ってくれるお客様とも言えるので,お金さえ払っていれば学生としては学業をしようが,バイトをしようが,サークル活動をしようが自由なのである.
これは,言わば,テーマパークの年間パスポートを買って,アトラクションを目一杯楽しむ人もいれば,義務的に入退場を繰り返したり,レストランに入り浸ったりとしているようなものである.
大学がテーマパークと考える人も少ないかもしれないが,社会人になってみると,大学はとても知的好奇心にあふれるテーマパークと感じてくる.
充実した図書館,専門知識を持った先生の講義,個人では決して揃えられない実験機器,同じ志を持つ人とのアカデミックな議論...
研究活動によっては国内外に足を運べる.当時は必死になって英語の原稿を用意して発表練習をしたりと,あまり,楽しさを感じる余裕はなかったが,一個人のアイデアを世界の場でアピールできるというのは人生でも一回以上はないのであろうか.会社でも海外出張の機会はあるだろうが,自分のスタンスは会社の所属員である.自分がどう思おうが,会社の代表としての意見になる.あまり違いはないようにも思うが,会社での生活が長いと,一個人としてのアイデンティティが失われる気がするのだ.
大学と社会人
少子化が進む以上,大学も社会人を歓迎する流れになるだろう.
人気の学科はMBAとかだろうが,個人的には会社活動とは全く関係のない学科でもこの流れを取り入れていってほしい.自然科学や人文学,芸術,宗教など.
コロナウイルスは不要不急といって文化活動にも影響を与えてしまい,多くの人に文化は二の次という印象を与えてもいる気がする.しかし,アフターコロナがもたらすのは,さらなる高度医療社会であることは間違いない.すると,平均寿命は長くなるため,どう生きるかが問題になってくる.働いて過ごすことも推奨されるのだろうが,それも限界があるだろう.一個人が豊かに生きるには昔から文化活動がいいと決まっている.
人間の好奇心というのは非常に不思議なもので,知らないことを知ることが,明日も生きたいということに生存本能として結びつけているようで気が知れない.
アフターコロナでは大学にたくさん人を集めることは難しくなるだろうから,オンライン講義は一定数必要だろう.すると,肝心の研究室での議論とか,何気ない交流がなくなってしまう.
このあたりは,別のSNSみたいなサービスを待つほかないのだろう.
Analog Discovery2を使ってみた
概要
Analog Discovery 2を買ったので,Lチカを計測してみた.
Analog Discovery2のパフォーマンスは下記のサイトが詳しい.
www.elefine.jp
電子工作はちょこちょこしていたが,オシロスコープは持っていなかった.波形をモニタするときはArduino のシリアルプロットを使ったりもできたが,波形の時間間隔をもっと詳しく知りたくもなった.
購入には普通のオシロスコープとも迷ったが,同じくらいの価格でオシロスコープ,ファンクションジェネレータ,ロジックアナライザーなどもりもりの機能がブレッドボードくらいの大きさで実現できるということで買ってしまった.
結論
1msで点滅するLチカをオシロスコープで取得することができた.
実行したこと
【Analog Discovery側】
- Analog DIscovery
- BNCコネクタ拡張ボード
- BNCオシロスコープ・プローブ
- ブレッドボード
- ジャンパー線
【ターゲットボード】
- ESP32-WROOM-32 開発ボード
【センサ類】
- LED
手順
Analog Discoveryの準備
- 機材の準備
Analog DIscovery2とBNC拡張ボードとプローブを接続する
><オシロスコープとして利用することを中心に考えていたためBNCコネクタ拡張ボードとプローブを追加で用意した.なくても計測は可能.
注意
DC成分の信号を計測するときはBNC拡張ボードにあるショートピンをDC側にすること!
これに気づかず,ずっとACモードで計測をしていた...
LEDの電圧で負になるのはなぜなのかを延々考えていた.
- ソフトウェアの準備
こちらのサイトを参考にさせていただいた
基本的にはWAVEFORMS 2015をインストールすればいい.
- 起動
インストール後はWaveFormsのアプリがあるはず.Analog DIscovery2とPCをUSB接続してアプリを起動する.
起動後の使い方は直感的にもわかりやすくなっている.
下はテスト用にESP32でLチカの回路を作って,1 s毎に点滅を繰り返したときの計測画面である.
右側にズームしたときの波形を同時表示しており,ΔXが1.006 sとほとんど1 sで計測できていることがわかる.
あとがき
まだ使い始めて間もないので,ファンクションジェネレータやロジックアナライザーの機能は使っていない.
個人的にはロジックアナライザーがどれくらい便利そうかが気になるが,使い方があまり良くわからない.
また,直接は関係ないはずだが,接続確認の試行錯誤でデバイスマネージャーが起動しなくなってしまった.その最中,USBポートが認識しなくなり,かなり焦ったが,下記のトラブルシューティングで,USBポートの認識までは戻ったと思う.
support.microsoft.com
しかし,現状もデバイスマネージャーが起動しない.
PowerShellで起動させる方法があるのでなんとかなりそうではあるが,かなり不便である.
forest.watch.impress.co.jp
Analog Discovery2の接続確認中,プローブのGNDに5Vを流してしまっていたのが悪かったくらいしか思い当たらない.
ともかく,少し普通のオシロスコープを買っとけばよかったと後悔もしているので,なんとか使いこなさないと.
どうやらAnalog Discovery2はLabViewと連携できるようである.
LabViewはGUI操作でシステム構築が可能な開発プラットフォームである.いろんな制御機や表示機をGUIで接続できるので,結構難しいシステムでも簡単にできる.今で言う,Scratchに近い.Analog Discovery2はファンクションジェネレータもあるので,LabViewを使えば,任意のトリガーや制御で波形を出力できるようだ.
学生時代は結構LabViewにお世話になったので,興味はあるが,まずは普通に使ってみますか.
forums.ni.com
in-band modemとSMSの違い
コネクティッドと電話
コネクティッドカーは文字通り,”つながる車”であるが,つながった後に車は何をするのだろうか.
私達はインターネットを当たり前のように使い,簡単に知らない人,モノ,サービスと繋がれるようになったが,車は今からである.車がどのようにつながるかは,各社,各世界でしのぎを削って開発が進んでいるが,緊急通報が世界では先に進んでいる.
緊急通報なので,つながるのは車と救急センターである.そして,つながったときにどのような方法で音声を,データを送受信させるか,これが結構難しい.
今でこそ,LINEやZoomなどで簡単にただで電話できるように感じてしまっているが,もとの原理を考えれば,電話という技術は奥が深い.
電話の技術でよく出てくるのがin-band modemとSMSである.この違いが意外とよくわからないため備忘録として調べた結果をまとめる.
in-band modemとは
3GPP(3rd Generation Partnership Project)のTS26.267にin-band modemの規定がある.
https://www.etsi.org/deliver/etsi_ts/126200_126299/126267/08.00.00_60/ts_126267v080000p.pdf
そもそもモデムとは
モデムとは「modulator-demodulator」の略語で、アナログ電話回線を利用してインターネットをする場合に必要な機器のことを指します。デジタル信号をアナログ信号に変換する変調(modulation)と、その逆でアナログ信号をデジタル信号に変換する復調(demodulation)を相互におこなうため、日本語では「変復調装置」と訳されたりもします。
docomo-hikari.net
in-bandとは
データフローと制御フローの両方が仮想化エンジンを経由すると書いてある.
out-of-bandはデータフローと制御フローが分離され,制御フローは外出しにされたマッピングテーブルに従うとのこと.
https://www.etsi.org/deliver/etsi_ts/126200_126299/126267/08.00.00_60/ts_126267v080000p.pdf
よくわからん.
下のページのほうが,まだ図のイメージはつく.
https://www.etsi.org/deliver/etsi_ts/126200_126299/126267/08.00.00_60/ts_126267v080000p.pdf
eCall用の報告書には下記で定義されている.
https://www.etsi.org/deliver/etsi_ts/126200_126299/126267/08.00.00_60/ts_126267v080000p.pdf
インバンドモデム:音声チャンネルを介して車載モデムから PSAP にデータの最小セットを転送する方式である。クアルコム社のインバンドモデムが e-Call に採用されることが決まった。欧州委員会(EC)は、提案している欧州全域の e-Call サービスの望ましい通信手段として、クアルコム社のイ
ンバンドモデム(IBM)技術が ETSI と 3GPP により採用された。ETSI と 3GPP では、EC の依頼を受け様々な通信技術のテストを行った。3GPP が作成した仕様は正式な規格として ETSI から公開される予定で、欧州全域の e-Call 運用の規格として CEN が採用することが予測される。
出典: www.3gpp.org, www.etsi.org, www.qualcomm.com
また,通信方式には回線交換とパケット交換がある.
回線交換(circuit-switched):ネットワークの通信モデルには、大きく分けると「回線交換(circuit-switched)」と「パケット交換(packet-switched)」という 2 つの種類がある。回線交換ネットワークでは、通話中には電話機間は物理的に接続され、2 人だけが利用できる「回線」が確立される。回線はその間のケーブルを占有するため、常に一定の帯域幅が保証されるが、距離と時間に応じたコストが発生する。
なにやらインバンド(in-band)とインバウンド(inbound)は違うので注意.
すごいややこしいページもあった.
www.dhk-net.co.jp
SMSとは
in-band modem方式と同様に回線交換ネットワークを使うが,音声データを使わないことが大きな違い.
SMSは携帯電話でごく短い文字メッセージを送信したり受信できたりするサービスで、“Short Message Service”の略です。携帯電話同士で簡単なメッセージをやりとりできる仕組みはいろいろありますが、「SMS」といった場合は、主にGSM向け携帯電話同士でやりとりできるメールや、それに互換のあるメールを指して言います。GSMは、日本国内では使われていませんが、主にヨーロッパやアフリカ、アジア、オセアニアなどの約130以上の国と地域で利用されている携帯電話の方式です。
SMSは、回線交換ネットワーク上で提供されるサービスではありますが、実際に音声を流すことはなく、テキストメッセージを信号線及びシグナリングチャネルで運ぶことによりサービスが実現されています。
トラフィックチャネルよりもデータ量が軽い信号線(シグナリングチャネル)のみでサービスが提供されいることから、一般的に電話よりも災害に強いと言われています。EXLINK-SMSは全国の医師会や地方自治体でも緊急時の連絡手段として利用されています。
まとめ
つまり,inband-modemとは,音声通信ネットワークにおいてデータフローと制御フローの両方が同じ仮想化エンジン(?)を使うように変調・復調する方式のようだ.
うーんまだわからん.
このデータフローと制御フローというのが,SMSの解説ページにもある,トラフィックチャネルとシグナリングチャネルに対応するように思える.
SMSはこの構成のもとで,シグナリングチャネル(制御フロー)のみを用いてデータを送信するようだ.
https://www.ex-sms.com/related/structure/
音声回線については,このサイトが一番わかり易い
novlog.me
C言語でBPSK変調のグラフを作成する #2
概要
gijin94yobu.hatenablog.jp
この続きをする.
内容としては,下記の書籍の
SEQ_DATA,SEQ_DATA型を用いたBPSKシミュレーション
を実装することを目指す.
- 作者:幸宏, 神谷
- 発売日: 2010/11/22
- メディア: 単行本
また,生成した送信データ,受信データ,及び,BER結果をgnuplotで出力する.
結論
データ型の定義によるBPSKシミュレーションプログラムを実装できた.
送受信データのプロット波形を確認できた.
実行したこと
手順
前回プログラムをベースに,新しいデータ型を定義する.
前回のプログラムの改良点を引用する.
前回のプログラムは,データや信号などの系列は,それらが保存されたメモリ領域の先頭アドレスを保持するポインタによって指定されている.
しかし,ポインタは先頭アドレスと保持しているだけなので,その先頭アドレスからどこまでがデータや信号を記憶している領域かはわからない問題がある.そのため,それらの長さを別途,新たに変数を設けて指定する必要がある.すると,関数にある系列を渡して何らかの処理を行うとき,先頭アドレスを示すポインタだけでなく,系列の長さを表す変数も引数とすることが必要となる.
なるほど,例としても挙げられているように,上記プログラムにはvoid _randData(unsigned int *d, unsigned int length)
やdouble _bpskMod(COMPLEX *s, unsigned int *data, unsigned int length)
のように,データ系列の先頭アドレス*dataとともに,その長さを表す変数lengthも引数として定義しなくてはいけなくなっている.
このままでは,系列の種類が増えるごとに関数の引数の数が多くなり,それぞれの信号のやデータに対して先頭アドレスとその長さを示す変数の対応を把握しておく必要が出てくるそうだ.
そんなややこしい問題を,構造体を用いて型を定義することで解決できるという.
上記プログラムで使用されている配列の関係性を見て,noise
やsymbol
は複素数を保存する配列で分けられそうであり,txData
やrxData
は0または1の二値データを保存する配列で分けられそうである.この関係性を型として定義し直すというのである.
プログラム
改良したプログラムはこちら.
前回プログラムと同様に送受信データの波形を出力するようにgnuplotを追加している.
BER曲線も別のウィンドウで出力した.
SEQ_SIG型,SEQ_DATA型を用いたBPSKシミュレーション
>
Length=100程度でSNR=60ほどの良好な通信チャネルでは送受信データはほぼ一致することがわかる.
Length=100程度でSNR=5の悪い通信チャネルでは送受信データで一部一致しないデータが出ているのがわかる.
BER曲線はSNRが10 dB以降ではほぼゼロになっていることがわかる.
githubはこちら
https://github.com/yoshi4869/wireless_c.git
あとがき
まだまだこのプログラムの内容を咀嚼しなければいけないことは多いが,構造体が少し便利に思えてきた.これくらいのプログラム量にならないと,構造体の意義が感じられないのかもしれない.この書籍では更に改良点があるというので,もう少し初心に帰って,C言語の理解を深めることにする.
参考
- 作者:幸宏, 神谷
- 発売日: 2010/11/22
- メディア: 単行本
Raspberry Piで可視光通信器を作る #2
概要
gijin94yobu.hatenablog.jp
この続きをする.
ローリングシャッター現象による画像は取得できたので,この縞模様を波形として切り出すことを目指す.
波形の解析には,pythonを用いた.
また,試行錯誤しやすいようにjupyter notebookで進めている.
結論
- 送信機のオンオフを波形として切り出すことができた
- 波形の切り出しはまだ自動化できていない
実行したこと
実行環境
手順
- 画像を読み出す.
ここではopencvを使った.
画像が大きすぎるのでcv2.resize
で調節した.
- 画像を信号波形に変換する.
ひとまず,グレースケール化する.
現状はまだ,背景光雑音などは考えないようにするために,ざっくり二値化する.
しきい値は今後自動で決定したい.ここではしきい値60.
そして,画像をarray化して積分する.
積分にはnp.sum
を使い,画像の縞模様に対して水平に積算する.
これで扱いやすそうな信号になった.
- 信号の正規化
取得画像からわかるように光源が円形なので,積算すると,中心に近いほど,輝度の大きさが蓄積されるので山なりになっている.これではまだ扱いにくいので,正規化する.
正規化には信号処理分野において様々あるかと思うが,ここではまだ簡易的に,信号の大きさが0以上であれば,1にするようにした.
かなり,縞々が波形らしく見えた.オンオフがしっかりと分かる.
- 信号の切り出し
ここが結構厄介.
本当は自動化したいところであるが,今回の成果としては,手動で切り出した.
先頭と末尾が汚いが,このあたりも含めてスマートに切り出したいものである.
しかしこれで,Arduinoで送信したLチカの500μsのオンオフが,信号波形として可視化できた.
縞の数はだいたい24個.一山が500μsのため,この画像には24×500 [μs] = 0.0012 sの時間の波形が取得できたということである.
あとがき
これで,ローリングシャッター現象を用いた可視光通信の受信機の大本ができた.まだまだ手動で波形を抽出していたりするので,連続画像を撮った場合や,背景光雑音が混じったとき,光源の大きさが変化したりしたときなど不安要素はたくさんある.しかし,それよりも,実際に意味のある送信データを送信して,復号ができるようにすることをまずは目指したい.現状はサンプリングレートにも相当するオンオフしか送受信していない.ここから,簡単な固定データ,文字列,連続データ,と通信ができるようにしたい.
また,露光時間とLEDのオンオフの関係性はもう少し,関係性を整理できるようにしたい.学術的にはこちらの論文*1で説明されていたりとすでに広く知られたものになっているが,自分で構築したシステムで置き換えられるようにもしたい.
研究室時代はこのような解析をすべてmatlabでしていたが,python jupyter notebookに置き換えている.matlab特有の関数ややり方のほうがまだやりやすいと思いながらも,pythonは無料で調べればすぐに解決策があるのがいい.また,jupyter notebookはmatlabのように使えるので,試行錯誤した形跡も残せるのが気に入っている.
参考
ローリングシャッター現象の元祖の論文:
https://ieeexplore.ieee.org/abstract/document/6477759
C言語をVScodeでデバッグする(gdb)
概要
ブレークポイントやら変数の中身が見たいのだ.
検索すると,おおよそGDBデバッガーの設定が出てくるが,どうもパッと見ただけでは,自分の環境では再現できなかった.
こちらのサイト
を見たりして,腰を据えて取り組んでみて,ようやくGDBデバッグまでできたので,設定をメモする.
結論
タスクの構成であるtasks.jsonとデバッグの設定のlaunch.jsonの設定を作業フォルダ用に編集すればOK
実行したこと
実行環境
【ホストPC】
- windows10 64bit Home
- VSCode - 1.47.2
前提
GCCとGDBのインストールはWindowsならMinGWでできる.インストール方法は各種サイト参照.手順
- 作業フォルダを用意して,デバッグしたいプログラムを置く
-
[Ctrl+Shift+P]を押して,”タスクの構成”を選択する
- tasks.jsonが生成される.初期設定ではGDBでビルドできなかったので,先のサイトを参考に内容を下記のように書き換える."label"が新たに作成したコンパイル名(g++ compile)になる."args"でコンパイルの設定コマンド.gcc -o test test.cみたいなコマンドが渡せる.今回はシンプルにするために,実行ファイル名は命名せずに,a.exeになるようにした.
- 元のファイルに戻って,[Ctrl+shift+B]を押すと,実行するビルドタスクが表示される.
- 選択するとビルドができるはず.ビルド後は,a.exeが生成されるはず.
- F5を押して,デバッグをする.すると,下記のように何でデバッグをするかが表示される.
- C++(GDB/LLDB)を選択する.すると,launch.jsonが生成される.このままでは,デバッグはできないので,作業フォルダに合わせて修正が必要.先のサイトを参考に下記のように変更する.重要なのは,"program"と"miDebuggerPath"."program"は作業フォルダにある実行ファイル名に合わせて修正する.今回であれば,${workspaceFolder}/a.exeになる."miDebuggerPath"は下の例ではもともと生成されていたが,このサイトではないようだ.MinGWがインストールされているパスに合わせる必要がある.
- 修正が終わったら,F5を押す.すると,下記のようにGDBが起動されるはず.
- これでブレークポイントをはったり,ステップ実行をしたりできる.変数の中身も見れる.
プログラム
確認に使用したプログラムはこちら.
ESP8266でMicroPython実行する
概要
ESP8266にMicroPythonをインストールしてLEDを光らせる.
ESP8266,いわゆるArduino系マイコンのLチカは山のようにやってきたが,Pythonで制御する方法であるMicroPythonを使ってやってみた.
通信工学をLED点滅に応用することを考えたとき,MATLABベースでシミュレーションすることが多いが,これをPythonでできるかどうかを検討しているためである.
要は,BPSK変調をマイコンで実現したいときに,MATLABだとマイコンで制御できないし,C言語では情報が少なすぎるので,MATLABに近いPythonでできないかということである.
実行したこと
実行環境
【ホストPC】
- windows10 64bit Home
- uPyCraft V1.1
【ターゲットボード】
- ESP8266 12-E NodeMCU Kit
【センサ類】
- LED
手順
ハードウェア準備
ハードウェアはいつものブレッドボードにESP8266とLEDを接続するだけ.
ソフトウェア準備
【ファームウェア書き込み】
まずは,ESP8266にMicroPython用のファームウェアを書き込む必要がある.
手順は基本的にこちらのサイトを参考にさせていただいた.
https://wak-tech.com/archives/1008
CUIでやろうと頑張ったが,上手く行かないのでGUIで解決した.
まずは,ファームウェアのダウンロードである.
下記サイトから案内されることが多いが,ファームウェアは下図のhereのところであるので注意.
https://micropython.org/download/#esp32
クリックするとたくさんのファームウェアが並ぶページになる.
ESP8266だけでもありすぎてよくわからない.
とりあえず,シンプルな名称で新しいやつにした.
binファイルをダウンロードしたら,ファームウェア書き込み用のGUIを入手する.
https://www.espressif.com/en/support/download/other-tools
Flash Download Toolsをダウンロードして,対象のマイコンを起動する.
今回書き込んだ設定は下記の通り.
STARTを押してからERASEを押すと,下のインジケーターが進む.
【接続確認】
これでMicroPythonが書き込める環境になったようだが,確認するにはシリアル通信をするソフトが必要.
Windowsでは専用のソフトuPyCraftを使うようである.
きちんと設定ができていれば,シリアル通信でマイコンと通信ができる.
【動作確認】
はたしてPythonで制御できるかどうかは下記が詳しい.
https://wak-tech.com/archives/1013
https://maker.pro/esp8266/tutorial/using-micropython-on-an-esp8266-with-upycraft
新規作成したpyhtonプログラムをDownloadAndRunボタンを押せば,実行できる.
プログラム
作成したプログラムはこちら.
Pythonでも確かにLチカできた.
あとがき
ファームウェアの設定にかなり苦心した.最初からGUIで実施すればよかった.
uPyCraftというなぞのソフトしか使えないのか,PlatformIOでいじれないのかを調べてみたが,PlatformIOではMicroPythonにまだ対応していないようだ.
We currently don’t support MicroPython. See feature request
Pythonの勉強がてらとも思ったが,C言語で実装するが早いか,Pythonでするが早いかは正直微妙である.しかし,手を付けられそうなBPSK変調などのノウハウが下記のように公開いただいているので,まずは試してからである.
https://qiita.com/Seiji_Tanaka/items/13703f3c7f8158300df1
C言語での実装はこちらの本が詳しいので,躓いたら購入するしかない.(奇しくもMATLAB版は持っている)