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