先日購入した高性能SDR HackRFを初期設定をして、色々なプラットフォームで受信動作させてみました。
受信帯域幅が20MHzもあり、受信周波数も1MHz~6GHzと最上位級の性能を持っていますので、ほとんどの無線受信を存分に楽しめると思います。
HackRFの基板仕様について
HackRF本体の基板は、NXP4320(Cortex-M4)とXILINXのFPGAで構成されています。
NXP4320は処理能力はそれほど高くありませんが、RAM, ROM, ペリフェラルがすべて入った1chipで動くSoC(System on Chip)となっており、周辺回路はほとんど不要です。
また基板には標準で拡張IOポートもついており、高性能クロックやLCDタッチパネルなどを追加することもできます。
githubでは回路, ガーバーデータ, 部品リストなど、基板製造に必要な情報が一通り公開されており、さらにBGAパッケージも使われていないので、アマチュアでも改造や修理が可能なレベルとなっています。
回路図も見やすく、丁寧にかかれており、相当な経験を有する方が設計したものであることが想定できます。
SDR#(SDR sharp)で使う
まずは大人気のSDRソフト「SDR# (SDR sharp)」でHackRFを使ってみます。ソフトの入手やインストール方法は過去記事に詳述していますので参照してください。
SDR#がRTL-SDRが使える状態になっていれば、HackRFはソースデバイスの設定変更だけで使えますから、最初に動作させてみることをおすすめします。
Device SettingをHackRFに変更すると、設定ダイアログの内容がHackRF Settingsに変わります。設定ダイアログで帯域を20M、RXゲインを0より上に設定すると受信ができるようになります。
受信画面は、帯域幅が20MHzとなった広大なスペアナ画面が表示され、FMラジオの帯域だと75MHz~95MHzが一望できるようになります。
ノイズもRTL-SDR並に少なく素晴らしい受信性能のようです。
HDSDRで使う
HDSDRでHackRFを使う場合は、HDSDRのHPでリンクされているExitio_hackrf.dllというライブラリをダウンロードしてHDSDRの本体があるフォルダーにコピーする必要があります。
dllファイルをコピー後、HDSDRを起動すると以下のdll選択画面になりますので、ExitIO_hackRF.dllを選択すると、すぐ受信画面になります。
左下の「SDR Device」からアンプゲインを適当に設定すると、ノイズのフロアレベルを調整することができるのでお好みの受信状態になるようにゲインを調整してください。
HDSDRは、SDR#以上に緻密、かつ、高精細なスペクトラムアナライザを備えています。
衛生電波など同時に電波が発射されているときは、すごく使い勝手が向上します。
GNURadio(Windows版)で使う
GNURadioで使う場合は、OsmosdrのDevice Argumentsの値をhackrf=0に書き換えて動作させることができます。GNURadioに標準添付されているRTL-SDR Soueceは、Osmosdrの名前が変わっただけのようですので、ソースの入力デバイスを変更するだけで、その他の修正は実施しなくても動きます。
この記事でFM放送のフローグラフを設定して、実行をクリック(またはF6キーを押下)するとRTL-SDR.COMと同じようにFM放送が聞こえます。
HackRF Spectrum Analyzerで使う
HackRFの広帯域受信機能を生かしたHackRF Spectrum Analyzerを使ってみます。
Windows版はgithubでここからダウンロードできます。
HackRFの帯域は20MHzですが時分割で掃引することにより、広帯域の電波状況を可視化することができます。復調等の機能はないので電波の存在と強度を確認できるだけですが、それでも本物のスペアナと同じ機能レベルになります。
HackRF Spectrum Analyzerは、JavaアプリですのでJavaの最新版をインストールする必要があります。Windows版のJavaはここからダウロード出来ます。旧版のJava8では動きませんでした。
またHackRFの最新版ファーム(2021.3)では動作しなかったので、ファームは2018.1か2017.2に戻して動かす必要がありました。2018.1,2017.2のいずれでも動作はしましたので、2021.3のAPI変更でイニシャライズがうまく行っていない感じです)
スペアナを起動すると、2.4G Wifi帯域が表示されます。表示設定をいろいろいじってみると、以下のような直近のデータを残した格好の良い画面になります。
試しに手持ちのスマホで2.4GHz帯をアクセスしてみると、スペクトラムが動きます。
このスペアナにより、この場所は2.4Gがかなり混雑しているのがわかります。
受信帯域幅20MHzの性能を確認
HDSDRで地デジのスペクトラムを見てみました。
1チャンネルの帯域幅は6MHzとなりますが、見事に3チャンネル分が丸見えでガードバンドもきれいに視認することができます。
HackRFの使用上の注意
送信機能は国内で使えない
HackRFは半二重ながら送信もできますが、国内で送信をすると電波法に抵触するため、HackRFの送信機能は基本的に使えません。
厳密に言うと玩具に使われているような微弱電波であれば合法なのですが、微弱電波の定義は3m離れたところでの電界強度ですので、SDRに付属している長いアンテナをつけると電波法違反になる可能性が高いです。
そのため、HackRFのファームVer.2021.3では送信機能をデフォルトでOFFにされる変更が入っています。送信機能はGNURadioでしか使えないので、受信専用のSDRを使っている分にはあまり問題ではないかもしれません。
受信が安定するのに時間がかかる
ラジオの録音プログラムを作っていて判明したのですが、ファームウェアというソフトが乗ったチューナーですので受信できるようになるまで約1分程度かかります。
1分くらいたってサンプリングが安定すると普通に使えます。そのため、予約録音プログラムでは録音を1分前からに設定しています。
RTL2832はすぐに安定して動きますので、この考慮は不要です。
そんなに速くない
HackRFは、ARMにファームウェアを乗せて動かしているので、内部のチップの処理パワーがなく、高度な信号処理は無理です。
実際にワンセグTVを受信してみましたが、イニシャル処理で信号が取れず実行エラーとなります。
フローグラフをpyファイルにして、受信動作に1分のウェイトを入れる動くのかもしれませんが、とても大変な作業です。
ワンセグ受信は、RTL-SDR.COMでも失敗することもあるフローグラフなので、そういった重いフローグラフはまず動かないと思っておいたほうがいいと思います。
貴重な時間を費やして試行錯誤するより、ワンセグのような広帯域サンプリングで高速処理をしたいなら、フルFPGAで組まれているUSRP(10万円)がベストなのでしょうね。
総じてお値段以上
このHackRFは動作速度という面で不満はありましたが、機能と性能はお値段以上で、なかなか素晴らしい製品だと思います。
これからこのSDRも使っていろいろと勉強していこうと思います。