Monthly FB NEWS 月刊FBニュース 月刊FBニュースはアマチュア無線の電子WEBマガジン。ベテランから入門まで、楽しく役立つ情報が満載です。

ものづくりやろう!

第三十五回 SDRをつくってみました(3)
― 局発周波数を切り換えて受信周波数帯を拡張する ―

JH3RGD 葭谷安正

2024年4月1日掲載

はじめに

令和6年1月号2月号の月刊FB Newsでは「SDRをつくってみました」のテーマで2回もSDRの記事を掲載しました。「まだやるのかよー」との声も聞こえてきそうですが、性懲りもなく「またやります!」。なんせ私にとってSDRは、理論はわかっていても作ってじっくり性能を確認したのは初めてですので、「もうちょい性能をアップしたい」という欲がわいてきました。

改造編

改造と言っても回路はほとんどかわっていません。何を変えたのかって? ハイ、局部発振器を作り変えました。2月号では、局部発振器にPLLモジュールを使用しました。このPLLモジュールの発振周波数の範囲は狭かったので、もとのtinySAを局部発振器として周波数範囲を広げて受信状況をもう少し確認してみたところ、AM放送やいくつかのハムバンド(3.5MHz, 7MHz, 10MHz, 14MHz)までは回路を変更することなく(もちろんアンテナのマッチングをとらなければ聞こえてきませんが)、局部発振器の発振周波数を変えるだけで多くの国内のCW信号が聞こえてきました。

そこで、マルチバンドとまではいきませんが、前回までに製作したSDR受信機をAM放送や3.5MHz, 7MHz, 10MHz, 14MHzバンド内の一部周波数帯域までを受信できるように機能を追加(ほんの少しですが)することにしました。

・全体システムの構成
SDR受信機には、その受信機単独(PCを必要としないという意味です)で受信出来る完結形の物と、SDRドングルのようにPCを必要とするものがあります。前回までにわたしがつくったものはPCを必要とするいわゆるフロントエンドに相当します。完結形のSDR受信機、ぜひ作りたいですね、という気持ちはあるのですが、私には信号処理の知識とそのプログラミング能力が不足しています。今から作ると半年以上(いや2年ほどだという声も聞こえてきます)かかってしまうのではないかと思います。

そこで、構成としては、「SDRフロントエンド+PC」は変えない、しかしいつかは(私が死んでからかもしれませんね)完結形をつくるという目標にしました。で、具体的な構成ですが、図1のように古いおんぼろPC(もったいないという気持ちがあり、まだこんな32ビットマシンを使っているんです。「Raspberry Pi Desktop」というOSを載せて使っています)にインストールしているGqrxというSDRソフトにI-Q信号を読み込ませて受信機に仕立てようという訳です。

本当はWindowsで動くHDSDRでもいいのですが、古いマシンを復活させるためにRaspberry Pi Desktopをインストールしたので、SDR専用に使えるのがこれしかないという次第です。

アンテナチューナは、SDRにバンドパスフィルタ(BPF)を実装するのを省くために付けました。システム構成を簡素化するために自作SDRにBPFを載せてしまって、アンテナチューナを省くというのも選択肢の一つと思います。


図1 構成

・全体写真
製作したSDRの全体図を写真2に示します。前回作成したものの発振回路を交換し、配線を多少整理しただけです。お菓子のブリキ缶を加工してシャーシにしました。ブレッドボードをそのまま入れてあります。これが完成品ではなくまだまだ改良したいのでブレッドボードのまま一時格納しました。


写真左: 左側面(端子類は左から、電源スイッチ、アンテナ端子、AUX出力端子)
写真右: 上面(ブレッドボードをそのまま収納)
写真2 製作したSDR外観図

