Home
SDR受信システム を作ってみた (Soft66Liteを使用したSDR受信ハードの製作)
言葉の変更(SDR受信機→SDR受信システム)
および 1.項 構成と仕様の説明文改善 Ver.1.6 '19/07/10
ソースプグラム PIC C言語 をv-up Ver.1.5 '16/04/29
SDRsharpとHDSDRの比較 Ver.1.4 '16/04/28
HDSDRのイメージの改善 Ver.1.3 '16/03/06
HDSDR と SDRsharp を使ってみた Ver.1.2 '16/02/20
ソースプグラム PIC C言語 をv-up Ver.1.1 '16/02/18
Ver.1.0 '16/02/11
All rights reserved JA3OOK 中村 利和
Soft66Lite、AD9834DDSキット、PIC、Pd-extended、HDSDR や SDRsharp が主要な市販品または
オープンソースです。 (SDR:Software Defined Radio)
作ったというより組み合わせたって感じですが紹介します。
1.製作したSDR受信システムの構成と仕様
今回のSDR受信システムのブロック図です。主要なBOARD三枚とPCで構成されていて、
・SDR BOARD : Soft66Lite(市販品)
・DDS BOARD : AD9834DDSキット(市販品)
・MCU BOARD : PICを使った私の手作り
・PC上のプログラム : SDR用ソフト(Pd-extended、HDSDR、SDRsharp)
です。
補足
・PC内に描かれているブロック図は、e_karakuriさんが参考文献6で発表されているソ
フトから受信に必要な最小限の機能を私が抜き出した図です。従ってノイズリダクション
やSメーターなどは描いていません。
仕様
受信周波数
・中波から短波の受信 実用上500kHZ程度から30MHz程度
(アマチュア無線、リグの中間周波、放送など)
電波形式
・SSB(LSB、USB)、AM、CWもSSBモードで可能
周波数の変更方法
・ダイヤル(ロータリーエンコーダ)による周波数の指定
・バンドスコープにマウスを合わせての指定
・メモリーに記憶させた周波数の読み出し
2.ハードウェア回路図
SDR BOARD と DDS BOARD の仕様や回路は参考文献1、3を参照してください。
ロータリーエンコーダはアルプス電気製のノンクリックタイプ。DIP化基板とともに秋月で購入
しました。
組みあがったハードウエアの写真がこれ。
上右が SDR BOARD(Soft66Lite) 左が DDS BOARD(AD9834 SMALL MODULE KIT) 右下が MCU BOARD。
左上部分しか見えていない基盤が POWER BOARD。
周波数変更の頻度が少ない使い方を想定しており操作部は缶の中。シールド効果を期待して金属製。
板金工作はむずかしい ヾ(^_^;
缶は嫁がダイソーで見つけて買ってきてくれました。かわいいデザインでサイズもピッタリ(12×12×5cm)。
3.MCU BOARD上のマイクロコンピュータ用ソフトウェア
開発環境は Microchip社の
MPLAB X IDE v3.05
MPLAB XC8コンパイラ v1.34
PICkit3
開発に当たって考慮したこと。
周波数の変更は回転ダイアル(ロータリーエンコーダ)で行う。位の変更(100Hz、1000Hzなど
の変更)も同じダイアルで行う。
複数の周波数をメモリーに記憶させておき、いつでも必要な周波数を読み出せると便利そうな
ので、これを実現するために、C言語からEEPROMメモリーへのwrite/readが簡単にでき、プログラ
ム作成経験がある PIC18F25K22 をチョイスしました。
メモリー機能の要点は次の通り。
・記憶できるチャンネル数は M00〜M09 の10チャンネルを確保。(不足なら増やせる)
・プログラミング時にいくつかのCHには周波数をあらかじめ設定しておく(出荷時の状態)
例 7メガ、14メガ、TS-830のIF周波数、TS-590のIF周波数、中波NHKの周波数
・VFOとメモリー双方向の周波数のコピーが簡単にできること
・M00は特別の意味をもたせ、電源投入時にVFOをM00の周波数から開始させる
(リグのIFを受信するなどの場合に、電源を入れるつど周波数を設定する必要がなく便利)
LCDを装備しVFOやメモリーCHの周波数表示、メモリー操作のガイド表示を行う。
ソースプログラム C言語 を公開します。
・SDR用DDSv33ソースプログラム
変更点:スタート周波数を7.050MHzから11.376MHzに変更
記憶周波数を 828kHz、7.050MHz、8.832MHz、11.376MHz、14.150MHz
カーソル移動方向をエンコーダー左回りで桁上がり、右回りで桁下がりに変更(今までと逆)
周波数可変範囲チェックのバグ修正
エンコーダーのチャタリング減少
・SDR用DDSv31ソースプログラム
変更点:周波数変更の既定の位を1000Hzに統一
(従来は500kHzから1500kHzまでは1000Hz、他は100Hz)
・SDR用DDSv30ソースプログラム
・LCD_driverソースプログラム
・LCD_headerソースプログラム
ソースプログラムのインデンテーション(段落付け)について。
MPLAB X IDE だと正しく段落付けされます。
メモ帳だとカラム数が違うので段落付けは変、しかし仮にメモ帳で編集してもプログラ
ムの動作には支障なし。
開発環境は前記のとおり。
MPLAB X IDE にProjectを作るとき文字(Encoding)の種類はShift_JISを指定。
本プログラムの作成に当たり、AD9834データシート(参考文献4)、AD9834とロータリーエン
コーダーに関して henteko.orgさん、iwamotoさん、tylercsfさんの記事およびソースプログラ
ム(参考文献7、8、9)を参考にしました。
4.パソコン上のソフトウェア
SDRの特徴であるソフトウエアでの信号処理を Pure Data(略称 Pd)で行っています。
Pd はサウンドやビデオ、2D/3D画像の処理や発生に使われる開発環境です。ビジュアル型プロ
グラミング言語でありデータフロー型プログラミング言語です。フリーソフトウェアですので自
由に利用できます。(参考文献5)
私はその中の Pd extended をノートPCにインストールし利用しています。
e_karakuriさんはSDRとPdについてやさしく解説されており、実際にSSBやAMの信号処理をPdで
開発され公開されておられます。(参考文献6)
その公開されているプログラムである GIYEMON-C-0W2.pd や SDR_Prot2.pd などを私のノートPC
にダウンロードし動作させたり私なりに改造したりして利用しています。
私のノートPCの仕様:
Intel Core Duo CPU U9400 1.4GHz 実装メモリ(RAM) 4.00GB
OS Windows 7 Home Premium Service Pack1
サウンドボード Realtek High Definition Audio (元々内臓のもの)
(このPCのCPU能力やメモリーで十分余裕があります。GIYEMON-C-0W2.pdを動作させてもCPU
使用率10〜15%程度)
5.操作方法
ハードウエアの写真と回路図を参照しながら読んでください。
a 機器の接続
・アンテナ線またはリグのIF出力を白色RCAジャックへ挿す
・両端ステレオプラグのコードで缶後面のステレオ端子とPCのマイク入力端子に挿す
・DC12V前後の電源を缶後面のDCレセプターに挿す
・黄色のRCAジャックはVFO出力(通常は何もつながない)
b 白色RCAからのRF入力をSoft66Liteの入力BPFを経由するかしないかの方法
・POWER BOARD の白色ジャンパーで行う
(INとANT に対応し、INが直結、ANTがBPF経由)
c 受信周波数のVFOとXTALの切り替えと逓倍数の設定
・Soft66Lite(SDR BOARD)にXTALを挿せば水晶発振。
・XTALの代わりにそこに来ている黒い線の先の3ピンを挿せばVFO。
・今回のDDSのVFO周波数は受信周波数と一致させているので逓倍ジャンパーは2倍に設定す
る。すなわち SV1:オープン SV2:オープン SV3:1-2ショート
なお、参考文献1の逓倍ICの設定ジャンパーの二つ目のExample(7Mの水晶で21Mを受信す
る例)は誤植と思われる。
この基盤の逓倍ジャンパーの設定はJM6QALさんのジャンパー設定表(参考文献2)が分か
りやすい。
d 電源スイッチ
・POWER BOARD のDCレセプターのそばのスナップスイッチ
・機器の接続や設定は電源を切った状態で行うこと
e LEDランプ
・POWER ON時に点灯するLED
・MCUからDDSへVFO出力指令が出ている場合に点灯するLED
f VFOの周波数変更などの操作(MCU BOARD で操作)
スライドスイッチ |
ロータリーエンコーダ |
白色プッシュスイッチ |
赤色プッシュスイッチ |
上位置の場合 |
VFO周波数を アップ/ダウン |
短押 |
メモリーCH番号を下げ そのCHが記憶している周波数を表示し VFOへコピー |
短押 |
メモリーCH番号を上げ そのCHが記憶している周波数を表示し VFOへコピー |
長押 |
現在のメモリーCHの周波数をVFOにコピー |
長押 |
VFO周波数を現在のメモリーCHに記憶 |
下位置の場合 |
VFOの変更したい位を アップ/ダウン |
短押 |
メモリーCH番号を下げ そのCHが記憶している周波数を表示 |
短押 |
メモリーCH番号を上げ そのCHが記憶している周波数を表示 |
長押 |
現在のメモリーCHの周波数をVFOにコピー |
長押 |
VFO周波数を現在のメモリーCHに記憶 注4 |
注1 スライドスイッチ:大きなつまみの左下の小さなスイッチ
注2 ロータリーエンコーダ:大きなつまみ
注3 長押:3秒程度以上押したまま
注4 メモリーCHが空でない場合は書き込んでOKかどうか確認メッセージが表示される
LCD画面です。
上の行にVFOの周波数、下の行にメモリーCH(この例ではメモリーCH03)が記憶している周波数
を表示しています。 ロータリーエンコーダを回すことにより、上の行のカーソルのある位に
加算や引算がされます。
g PCでの操作
・Pd-extended を起動する。
・次に Pd-extended のファイルメニュー からSDR_Prot2.pd を立ち上げる。
以降の操作説明は省略。
老婆心ですが・・・、動作をスタートさせるボタンを押さないと、または Pd-extended 画
面の DSP をクリックしないと、何も聞こえない、スコープも動かないです。ご注意を!
さらに、SSBやCWの周波数帯でも、まずはAMモードで受信しモガモガまたはザーという雑音
が聞こえることを確認するとよい。
なぜならバンドスコープ画面上で周波数を指定する記号(|棒)が中央にあるときLSBやUS
Bモードだと全くの無音になり動作していないと思ってしまうから。私も設定を間違ったか
と勘違いしたことが何回かあります。
PCの画面
e_karakuriさんの GIYEMON-C-0W2.pd の画面。
h PICの初期化(PICに記憶された全メモリーCHの周波数を出荷時に戻す)
<通常は操作不要>
・電源を切り、赤色プッシュスイッチを押したまま電源を入れる。
i PICへのプログラミング(プログラムをPICに書き込むこと)
<通常は操作不要>
・電源を切り、MCU BOARDへDC電源を供給しているコードを抜いてから、
in circuit programming ピンにPICkit3を挿して行う。
6.受信の評価
・Soft66Liteの感度の良さにはビックリしました。
Soft66Liteボード上の感度調節ボリュームの調整やPCでの入力レベル調整は必須です。
Pdの性能も関係しているのだろうがノイズも少ないです!
・SDRのソフトウエアに e_karakuriさんのソフトを使ったのは少しでもソフトでの信号処理を知
りたかったからです。しかし、とても難解で理解の程度は10分の1にも達しない (^_^;)
でも少しは近づけた気がします。もっと勉強したい。
・HDSDR を使ってみたい。→ 7項で記載
・CW Skimmer を使ってみたい。
・TS-830のIFの受信は実証済み。TS-590のIF受信に挑戦だ!
→ TS-590SからIFを取り出して受信できるようにしました。別ページに記載。
7.HDSDR と SDRsharp を使ってみた
使用したHDSDRはV2.70。HDSDRの詳細は参考文献10を見てください。
使用したPCは4項で述べたのと同じ。
以下の評価はHDSDRの評価というよりもSoft66Liteも含めた総合評価です。
a HDSDRは操作性も見栄えも良い。
しかし面食らったのは周波数のUP/DOWNをマウスの左右のボタンでできるのだが、KENWOODや
ICOM(ARCPやRS-BA1)と左右が逆。合わせられるといいのだが・・・
b 郊外の住宅地でTS-830と比べて聞いてみた。アンテナは屋根に這わせた10mのロングワイヤ。
主に聞いたのは7メガ。
・SSB、CWとも聞こえる聞こえないの明確な差はない。もっとテストを重ねる必要はあるが。
・たまたまJCC移動サービスで2km離れた所からの電波は強いイメージを発生せてバンドス
コープを賑わしUSBで復調できた。 これはHDSDRよりもハードに依存する問題。
・バンドスコープも十分と思うくらいで、滝の早さを調整すればCW符号もなんとか読める。
・次にTS-830のIFを聞いてみた。VFOの周波数によってはスプリアスがでるので、実験の結果
8829.5kHzとした。これだとイメージがないだけでなく、830で聞こえている局がスコープ
中央で受信できる。結果はHDSDRより830のほうが弱い信号がききとれる。
CWモードもSSBモードも830の勝ち。
c 田舎のノイズの少ない環境で、ちゃんとしたアンテナで主にローバンドをTS-590Sと比較した。
・7メガ、普通の強さの国内局は実用になる。弱い局は聞こえない。
・7メガでPJ2(Curacao)がスプリット運用しパイルを受けているのに遭遇。
PJ2が聞こえないしスコープにも写らない。だけでなく1kHzUPのJAが出るとPJ2の周波数
でもまともに聞こえてくる。
590Sでは559で聞こえているし、JAが200Hzさえ離れていればPJ2の周波数は静かだ。
A3(Tonga)がかろうじて聞こえる229、590Sでは579。
・3.5メガのJD1(Ogasawara)は聞こえる、S9だから・・・
・1.8メガ、EUが開いているが590Sで579以上でないと聞こえない、見えない!
・イメージはどのバンドも同じと思ったが、よく観察すると1.8メガや3.5が顕著のようだ。
TS-830のIF受信の場合イメージが全くないから、1.8メガや3.5メガではHDSDR側で位相の
調整をすればよくなるのかもしれない。今度調整してみよう。
→ 調整してみた。h項に記載。
・私のSDRは耳もバンドスコープも普通のDX局は苦手なのだ。
結論はTS-590Sの圧倒的な勝ち。 当たり前だった!
前項のノイズが多い環境で貧弱なアンテナでのTS-830との比較では互角のような感じであっ
たが、DXに向いた環境と設備ではTS-590Sに全く太刀打ちできず完敗。
d 他の問題はPCから出くる音が遅れること。従来のリグと同時に聞くとはっきりと分かる。パイ
ルアップやコンテストのようなクイックレスポンスが求められるケースでは致命的かもしれな
いレベル。
GIYEMON-C-0W2(前述の Pd を使ったソフト) は速く、ストレスを感じない。
HDSDRは私のPCにとって重過ぎるのかな! ハイスペックのPCがないので検証できない。
e ハイスペックPCでも遅延問題を改善できない場合、
バンドスコープがない従来機をSDRのスコープ機能が補完する使い方
→ と一時は思ったが、(イメージがうんと少なくて)感度も良くないと使えない。
音声処理が速いSDRで受信し従来機で送信する使い方
→ と一時は思ったが、もっと感度がよくて混変調が少なくないと使い物にならない。
f SDRを本格利用するには従来機とのトランシーブ操作ができる環境を構築しないといけない。
(HDSDRにはそのインターフェースが用意されている)
私自身の場合はさらに遠隔操作でも実現しないといけない。先は長い! ふ〜
→ と一時は思ったが、当分は様子見、着手しない。
☆近い将来、リグの大変革が起きるなあ。
→ と一時は思ったが先のことかな? 数万円するSDRのハード、アルインコやICOMのSDR
機がどの程度まで仕上がっているのか気になる。
☆しかし、まあ、1800円の Soft66Lite と少々の付加基盤や部品の購入+自身の労力でこれ
だけのことができるのだ!
ただし〜忘れてはいけません。SDRのソフトやハード、DDS、MCU、OSを作っている方々の資金
と労力は莫大ですよ。 本来はソフトも有償であるべきっと思う。
g HDSDRの画面がこれ。
スコープの中央が7.035MHz(普通の使い方ではVFO周波数と一致させる)、7.048MHzのLSBを受信
中の例。
老婆心ですが・・・、Start ボタンを押さないと何も聞こえないしスコープも動かないです。
画面左下の現在は 緑色がバックで Stop と書かれている所です。
イメージが出ている画面がこれ。
スコープの中央が1.810MHz、1.818付近が正しい信号だが、左の1.802付近はイメージ。
1.802はJAのハムバンドでないので区別ができるが、他のバンドでは見分けるのに苦労する。
この画面は 1.816のET7L(Ethiopia)をUPで3局が呼んでいる場面。
左右対称に出ている連続した線はスプリアス。
h イメージが出にくいように調整した画面がこれ。特別強力なJAが出ていなかったので、正確な
比較ではないが、改善されたようだ。
Options [F7] → Input Channel Chalibration for RX → 上記の調整窓 で、
今回は Phase を左にスライド。上記画面の状態でベストだった。
スプリアスの縦線はVFO周波数を1815kHzにセットすることで一番少なくできた。
i SDRsharp(SDR#) と HDSDR を比較しました。
次の画面は両SDRソフトを同じPCで同時に動かした画面です。同じIQ信号を入力。滝の流れる
早さ、表示バンド幅を同じに設定しました。
HDSDRは二つの滝のうち、メインの滝だけの表示に設定。HDSDRの明るさとコントラストを信号
がよく見えるように調整しました。
SDR#は滝のOffsetを最下、Rangeを上寄りに設定しました。
SDRsharpとHDSDRの比較表
比較項目 |
SDRsharp |
HDSDR |
補足 |
画面 |
CW信号の表示 |
弱い信号も表示されやすい (スペクトル、滝ともに見つけやすい)。 |
弱い信号は表示されにくい (見つけにくい) |
強い信号は同等 |
CW符号の目視解読 |
符号と符号の切れ目が分かりにくく 解読しにくい |
符号と符号の切れ目が明確で 解読しやすい |
強い信号でも同じ傾向 |
SSB信号の表示 |
弱い信号は表示されにくい (見つけにくい) |
弱い信号も表示されやすい (見つけやすい) |
強い信号は同等 |
音 |
音域 |
広い(音楽も楽しめるがSSB通信の了解度低い) |
狭い(SSB通信の了解度高い) |
音の歪は両方とも問題なし |
再生音の遅延時間 |
HDSDRより若干短いが少しの差 |
長い |
リグからの音と比べると 両方とも遅延が気になる |
CPU負荷 |
CPU使用率は両方動かした状態で、画面にあるように 17%(10〜20%前後)。
HDSDRだけ動かしても下がった感じがしない。
SDR#だけ動かすと5〜8%程度。 両方止めると0〜2%程度。
|
左記の結果から SDRsharpの方がCPU負荷が軽い |
比較に使った設備は
・SDRのハード Soft66Lite
・SDRsharp V1.0.0.1444
・HDSDR V2.70
・郊外の住宅地 アンテナは屋根に沿わせた10mほどのビニール線
・受信日時周波数 2016/04/28 17:23J前後 7.040MHz近辺
・PC NECノート VK16EX-C Intel Celeron B810 1.60GHz メモリ 2GB Win7 Professional
(従って遠隔操作での評価ではない)
以上ですが、両者とも設定によって表示画面が変わると思われるので、あくまで今回の条件で
の比較とし参考程度に受け取ってください。
SDRsharpも良くできたソフトです。無償で使わせていただいて本当にありがたいです。
補足説明
SDRソフトの画面で周波数を設定するのですが、この周波数の値について説明します。
中心周波数(SDRハードのIQミクサーへ入れるRF周波数)からのプラス・マイナスの値を設定す
る仕様になっているSDRソフトについては、中心周波数からプラス・マイナスの値を設定します。
受信周波数を設定する仕様になっているSDRソフトについては、その周波数はメモといっても過
言ではありません。ですので、
・アンテナを直接、SDRハードに接続する場合
受信の中心周波数(SDRハードのIQミクサーへ入れるRF周波数)または/および それより
プラス・マイナスの受信目的周波数を設定します。受信周波数を直読できて便利です。
・ 受信機のIF出力をSDRハードに接続する場合
受信機の受信周波数を設定すると受信周波数を直読できて便利です。(IF中心周波数とSDR
ハードのIQミクサーへ入れるRF周波数に差がある場合は、差分を考慮すること)
上記の各説明画面では受信機の受信周波数を設定しています。
謝辞
本文で引用した皆様方にはもちろん、次の方々にも
・回路図は水魚堂提供の「回路図エディタ」で作図しています。
・画像のトリミングなどの編集や画像ファイル変換は ねたろ さん提供の「Dibas」を利用してい
ます。Windows7でも問題なく動作しています。
深く感謝します。
参考文献
1 JA7TDO ソフトウェアラジオと電子工作 の Soft66Lite
2 JM6QAL JM6QAL website の ソフトウェアラジオ-Soft66Liteの製作 の 下のほう 2010.01.05付 ジャンパー設定一覧の表
3 ストロベリー・リナックス Strawberry Linux の AD9834 小型DDSモジュールキット
4 アナログ・デバイセズ AD9834データシート
5 The Pd community Pure Data
6 e_karakuri SDRが作りたいっ Pure Dataで作るソフトウェア・ラジオ −タマにも分かるSDRの作り方−
7 henteko.org henteko.org → 電子工作/PIC → AD9834を使った実験用DDS-VFOの製作
8 iwamoto はじめてのPIC → PIC18F14K50 → DDSシンセサイザ CQ出版社 デジタル周波数シンセサイザの制御
9 tylercsf ロータリーエンコーダを使ってみたい。 続きの続き
10 Winrad, Alberto di Bene (I2PHD) HDSDR
11 水魚堂 回路図エディタ
12 ねたろ 横田 幸之介さん Dibas フリーのお手軽レタッチソフト
13 AIRSPAY SDRsharp → Download
直前の画面へは ブラウザの戻る をクリックしてください。Topに戻るにはHome