ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Pythonでワンセグが見れるとか、SDNの無線版にとどまらないSDR、GNU Radio

2018-10-02 09:26:55 | ネットワーク
■SDRとは

無線で通信する場合、

  送りたい信号を、変調して、送信する
  受信する側は、複数ある電波の中から、対象周波数を検波し、復調する。

このような変調・復調・検波は、

  昔はダイオードとトランジスタを使っていたが(もっと昔は真空管)
  今は、チップを使っている(デジタル信号処理してる) XBeeなどがその例

いずれにせよ、ハードウェアを使って行っている。

これをソフトウェアで実現しようというのがSDR。

SDNは、有線のネットワークでハードウェアでやっていたことをソフトウェアで実現すること
とすれば、SDRは、その無線版といえなくもない。




■SDRをすると、なにがいいの?

 Pythonでワンセグが見れる・・・けど、それがメリットではなくて、
 主にIoTで、メリットがある。

メリット1:複数の通信がソフトウェアだけで対応、切り分けられる
 SDRを使わない場合、1つの周波数・変調に対して、1チップが必要になる。
 実際には、その上のプロトコル(TCP,I2Cなど)までチップに入っている。

 ということは、複数の周波数、変調、プロトコルに対応するには、
 それぞれに対応するトランシーバーを別々に組み込み、別々なのに
 協調して動かなくてはいけない

 SDRなら、ソフトウェアを切り替えるだけでできる。
 呼び出しもLinuxの場合CRON Tabを使って時間ごとに切り替えることなんてのも可能

メリット2:通信の中身をデバッグできる
 ハードウェアのトランシーバーとなるチップを使った場合、
 送信側が送ってから、受信側で信号を受け取るまでは、ブラックボックスになる。
 このことは、信号が受け取れる場合は問題ないが、受け取れない場合、信号の強度が弱いのか、
 信号の波形が乱れてるのか、プログラムのバグなのか・・・よくわからない。

 SDRの場合、波形を出すことができる。そこで、送信の対抗側(受信側)をSDRにすると、
 送信した電波の波形が見れ、信号が弱い場合、ソフトで数字を書き換えるだけで、
 ゲインを増やすことができる。

このほかにもいろいろありそうだけど、先を急ぐので省略




■なぜできる?どういう仕組み?

受信側:
 大きく2つの部分に分かれる
 (1)アンテナから信号を受信し、その信号をAD変換して、デジタル化するまで
 (2)デジタル化された受信信号を復調し、処理できるようにデータを変換する部分

(1)について:RTL2832U
さすがにアンテナはハードがいる。AD変換までを行うチップがある。
RTL2832Uというチップで、これはもともとは、ワンセグ受信用のチップ。
ところが、このチップ、裏技でAD変換の信号をUSBから直接取り出せる
(ワンセグ処理していない、復調前の信号を取り出せる)方法があり、それを使う


(2)について:GNU Radio
 デジタル化された信号を各種方式で復調し、その信号を音声出力したり、
 波形をGUI表示したり、変換結果をTCPで渡すGNU Radioというのがある。
 子のライブラリは、Pythonから呼び出して使える。

 ・・・呼び出して使えるんだけど、それをまっさらから書くのは苦しい。
 なので、GNU Radio Companionというのがあって、それを使うと、GUIで
 ブロックを書いて、それを動かすことができる。
 うまく動いたら、あるボタンをクリックすると、Pythonコードを自動生成してくれる。

 ・・・といってもまだ苦しいが、このGNU Radio Companionで書いた、
 いろいろなサンプルがあり、そのサンプルを使うとSDRができるというしくみ。


送信側:
 やっぱり大きく2つある
 (1)デジタルな送信信号を変調し、電波に乗るようにする部分
 (2)その信号をアンテナから送信する部分

(1)について:GNU Radio
 送信する部分のライブラリもある。

(2)について:USRP
 USRPという送信部分のフロントエンドがある。これを使うと送信できる(技術的な話。法律的には免許はどうなのとか、いろいろあるけど省略)

IoTの場合、送信側はセンサーで、これは小さくしたいので、ハードでやったほうがお得。
受信側をSDRでやるか、考えることになる。




■開発手順

なので、受信側でいうと、
1)GNU Radio Companionで、ブロック図をつくる
2)そこからPythonプログラムを作る(これを実行すると、受信できる)

ってことになる。そこでGNU Radio Companionの使い方が問題になるけど
それを教えてくれるところがある(下のURLはすでに終わってしまったもの)

実習・GNU Radioで始めるSDR入門[教材基板付き]
―― スペアナ,FMラジオ,TVの自作とキーレスエントリの解析で学ぶ
https://seminar.cqpub.co.jp/ccm/ES18-0086

自分のところにインストールできて、いろんなことができそうだったら、
このブログで書くかも!?




■付録:Pythonでワンセグが見れるとか

で、表題の件。
GNU Radioを使ってワンセグが見れる、GNU Radio Companionのファイルが公開されている。

 gr-isdbt

なので、これをGNU Radio Companion上で読み込んで、そこからPythonコード生成ボタンで
プログラムを生成すれば、その生成したプログラムをpythonで起動すると、ワンセグが見れる

・・・ってほど、話は単純ではなく、そのプログラムの出力ファイルtest_out.tsを
ffplayで実行すると、ワンセグが見れる。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする