■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で実行すると、ワンセグが見れる。
無線で通信する場合、
送りたい信号を、変調して、送信する
受信する側は、複数ある電波の中から、対象周波数を検波し、復調する。
このような変調・復調・検波は、
昔はダイオードとトランジスタを使っていたが(もっと昔は真空管)
今は、チップを使っている(デジタル信号処理してる) 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で実行すると、ワンセグが見れる。