・局部発振器
SDRの受信周波数範囲を広げるためには、局部発振器の周波数範囲を広げる必要があります。製作したSDR受信機は、受信信号をダイレクトコンバージョン受信機のように一気に音声帯域に落としました。このためダイレクトコンバージョン受信機の場合は局部発振器の発振周波数はほぼ受信周波数を発振できなければなりません。また、SDRでは位相シフト回路を使って、周波数が同じで位相がπ/2ずれている信号を作り出す必要があるので、局部発振器で発振しなければならない周波数は混合器に入力される周波数の4倍の周波数が必要になります。混乱をさけるため、局部発振器の発振周波数を「局発周波数」、混合器に入れる直前の局発周波数の4分の1の周波数の事を「混合器周波数」と記載することにします。前回使用した局部発振器は局発周波数が70MHz程度まで発振できるのでその4分の1の混合器周波数付近の信号が受信できるため14MHzは受信範囲に入るのですが、周波数が高くなると出力レベルの低下がみられました。

増幅器を一段かませればそのまま使えたかもしれませんが21MHz(局部発振器が発信しなければならない局発周波数は4倍の84MHz)も受信できれば良いなと思いましたので、候補としてSi5351を使った発振モジュールを購入しました。以前一度使ったことがあるのでプログラミングも大丈夫(というかその時もネットに転がっているのを拾ってきて一部改造しただけですが・・・)という事で2個ポチッしました(以前2個購入して2個とも壊してしまいましたので予備も購入しておきました)。

この発振器の制御にはArduino UNOを使用しました。小型化のためArduino Nanoを接続しましたがうまく動作しませんでした(後からわかったのですが、原因は手持ちのNanoが壊れていただけでした)。Arduino UNOに交換して動かしたところすぐに指定の周波数を発信してくれました(写真3)。


左黄枠内: Arduino UNO互換品 右黄枠内: Si5351モジュール
写真3 Si5351シンセサイザモジュールと制御用Arduino UNOの接続

購入した局部発振器の制御プログラムは以前ネット上で見つけたものを使用しました(ソースプログラムはこちら)。作成者はアマチュア無線家の方だったと思うのですが、どなたのホームページからダウンロードしたのか覚えておりません(参考文献にお名前やホームページアドレスを書くべきなのですが、本当にどこから持ってきたものか覚えておりません。お名前を参照せず引用させていただきます事、本当に申し訳ありません)。

製作したSDRには表示装置としてOLEDを載せています。このOLED上には局部発振器の局発周波数の4分の1の値(混合器周波数)を表示させていますので、Si5351制御プログラムにOLED制御コードを追加しました。

局部発振器の局発周波数は、下記の周波数の4倍の値を固定で発振するようにしました。周波数の切り換えはSDR正面のスイッチを押します(写真4)。1回押すと次の周波数へと変わり、ソフトウェアに登録されている周波数を順に変えていきます。

今回登録した周波数(混合器周波数)は下記の通りです。7MHz帯を中心に、10MHz帯、14MHz帯、3.5MHz帯、それと筆者の近くのNHKのAM局を受信できる周波数帯を選んで登録しました(21MHz帯まで受信可能であることは確認しましたが、なぜか18, 21MHzは受信信号にノイズが多く出てきますので使わないことにしました。今後も原因探求はしていくつもりです)。

(登録した混合器周波数)
7.00MHz, 7.02MHz, 7.04MHz, 7.06MHz, 7.08MHz, 7.10MHz, 7.12MHz, 7.14MHz, 7.16MHz, 7.18MHz, 7.20MHz, 10.10MHz, 14.00MHz, 14.02MHz, 660kHz, 820kHz, 3.50MHz

発振周波数の登録(または抹消)は、次行のようにプログラム中の周波数データに記入(または削除)することで自由に増減できます。

int frq[17]={700,702,704,706,708,710,712,714,716,718,720,1010,1400,1402,66,82,350}; //ソース44行目

これらは混合器周波数ですので、局部発振器にはソフトウェアでこれらの値を4倍した局発周波数が送られて発振します。


写真4 周波数の切り換えボタン(ボタンを1回押すと7.00MHzから7.02MHzに変化)

