manahiyoの気まぐれ

備忘録を兼ねたブログです。

UNITY+BOLTでGNURADIOライクなものが作れないかやってみた

はじめに

SDRといえばGNU-RADIOが有名ですが、先日UNITYのBOLTをやっていて、ふとこれってUNITY上でGNU-RADIOと同じようなことができるかも・・と思いました。

GNU-RADIOはコンセプトや環境など全く別物であることは承知していますが、発想としてはおもしろいかも・・・と簡単なものをやってみようとなりました。

 

まずはじめはソースとシンクを作ってみる

信号源を作成して、グラフに描画ということができないと、何も進みません。

sin波を発生させてグラフに描画という基本的なことから始めてみます。

 以前紹介したEZChartのサンプルをベースにします

 

sin波の発生

 

いきなりBOLTで作成するとわけわからなくなりそうなので、以前やったスクリプトでまずは復習。とりあえず表示はOK

f:id:manahiyo831:20201227115054p:plain

 

次にこのsinデータをBOLTのflowで作成してみる

 

まずはsinデータを作るスクリプトを分離して、分離したスクリプトをflowに取り込む

 

まずはBOLTをインストールする

自分で作成したライブラリのクラスをTools=>BOLT=>SETUPで

TYPEのところで追加

 

そしてチュートリアルと同じようにvaiableでつなげば同じように表示されるはず

結構いい加減に作った気もするが、波形が表示されてFlowから動作することを確認できた。

実行中にパラメータを変えられるのもいい感じ。

f:id:manahiyo831:20201227124356p:plain

f:id:manahiyo831:20201227124442p:plain

 

思ったよりもすんなり進みました。

 

フィルタリングとFFT表示をやってみる

信号源はsinとノイズの両方を作成しました。

それぞれの振幅レベルを設定できるようにしたので、これを加算したものをFFTするということになります。ここで配列同士の加算をしたかったのですが、何を使ってやればよいかわからず、結局自作のスクリプトで作ってしまいました。こういうところはBOLTの使いずらいところかもしれません。

 

 sin波とノイズを加算してFFTした結果、計算上はSN比20dB。表示の色変えました。

f:id:manahiyo831:20201227205332p:plain

 

この調子でFIRフィルタとFFT表示もしてみるか、とやってみたらweb情報の寄せ集めですが、意外とあっさりできました。

 

下記が作成したFlowです。名前で何をやっているかわかるし、信号の流れも一目瞭然です。信号がおかしいときは接続を変えてやれば原因の切り分けもしやすいです。

f:id:manahiyo831:20201227212306p:plain


乱数でノイズを発生させて、フィルタをかけた結果です。勢いで作っているのでいろいろ怪しいところはありますが、それらしい特性も見えてみます。

f:id:manahiyo831:20201227203303p:plain

 

 ここまでやって、ちょっとだけGNU-RADIOっぽくなってきたかなと、自己満足しています。

 

ANDROIDで問題発生

ところがANDROIDで動作させてみようとしたら、波形が表示されず・・・調査が必要

ちょっと調べたら下記にありました。

ekulabo.com

 プリコンパイルが必要ということでした。知らなかった。これをやったらANDROIDでもちゃんと動作しました。

f:id:manahiyo831:20201227220107p:plain

 

ただ、若干古いからかもしれませんが、ANDROIDだとちょっと遅い感じがあります。PCなら本来のフレームレートが出ていそうです。