理乃美

ソフトとハードと論理の覚え書き

GNURadioでSSB変調 - Hilbert変換

2021-01-23 23:05:00 | RF

Jetson nano に GNURaido 3.7 の組み合わせで実験した記録。

SSB変調の方法はいくつかあるが、今回は Hilbert フィルタブロックを使う方法の実験。アナログ回路でいうとPSN方式とやっていることは同じ。

ヒルベルト変換で複素信号の虚部が実部から位相が90°遅れた値を取るようにすることでUSBを生成している。また、虚部の符号を逆にすればLSBにになる。

Flow graphで書くとこうなる。

では、実際に生成される信号はどうだろうか。

サンプルレートはオーディオデバイスで標準的な44.1KHzを使用。疑似音声データに100Hz - 2.7kHzのバンドパスフィルタをかけたものをソースにして、LSBを生成し、FFTで見てみる。

Hilbert変換のタップ数をデフォルトの65から200に増やして試した結果がこちら。

低域に逆サイドの漏れが見られる。もちろん、タップ数がデフォルトの65だと話にならない。タップ数を520に増やした結果はこちら。

かなり改善されたが、もともと帯域を100Hzからと欲張っているので低域の漏れがまだちょっとという感じ。だが、タップ数を増やせば必要な計算量が増える訳で、むやみに増やして良いものではない。

ここで落ち着いて考えてみる。サンプルレートは44.1KHz. つまり、20KHzのオーディオ帯域があって、それ全体をヒルベルト変換している。でも実際に必要なオーディオ帯域は3KHz. それ以上の部分は、存在しない信号を無駄に変換計算している事になる。なら、サンプルレートを下げれば無駄が減って性能が上がるだろう。そこで、サンプルレートを1/5 の 8.82 KHzに下げて実験してみた。

疑似音声データに100Hz - 2.7kHzのバンドパスフィルタをかけた44.1KHzサンプリングの音声信号をRational Resampler で 8.82 KHzサンプリングの信号にして200タップのHilbertに通した結果がこちら。

逆サイドへの漏れが断然良い。タップ数が520だとこうなる。

ということで出来上がった全体のflow graphがこちら。上側が音声信号をHilbert変換してPlutoSDR Sinkに入力できる複素信号を作る部分。下側は、PlutSDR Sourceからの複素信号をダイレクトコンバージョンでオーディオ信号にする受信部分で、左下で正弦波をかけている部分は送信機と受信機の周波数ずれを模擬している。こうやって実験しておけば、GRC側の不具合、例えば処理が重くて実時間に追いつかない、などを先に見つけることができる。

 

