PiRadioをEthernetでPCに接続する

RaspberryPiにはEthernetとWifiが付いています。これを使えばPiRadioの信号をPCへ飛ばせます。 RaspberryPiではリアルタイム処理の場合48.8ksps x2chが限界でしたがPCで処理すれば1Msps x2ch以上は可能でしょう。 これまで困難だった広帯域の信号処理ができると同時に、PiRadioをANT直下など理想的な場所に設置して Wifiを使ってどこでも受信操作が可能になります。 最大速度を計測したところEthernetケーブル経由で40Mbit/sec(BW=1〜2MHz)以上、 Wifi経由で1Mbit/sec(BW=25〜50kHz)くらいでした。

システム構成例

RaspberryPiと無線ルーターの間はEthernetケーブルの方がはるかに高速になります。 PCのWifiは十分に速いのでWifiで問題ありません。PCはWindows7を想定しています。



TCP/IPではなくUDPを使用

高速なストリームデータを扱う場合はエラー時に再送などを行うTCPよりも、送りっぱなしのUDP接続の方が向いています。 PiRadio V2.50は受信中のベースバンドI/Q信号を全てUDP接続で ネットワークへ送信する機能を付けてあります。

UDP接続の初期設定は以下のようになります。Piradio.cpp



5行目のIPアドレスはデータを受信するWindowsマシンのIPアドレスを指定する必要があります。 Win7の場合は「スタート」→「コントロールパネル」→「ネットワークと共有」→「接続」→「詳細」で調べられます。 書き換えたらコンパイルます。

UDPソケットからのデータ送信部分は以下になります。Piradio.cpp




UDP通信のために追加したコードはほぼこれで全てです。意外と簡単に実現できます。 テスト的に組み込んであるのでエラー処理などは省いてあります。

Visual Studio Community 2017を使用

Windowsプログラムの開発は無料の「Visual Studio Community 2017」C#のフォームアプリケーションを使用しています。 今回実験したサンプルのプロジェクトをここからダウンロードできます。



piradio_w.slnをダブルクリックするとプロジェクトが立ち上がります。コンパイルして実行すると上の画面が現れます。 PiRadioの方も起動し何か信号を受信したら「u」キーを押すとUDP送信が開始されます。
上の画面左下にある「START」ボタンを押すと高速に動く波形が見えるはずです。見えない場合は先に説明したIPアドレスや ネットワーク環境を確認してください。

高速化対応

このままでは48.8ksps x2ch以上の速度にならないため、更に高速化するにはFPGAの改造、Visual Studio側のTimer Interval変更 などが必要になります。ここに紹介した情報だけでも色々実験できると思います。
すこし先になりますがWindowsアプリとFPGAを改造した広帯域リアルタイム処理の計画もあります。