LabVIEWから高周波信号を取得
最近、高周波まわりの技術が非常に進歩している印象をうける。 実際のところ、それらの恩恵は携帯電話、GPSなど身の回りにあふれている。
ワンセグチューナも一時期より安くなり、1,000円台でUSBチューナが売っている。 無線通信に強い興味を抱く方々の間ではワンセグチューナをラジオとして使うことが流行っているようだ。 試しに、ワンセグチューナ、ソフトウェアラジオ、gnuradio、USRPなどのキーワードで検索するといろんなサイトが引っかかる。 楽しみ方の一つとして、ご自身の持つアンテナとワンセグチューナを繋ぎ、PC上で復調してその音声を聞くということがあるらしい。そのためのソフトウェアとしてHDSDRがあり、ソフト上から聞きたい帯域にチューンして、復調法を選ぶと聞きたい音声が聞こえるというのが楽しみ方の基本的な流れのようだ。
ラジオソフトウェアにも仕様を公開しているものがありgnuradio、SDR#などがある。gnuradioはソフトウェアラジオの開発環境になっているようでかなり小回りが利きそう。ただ、例によってLinuxベースなのでwindows派の人には敷居が高いかも。SDR#はC#で開発されていることもありwindowsとの相性が良さそうである。
これらを見たうえで自分の手の届く範囲でソフトウェアラジオの一端でも扱ってみたい。あわよくば簡易スペアナが欲しい。というのを本記事の目標としてみる。これは遊んでいると変わってくることは十分あるが初めのモチベーションとしては十分だろう。
具体的には、筆者が使い慣れているLabVIEWでチューナからの信号を読み取りそのパワースペクトルを調べるというのを目標としよう。
さて、まずは先人ここやここ、に倣ってRTL2832Uがチップに使われているワンセグチューナを導入する。 ##基本的な動作チェック
- HDSDRのインストール
- ExtIO_USRP+FCD+RTL2832+BorIPのインストール
- librtl2832++のdll交換
- チューナをUSBポートに挿入。この際自動的にドライバは入れない。(勝手に入ってしまう場合は後から変えられるので気にしない。)
- RTL2832UドライバをZadig.exeを使ってインストール。
- HDSDR上での動作チェック。(Device hintの設定を忘れずに。RTL) ここまででうまくいかない(地元のFM局が入るかどうかで調べられる)ときは先人のページを参考にして動作することを確認しておく。
ここからが本題。 ## rtl_tcpのインストール
- rtl_tcpのダウンロード。windows用がpre-built Windows versionとして提供されている。 解凍するとx32もしくはx64にいくつか実行ファイルがある。
- rtl_sdr.exe:ファイルやメモリに取得した波形データを吐き出すソフト。ファイルに出すとあっという間にファイルサイズが膨大になるので注意。これが普通に使いこなせる人はこれを使ってください。以下を読む必要はありません。
- rtl_test.exe:テストプログラム。まずはこれを動かしてチューナが認識されているかなど調べると良い。
- rtl_tcp.exe:TCPを使ってほかのプログラムとデータをやり取りできる。LabVIEWやほかのプログラムをクライアントにすることでデータの取得が可能。
ここでrtl_tcpを使うために仕様を調べる。ソースコードは公開されている。動作としては
- デフォルトで127.0.0.1:1234が割り当てられていてサーバになる。
- サーバにコマンド数値cmd、パラメータを送ると命令を送れる。中心周波数(cmd=0x01)、ゲインモード(cmd=0x03)、ゲイン(cmd=0x04)、サンプリング周波数(cmd=0x02)など設定可能。
- サーバにtcp readを送ると読み取りバイト数に応じたデータが届く。
- データは符号なし8bit型の配列。配列の0から数えて偶数番目(0,2,4,…)はI信号(real part)、奇数番目には(1,3,5,…)にはQ信号(imaginary part)が入っている。
これらをもとに作ったLabVIEWのviのブロックダイアグラムは
この通り。
この記事の執筆に当たっては
を参考にさせていただきました。感謝。
- LabVIEWはNI社の製品です。本サイトはLabVIEWを手軽にプログラミング、テストするツールとして用いているだけで特定の企業の製品の宣伝を目的とはしておりません。従いまして、本記事により、利益、不利益を被っても本サイトは責任をとれません。