疑似音声信号は、CQ出版社のサイトからRFワールド誌 No42の記事関連ファイルとしてダウンロードできるtest_signal.wav ファイルを使用。(https://www.rf-world.jp/bn/RFW42/RFW42P.shtml)

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

PlutoSDR: アナログRF変調波形の観測

2021-01-22 23:34:55 | RF

ADALM-PLUTOとGNU Radio 3.7の組み合わせで、実験をしている。今回は、出力波形をスペクトラムアナライザで見る実験の記録。

GCRでDSB/AM/SSB変調のフローグラフを組み、疑似音声信号をPlutoSDRから送信し、その信号をスペクトラムアナライザで観察した。

周波数は、438.500000 MHz. 実際のところは 438.4971 MHz 付近。PLUTOの周波数基準はただの表面実装のクリスタルモジュールなのでこんなものだろう。

まずは、DSB.

RBW 30Hzで観察したスペクトラムとGRCでPlutoSDRに流し込んだIQ信号のスペクトラムは次のとおり。(スペアナのセンター周波数があっていないのはご愛敬 )

お次は、AM変調

DSBと比較してみると、搬送波にエネルギーを取られている分、左右に広がっている音声信号を運んでいる成分のパワーが落ちているのが見て取れる

ちなみに、フローグラフは以下のとおり。最大音量(±1.0)で100%変調となる設定。

次は、Single SIde Band (LSB)。

SSBの生成方法は複数あるが、まずは DSBを生成したのちフィルタで片側を切り出す方法。アナログ回路なら一番普通の方法だろうか。

使ったフローグラフとPlutSDRに送り込んだ信号のFFTは次のとおり。二つ目のバンドパスフィルタは黄色表示(バイパスされている)ことに注意。GRCでの表示だけを見ると逆サイドへの漏れひどいように見えるが実際に送出されるRF信号はそんなに悪いのだろうか?

ちなみに、フィルタを2段重ねにするとこうなる。GRC上は大きく違うが、PLUTOから送出される信号としてはどうなんだろう?

次は、ヒルベルト変換を用いたSSBの生成。最もSDRらしいSSB生成方法かもしれない。アナログのPSN方式に相当する。

プローグラフとPlutoSDRに送り込まれる信号は次のとおり。

 

なお測定条件の詳細は以下のとおり。

疑似音声信号は、CQ出版社のサイトからRFワールド誌 No42の記事関連ファイルとしてダウンロードできるtest_signal.wav ファイルを使用。(https://www.rf-world.jp/bn/RFW42/RFW42P.shtml) これに、100Hz - 2.7KHz のバンドパスフィルタをかけたものをソースとした。WAVファイルのサンプリング周波数が44.1KHzなので、フローグラムでもサンプリング周波数に44.1KHzを使用した。

搬送波の周波数は、ADALM-PLUTOが正式サポートする帯域の中でアマチュア無線の実験研究用のバンド内である438.5MHzとした。ADALM-PLUTOに搭載のクリスタルモジュールの誤差により、実際の搬送波は 438.4971 MHz付近。

適当なカップラーを持たないため、PLUTOのTxに自作のダミーロードを接続しそこから漏れる電波をスペアナ(Annritsu MS2602A)の入力端子に変換アダプタを介して直付けしたホイップアンテナで受信する方法を取った。そのため、信号強度の絶対値にあまり意味はなく、再現性も乏しいことに注意。

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

GNURadio 3.7でPlutoSDR - セルフ送受の実験

2021-01-11 01:03:03 | RF

ADALM-PLUTOは、送信と受信が同時にできる。それであれば、自分で送信した電波を自分で受信すれば1台で通信実験が完結して便利だと考えたのだが、けっこうハマった。

実験の方法としては、TX/RXともにアンテナを接続し(*1)無線で行う方法と、TX/RXを同軸ケーブルで繋いでおこなう方法があるが、方法によって現象が異なった。

変調方式は、AM。

無線の場合、TX/RXのLOを同一周波数にすると単一のトーンを乗せたときにぶわぁぶわぁという信号の強弱変化が起こる。アナウンス音声だと何か了解度が悪い。TX/RXのLOを少しずらすと、AMにLOの周波数差のビートが載る。

有線の場合、TX/RXのLOを同一周波数にするとアナウンス音声でもぶわぁぶわぁという信号の強弱変化が起こる。TX/RXのLOを少しずらすと、問題なし。

想像するに、RXのLOがTXの干渉を受けているのだろう。

ということで、TX/RXを直結し、TX/RXのLOを異なる周波数にする構成で実験するのが良さそうだ。

 

*1 正確には、TXにダミーロード、RXにホイップアンテナを接続。

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

Jetson nano で PLUTO SDR - FM東京の受信

2021-01-03 23:39:10 | RF

手始めに無理を承知でFM放送の受信を試みたところ、ひどいノイズ交じりだが放送が受信できてびっくり。元にしているのは、wiki.gnuradio.org の「PlutoSDR FMRadio」。

 

1.  まずは、PLUTOの周波数範囲の拡大。次のWebページの「Updating to the AD9364 」が情報元。

  https://wiki.analog.com/university/tools/pluto/users/customizing

より具体的には、PLUTOをUSBに刺すとUSB接続のCOMポートが現れるので、ターミナルソフトでそのCOMポートにつなぐと、PLUTOのlinuxにログインできる。そこで、コマンドをちょこちょこと打って搭載されているチップがAD9364だと嘘をつくいうしだい。なお、手元のADALM-PLUTOに搭載されているチップはAD9363とマーキングされていたのを開腹して視認している。

# この手順は、https://www.rtl-sdr.com/plutosdr-quickstart-guide/ に書いてあるのだけど、タイポがあってその通りだとNGなので注意。

 

2.  Jetson nanoのオーディオ出力の変更

Jetson nanoの標準設定では音が出ないが、手操作で変更すれば可能。今回は、HDMIで接続しているディスプレイに内蔵のスピーカーから音を出すことにする。

デスクトップ右上のスピーカーのアイコンからプルダウンメニューを開き、Sound Settings... を選んで設定画面を開く。Outputのタブで、デフォルトで Analog Output Build-in Audio となっているものを、HDMI/DisplayPort Build-in Audio に変える。

 

3. アンテナ

  手抜きで、SMAジャックの芯線に1mほどのビニル線をはんだ付けしたものをRxにつないでアンテナとした

 

4. Flow graphの入手

https://wiki.gnuradio.org/index.php/PlutoSDR_FMRadio

今回参考にしたのは上記のWikiの記事だが、ターゲットは GNU Radio 3.8。手元の\Jetson nanoにインストールしてあるのは3.7 なのでそのままではNG. だが、記事のflow graphのアップ場所に、 fmradio_pluto.grc という古いバージョンがあって、こちらが利用できた。

https://github.com/patel999jay/ADALM-Pluto-File-Transfer/tree/master/FMReceiverPluto/source

flow graphの変更箇所は2か所。

変更1.   ID が fm_station という Para;meter の Value を 100.5e6 から 80000000 へ変更.  (FM東京は80.0MHz)

変更2.  PlutoSDR の  LO Frequency を 100.5e6 から fm_station へ変更. 

これだけ。

 

5. 実行結果

チップの仕様から言えば規格外の周波数のうえいい加減なアンテナ。それなのに、ひどいノイズ交じりとは言え放送が聞こえたのにはちょっとびっくり。でもまあ、PLUATO-SDR と GNU Radioの組み合わせで動作している確認がとれて一安心。

 

 

 

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

Jetson nano で PLUTO SDR - GNU Radio 3.7を動かすまで

2021-01-02 18:55:59 | RF

Analog devices の ADALM-PLUTO をJetson nano で試してみた。

まずは、GNU Radio 3.7 をインストールしてPluto SDR が使えるようになるまでの手順の覚え。

# 最初は、GNU Radio 3.8で試みたがとん挫したので 3.7でやり直した。

 

Step 0.  Jetson nano に、jetson-nano-4gb-jp441-sd-card-image.zip (JetPack 4.1.1) のクリーンインストールからスタート。

Step 1. GNU Radio 3.7 をインストール

 https://wiki.gnuradio.org/index.php/InstallingGR の Ubuntu PPA Installation に従ってインストール。

    バージョンによって、最初にadd-apt-repositoryする ppas が異なるので注意。3.7なので、以下のとおり。

 $ sudo add-apt-repository ppa:gnuradio/gnuradio-releases-3.7

Step 2.  libiio, libad9361-iio のビルド

  https://wiki.analog.com/resources/tools-software/linux-software/gnuradio に従って、libiioとlibad9861-iioをビルド

Step 3.  gr-iioのビルド

https://wiki.analog.com/resources/tools-software/linux-software/gnuradioに記載されたとおり、GNU Radio 3.7と3.8で手順が異なる。

見逃しそうだが、まず  sudo apt install swig

そのあとGNU Radio 3.7の方の手順を実行。

Step 4. ファイルの移動

sudo cp -r /usr/local/lib/python2.7/dist-packages/gnuradio/iio /usr/lib/python2.7/dist-packages/gnuradio/

 

以上で、GNU Radio 3.7 から Pluto SDRが使えるようになった。

gnuradio-compaion の初回起動時に一度きりのワーニング画面が現れるが無視して問題なし。

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