このような飛び飛びの周波数にした理由は、SDRでは局部発振器の周波数付近の一定の帯域中にある信号についてはソフトウェアにより信号を復調することができます。例えば、私のPCのサウンドボードはサンプリング周波数が48kHzなので、混合器周波数から24kHz上までの帯域中のデータであれば、SDRソフトのGqrxを使って選択・復調することができます。ですから、7.000MHz、7.020MHz、7.040MHzと20kHz毎に混合器周波数を変化させればあとはソフトウェアで選局周波数帯を重複させることにより7MHz帯すべての信号が抜けなく受信することができるわけです(逆に、ソフトウェアの選局を固定にして、混合器周波数を小刻みに変化させても同じですが)。

受信性能比較

SDR受信機が形になった日の翌日(3月20日)午前に東海QSOコンテストがありましたので、手持ちのIC-7300と製作したSDRに同じアンテナを切り換えて接続し、7MHz帯のCW信号の状況を比較しました。写真5がIC-7300によるウォーターフォール(以後WFと略記します)の図です。それから1分ほど後に自作SDRにアンテナを切り換えてWFを表示させました(写真6: 原稿を書いている時に気がつきました、写真後ろにお化けのように私の影が映っています。気にせずにWFに集中してください。)


写真5 IC-7300によるコンテスト時受信信号(3月20日11時頃)


写真6 製作したSDRによるコンテスト時受信信号(3月20日11時頃)
混合器周波数: 7.00MHz

前回説明しましたように、製作したSDR受信機は高周波増幅回路がありません(実は、故障した高周波増幅回路を撤去後、再度正常に動作する高周波増幅回路をつけてみたのですが、増幅していないのと同じくらいまで増幅レベルを絞らないと受信できませんでした。そのため撤去しました。ブレッドボード配線だからかもしれない可能性もあります。ちゃんと基板上に配線して高周波増幅回路を載せてみたいとおもいます)。このためIC-7300のほうがSDRで拾えない信号を拾っているというのが分かります。

信号強度が強い信号に同調させて信号を聞いてみました。同じコールサインが聞こえてくる状態ですので間違いはないのですが、その信号の周波数はIC-7300上では7.0115MHzと表示されます(写真5上に表示されている周波数)が、SDRで受信した信号はSDR受信ソフトGqrxでは周波数が10.350kHzと表示されています。局部発振器の周波数が7.00MHzなので、10.350kHzの位置に表示されている信号の受信周波数は7.00MHz+10.350kHz= 7.010350kHzになります。IC-7300と表示周波数が異なるので気になるところですが理由は不明です。

なお、この時のSDR上の局部発振器の発振周波数をカウンタで確認しましたが、カウンタ上では7MHzの4倍の周波数である28.0MHzがきっちりと発振していることを確認しています。運用上は「自作SDRでは1.15kHz程度低い周波数で表示される」と理解して運用することにしました(なぜなんだろうという疑問は残ったままですが・・・)。

今後の発展

自作SDRにはまだわからないことがいっぱいありますが、この自作したSDRを改良していくとき、どんな改良の方向があるのか考えてみました。

そうです、「完全マイコン化」です。今回製作したSDRはフロントエンドと呼ぶべきもので信号処理部分をパソコンに依存しています。パソコンに依存しない形にするためにはFFT、WFの計算や表示等をマイコンに担わせる必要があります。今回は局部発振器の制御と発振周波数表示のためにArduinoを使用しましたが、FFTやWFの表示のためにはArduinoは少し力不足ですのでRaspberry Pi等が必須となってきます。手始めに局発の制御をArduinoからRaspberry Piに置き換え、あとはFFT、WFの計算、表示、デジタル復調などのデジタル信号処理プログラムの置き換えなどが必要になってきます。冒頭記載しましたように私のような週末プログラマにとっては半年ほど必要な気がします。のんびりとSDRと付き合っていきたいと思います。

ものづくりやろう! バックナンバー

2024年4月号トップへ戻る

サイトのご利用について

©2024 月刊FBニュース編集部 All Rights Reserved.