理乃美

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

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でシェアする