UNITY+BOLTでGNURADIOライクなものが作れないかやってみた
はじめに
SDRといえばGNU-RADIOが有名ですが、先日UNITYのBOLTをやっていて、ふとこれってUNITY上でGNU-RADIOと同じようなことができるかも・・と思いました。
GNU-RADIOはコンセプトや環境など全く別物であることは承知していますが、発想としてはおもしろいかも・・・と簡単なものをやってみようとなりました。
まずはじめはソースとシンクを作ってみる
信号源を作成して、グラフに描画ということができないと、何も進みません。
sin波を発生させてグラフに描画という基本的なことから始めてみます。
以前紹介したEZChartのサンプルをベースにします
sin波の発生
いきなりBOLTで作成するとわけわからなくなりそうなので、以前やったスクリプトでまずは復習。とりあえず表示はOK
次にこのsinデータをBOLTのflowで作成してみる
まずはsinデータを作るスクリプトを分離して、分離したスクリプトをflowに取り込む
まずはBOLTをインストールする
自分で作成したライブラリのクラスをTools=>BOLT=>SETUPで
TYPEのところで追加
そしてチュートリアルと同じようにvaiableでつなげば同じように表示されるはず
結構いい加減に作った気もするが、波形が表示されてFlowから動作することを確認できた。
実行中にパラメータを変えられるのもいい感じ。
思ったよりもすんなり進みました。
フィルタリングとFFT表示をやってみる
信号源はsinとノイズの両方を作成しました。
それぞれの振幅レベルを設定できるようにしたので、これを加算したものをFFTするということになります。ここで配列同士の加算をしたかったのですが、何を使ってやればよいかわからず、結局自作のスクリプトで作ってしまいました。こういうところはBOLTの使いずらいところかもしれません。
sin波とノイズを加算してFFTした結果、計算上はSN比20dB。表示の色変えました。
この調子でFIRフィルタとFFT表示もしてみるか、とやってみたらweb情報の寄せ集めですが、意外とあっさりできました。
下記が作成したFlowです。名前で何をやっているかわかるし、信号の流れも一目瞭然です。信号がおかしいときは接続を変えてやれば原因の切り分けもしやすいです。
乱数でノイズを発生させて、フィルタをかけた結果です。勢いで作っているのでいろいろ怪しいところはありますが、それらしい特性も見えてみます。
ここまでやって、ちょっとだけGNU-RADIOっぽくなってきたかなと、自己満足しています。
ANDROIDで問題発生
ところがANDROIDで動作させてみようとしたら、波形が表示されず・・・調査が必要
ちょっと調べたら下記にありました。
プリコンパイルが必要ということでした。知らなかった。これをやったらANDROIDでもちゃんと動作しました。
ただ、若干古いからかもしれませんが、ANDROIDだとちょっと遅い感じがあります。PCなら本来のフレームレートが出ていそうです。