ESP32 SD-TRX    【2022.12.27】



 去年から今年にかけてTeensy4.0でベースバンドのSD-TRXで遊びましたが、当時は16ビットの固定小数点演算しかライブラリでサポートされていませんでしたので、Teensyの持つ極めて高い処理能力を完全に生かすことが出来なかったのが残念でした。今では、32ビット浮動小数点演算のオーディオライブラリができたようで、またまた魅力的になっていますが、私的にはこのライブラリは中身がよくわからないので、確かに処理構成を素早く記述するには便利ですが、ひとたび動作が「PWZの想定と異なる」場合は、何処に原因を求めたらいいのかパルプンテ(=分からない)なことが多かったです(笑)。

 また、直交変調器/復調器のアナログ的特性の不安定さに嫌気がさして、TeensyをベースとしたSD-TRXの検討は、独立したTranceiverとして纏めることはせずに、メイン機に繋げるLow-IFアダプタとして実用化したので、とりあえず溜飲は下がっているのですが、もっと「SDR]らしい構成の機器を作りたいなぁと思っていました。できれば、DSP処理の中身も理解したうえで・・・と。そんななか、Twitterで情報をやり取りさせていただいているJF3HZB上保さんが、ESP-32の新しいバージョンで、かなりのSDR処理ができることをブログで発表されました。この界隈では余りにも有名なので、参照は省きますが、実働コードもしっかり公開されてあって、もう、涎タラタラモード(表現が下品だなぁ)で、早速飛びつくことにしました。

 事の発端は、JA2NKDさんが「コードを公開してもらえると助かります」とつぶやいて、それにJF3HZBさんが快く応じたというものだったと思い出しますので、お二方には大変感謝しております。ということで、いつものごとく前置きが長くなるので、この辺で切り上げて本題に入って行こうと思います。なお、コードは「ほぼ」FZBさんのコピーで、これを骨格として、ちょこちょこモディファイしているだけですが、これを用いて「実際に使うことのできるリグ」として仕上げることを目標にしてみたいと思います。ただ、いつものPWZですから、これから後は「日記的な記録」になりますので、そのあたりはご容赦いただきたく思います。

 さて、遊びをスタートするにあたって当座に必要なものを秋月で求めました。JF3HZBさんのブログを参考に、ベースバンド処理の基板をささっと作ってみます。





秋月御用達の部品類




ざっと部品を搭載&配線してみる


 基本構成がESP32-S3モジュールと外付けADC/DACとI/O用OPAですから占有面積は少ないのですが、今後TRXを構成するうえで、ある程度のAudio系パーツや、TRX、表示制御のためのI/Oコネクタも搭載が予定されているため、ちょっと大き目の穴あき基板を使っています。ところで、なにをとちくるったか、A/D基板はベース基板に固定してしまっています。これはD/Aモジュールのようにコネクタを介して搭載するべきですね。今のところ不具合は生じていませんが、壊れたら交換が厄介です。

 組み上げて動作テストをしようとすると、ADDAプログラム(HZBさんのESP32に取り込んで吐き出す「THROUGH動作」のCode)がウンともスンとも動きません。信号を追っていくとなにやらDACまではシリアル信号らしきものが来ているのですが、これがD/Aされていないようでした。しかし、この様子をつぶやいたら、すぐに情報を戴いて、DACの設定がなされていないことが解りました。





DACの設定


 上記のHxLの部分を設定していなかったのですから動くはずはありません(苦笑)。DACの設定を完了して、THROUGHプログラム(AD→ESP32→DA)を動かしてみます。





三角波をTHROUGHさせてみる


 上図は三角波を入力(下段の波形)して、DAC出力(上段)を見たものです。Fs=48kspsで実行しています。入力周波数は1kHzですが、上段の波形の「山」と「谷」の振幅の急変部を見ると、なまった感じがしますね。これは処理帯域が24kHzしか?無いための影響とOPAの動作速度の遅さの影響を受けていると思います。この時点ではOPAにNJM2732(Sr=0.2V/µS)を使っていたので、将来的には交換する予定でした。





系の残留雑音


 上図は、入力をGNDに短絡した場合の出力スペクトラムで、4kHzあたりにヒゲ?が見えますが、あまり大きなレベルではないので、このまま進むことにします。





2-トーンをTHROUGHさせてみる


 上図はいつも使っている高純度2-トーン信号を通過させた様子です。歪の発生も少なく問題もなさそうです。

 ここで、ExpressifのDSPライブラリを使い始めます。まずは、トーン信号の生成です。Fs=48kspsで12kHzのトーン信号をDSPで生成させます。これにはdsps_tone_gen_f32というライブラリを使います。見たところ、トーンの近傍の純度は全くピュアで何の問題もありません(しかし、この関数はこのあと問題が顕在化します)。





キャリア信号(12kHz)を生成させてみる


 このキャリアに、ADCからインプットした1kHzのシングルトーンを乗算してDSB変調をさせます。





DSB変調したスペクトラム


 このスペクトラムを見ると、簡単に70dB以上のキャリアサプレッションが得られます。これは何度も言いますが、「計算」で生成させているので、温度変化や、経時変化といった、アナログでは無視できない「外部要因」でキャリアサプレッションが変化することはありません。波形的には以下のようになります。





DSB波形


 48kspsなのでサンプルの刻みがよく見えますが、ま、それっぽい波形ですね。

 ということで、次はフィルタの作成に進みます。ツールとしてはいつもの三上さんのFIR作成ツールを用いて計算します。ESP32では最初のトライなので、簡単なものからやってみます。Fs=48ksps Taps=50 Fc=5kHzのFIRで計算してみます。ここで計算した係数はいつものごとく、ヘッダーファイルにコピペして、これをフィルター係数として、格納すべき配列にインクルードすれば実行できます。
 





三上アルゴリズムで計算したFIR





実際の特性1


 上図が実際に動作させたFIRの振幅特性です。分解能を上げて、表示点数を多く取ると、減衰域の振動の様子や、タップ数が少ないので、FIRといえど振幅が微小ですが波打っている様子が解ります。これで、三上さんの計算ツールがしっかり使えることが解りました。ここまで来ると先が見えてきます。

 さて、ここで調子にのって三上さんのツールの計算限界である500タップのフィルタについて動かしてみます。これは、どのあたりの規模のフィルタが実現できるのかを見るためです。この規模感によって、SDRに実装できる機能をだいたい見積もることができるはずです。以下に設計例とその実現の様子を示します。

 このフィルタはCFが12kHzで、0dB帯域?を2.4kHzに取ってでいる限り減衰域を急峻にさせたフィルタになります。これに先のDSB信号のキャリア周波数をオフセットさせて通過させれば、「フィルタタイプ」のSSBが一丁上がりというわけです。





500タップFIRの設計例





500タップFIRの実動作例


 上の動作例をみると、素晴らしい特性が実現出来ています。90dB近い減衰量と帯域内フラット、シェープファクタは1.1以下と凄いです。これで、FIRですから帯域内は位相フラットになります。Teensy4.0による16ビット固定小数点系に比べても、(当然ですが)良好な特性になりますね。流石32ビット浮動小数点系です。

 しかし、いくら特性が良くても、処理時間がかかってしまっては、実際のSDRを構成することはできません。なので、動作時間を測ってみることにします。以下の図にそれを示します。





実行時間の測定


 この図は上保さんのCodeの中のGPIO48ピンのモニタで、計算処理をしている間がハイで、ローレベルの時間が残余時間と解釈しています。処理が詰まってくると、サイクルに置けるハイ部分の時間が多くなってきて、ついには、ローレベルの時間が無くなると、処理が追いつかなくなるようです。

 500タップでハイの時間が全体の約40%位ですから、これから逆算すると2.5倍のタップ数である1250タップまで処理できそうな勢いです。これはクロックが240MHzであることを考えるとけっこう凄いです。昔、TIのDSPを弄っていた時は、32ビット浮動小数点処理でFs=48kspsの場合、850タップ位が限界だったようです。これで、5万円以上していたような。これが今では2000円でおつりがくるのですから、時代の変化を実感してしまいます。おっと脱線。


 さて、ここまでくると、複素BPFを使った変復調が見えてきます。いままで、TeensyやSTMで使ってきた、基礎となるLPFの係数を元に周波数シフトで複素BPF化する手法で、まずはトライします。以下はIFとして12kHzになるように設計した複素BPFのI側の特性です(もちろん振幅はQ側も同じ)。





IF=12kHzの複素BPFの振幅特性



 0dB帯域は2.4kHz、タップ数は370で計算してあります。タップ数を減少させたので、帯域外の減衰量が80dB弱で、減衰域の傾斜が500タップのものに比べて緩やかになっていますが、依然として十分な特性です。これをSIN/COSの2本用意すれば、振幅制限された90度位相差を持つI/Q信号が得られることになりますね。





IF=12kHzにおける90度位相差のI/Q信号





入力信号をIF=12kHz周辺でスイープしてみた


 最後に処理時間を示しておきます。








 これはFIRのタップ数を370×2本として、合計740タップ相当にして、この後の処理余裕を持たせています。上図から、このFIRの処理で全体の60%程度の時間を消費しているようです。残りの40%で変復調処理ができればいいか・・・と当時は思っていたのですが、大どんでん返しが待っていました。

 長くなってきたので、この後については来年に持ち越したいと思います。今年最後のUPになりました。今年もかなり独善的なHPでしたが、懲りずにご覧いただきありがとうございました。来年もよろしくお願い申し上げます。


 <SSBの送受信> 【2023.1.31】

 いや~~、年が明けたと思ったらあっという間に1月末です。なんとも時の経過の早いこと!こちらのまとめが追いつきません。

 さて、年末はライブラリで正弦波を生成したら、とんでもなく時間がかかって、これではあとのDSP処理がまったくできないじゃないか。。。。で終わってしまったのですが、今思うに当時は「こんな調子じゃ、このあと続けられるのか?」と思ってしまいました。しかし、心配は無用です。困ったときは、JF3HZBさんのブログを読むに限ります。なんと、超スマートな正弦波生成Codeがありました。

 任意の周波数の正弦波を発生させるとなると、ライブラリのように時間がかかる(らしい)のですが、信号処理上の工夫をすれば、テーブル参照するだけで、正弦波が出せます。Fs/4にキャリアを立てるとするならば、Fs毎に0,1,0,-1を繰り返し出力すればそれが(0~Fs/2の帯域で観測すれば)正弦波になります。90度位相をずらすには、同じタイミングで1,0,-1,0でOKです。これは、当たり前といえば当たり前なのですが、このあと信号処理を行う上で、キャリアと信号をFs毎に加減乗除する際に必要なキャリアの振幅は0か1しか計算上必要ないということなのですね。あくまでもキャリアをFs/4に取る場合に限りますが。

ということで、FS=48kHzで12kHzのキャリアを生成してみます。同時に90度位相差の信号も出せます。





12kHzの正弦波スペクトラム




90度位相差信号の生成


 見事にシングルトーンが生成されていますね。スプリアスの全くないきれいなスペクトラムです。90度位相差のSin/Cos信号もまったく問題ありません。 さて、ここまでくると、SSB化まで行ってみましょう。前回示した370タップの複素BPF(但しCFは音声帯域の1.5kHz)を使ってえいや!と作ります。構成についてはNucleo F446やTeensy 4.0で今までに何度も書いているので省略します。以下がその様子です。





SSB生成スペクトラム


 あれれ???なんだか逆サイドバンドが盛大に漏れています。-40dBって、アナログのへなちょこDBMでも、SSBフィルタを通した後ならばもっとましなレベルになるはずなのに、なんだかおかしい・・・です。ちょっと考えられないのですが、もしかしたらOPAのゲインアンバランスが原因かもと思って、以下に示すようにバランス調整回路をつけてみました。





入力OPAのDCオフセット分を調整できるように評価ボードを改造




入力OPAのDCオフセット調整で改善


 結果はというと、まぁ20dBくらいは改善できたのですが、-65dBくらいですから、DSPとしては全く満足できるレベルにありません。このあと、いろいろと足掻いたのですが、これ以上の改善ができないようでした。

 一応、DEMOについても確認してみました。12kHzのキャリアに対して、送信と同じ複素フィルタを用いて、DSP内QSD?を組んで、復調出力を見てみます。





11kHz(LSB)のシングルトーンが1kHzに変換(SSB検波)される様子


 11kHzのトーンを入力するとこのようにしっかりとLSB復調出力は1kHzになりまして、この場合、DSP内QSDとして気にしなければならないのは、イメージリジェクションです。なので、13kHz(USB)の同レベルの信号を突っ込んで、復調出力を見たのが以下の図です。





13kHz(USB)のシングルトーンが1kHzに変換(SSB検波)される様子



 このUSB復調出力と先のLSB復調出力のレベル差をみればイメージリジェクションレシオがわかります。その値は無調整で60dBになるので、この値であれば、ギリギリ問題は生じないと思われます。また、復調出力スペクトラムに致命的なSpur.も無く、いい感じじゃないでしょうか。というところで、Fs=48kspsにおける基本的な動作を確認したという塩梅になります。

 次はQSDをつなげて、あまり好きではない「ゼロIF方式」で様子を見ることにしましょう。「ゼロIF方式が好きではない」というのはQSDのアナログ安定度がイメージ受信特性をスポイルしてしまう理由からです。送信側ではこれが狭い帯域のイメージスプリアスになります。しかし、まぁ、新しいプラットフォームなので、「あくまで確認の意味で」実験してみました。





QSDとローカルOSC

Si5351(左)とSi570(右)の出力が利用可能
QSDは74CBTLV3253に高速ゲートのFFを追加して90度位相差を作っている
5351の位相差生成は利用しない


 ここで、Teensyを弄った時の実験系のうち、QSDとローカルOSCを引っ張り出してきました。QSDには高速シングルゲートの74相当のFFで1/4分周器がついたもので、ローカルOSCはSi570とSi5351が動かせるモノです。この時点ではI2S制御線切り替えで、570/5351を切り替えていますが、このあと共通のI2Cとし、いずれも制御できるようになっています。これはゼロIFからLow IF方式に変更する予定があるからです。いままで、あちこちで書いてきたので、詳細は省略します。

 この「RX」の特性を以下に示します。





SINADとImage Rejecttion特性


 これを見ると、HFから50MHzにかけて、感度もイメージ抑圧もいい感じに保たれていて、一瞬、これでもいいかな?なんて思ってしまいますね。ローカルの90度移相器に高速FFを使ったせいかもしれないと思ったのですが、これは、以前のTeensyの検討でも使っていたので、あとは、ESP32にした場合の計算精度の向上(Teensyの16ビット固定小数点からESP32の32ビット浮動小数点)が好影響?を及ぼしているのか?ちょっとそこまでは追えていません。但し、QSDのアナログバランスがずれると途端にイメージ抑圧は劣化するので、ここは大事をとって、Low IFとしておこうと思います。

 ここまでやるとゼロIF系でもAMの確認もしてみたくなります。AMの復調は√(Re^2+Im^2)でできますから、I/Q信号を同じ特性のBPF(ここではReal側と同じ特性でImage側も構成)を通過させて、先の演算を行えば、簡単にできてしまいます。30%変調波を用いて、先ほどのSINADで比較してみると7MHzの-100dBm時ではSINAD=16dBとSSBに比べて訳10dBの劣化になります。ま、そんなもんでしょうかねぇ。

 ここまでで、練習のためのゼロIFの検討は終わりにします。すでにJF3HZBさんが、Fs=96kspsで復調変調の例を示していただいていたので、早急にこちらの移植を進めることにします。まずは、Low-IFを24kHzに選んでSSBを発生させてみます。
 





キャリア24kHz時の1kHzシングルトーンLSBの発生




キャリア24kHz時のツートーンLSBの発生


 IF周波数が倍の24kHzになりました。こうなると、この信号を2nd IFに上げる場合にイメージ抑圧のためのIFフィルタに余裕が出てきます。Low IFの変調に関してはJF3HZBさんはCodeを公表されていないので、復調のCodeを参考にしながらPWZ流に組んでみました。アルゴリズムはHZBさんのオリジナルをそのまま使わせていただきます。復調側のCodeをよーくにらむと変調側もCodeを書くことができてしまいます。

 で、実際に測定されたのが上の特性というわけです。まずはシングルトーンの場合ですが、キャリア、逆サイドバンドともに十分減衰しています。これは気持ちがいいです。高い周波数にSpur.が見えますが、これはAnti Alias Filterを少しさぼっているので、おいおい抑圧するつもりです。また、2nd IFにアップコンバートしてXFでフィルタリングするつもりなので、問題ないと思っています。

 2-toneの場合はダイナミックレンジが6dB減るので、逆サイドが-73dBとなっていますが、まぁ、十分な値であると言えます。広域のノイズも同じようにゆくゆくは消えて無くなる算段があります。

 ちなみにHZBさんの変調回路を見ると複素ミクサーが使ってあってLow IFにおいてもI/Qの直交信号が得られるようになっています。この構成だと、このあとのミクサーに直交ミクサーが使えるので、第二IFにおけるイメージの抑圧に有利だということができます。興味があったので、このI/Q信号を以下に示します。





Low IF=24kHzにおける2-Tone信号のI/Q成分 




Low IF=24kHzにおける2-Tone信号のI/Q成分(拡大してみる) 


 青と赤がそれぞれI/Q成分を見ているわけですが、拡大写真をみると、どうやらLow IF帯で90度の位相差があることが見て取れます。複素ミクサーを通しているので当たり前といえば当たり前なのですが、実際に複素ミクサーは複素入力信号と複素Local信号を掛け算する機能なのですが、ブロック図をみると、複素数の掛け算そのものを実行していることがわかりますね。なんだか高校時代の数Ⅱだか?で習った通りのお話になるわけですね(脱線)。

 さて、TX側がうまくいったので、RXに移っていきましょう。いままでのFs=48kspsからHZBさんの96kspsで1/6のデシメーションを行う構成になります。構成とプログラムコードの例はHZBさんが極めてわかりやすい形にまとめて頂いたので、これは本当に大助かりで、勉強するための最良の教材ということができると思います。

 いままではTeensyでゼロIFのアナログ的不安定さに嫌気がさしていたので、今回はLow IFとXtal Filterを使ったダブルコンバージョン方式にすることに決めていました。なので、IFフィルタを作らなければなりません。しかし、このXFが結構難物でして、帯域はある程度広く、例えばFs=96kspsならば最低でも48kHz近辺は実現したいのですが、通常手にはいる市販の水晶発振子で作るXFではほとんど不可能です。

 かといって、LC Filterではまったくもって役不足(帯域外減衰量の観点)なので、やっぱりXFでどこまでできるか考えないといけないでしょう。このIFフィルタの目的は、Low IF=24kHzを採用することによって不可避的な、RXにおいては48kHz離れのイメージ受信の抑圧、TXにおいても同じく48kHz離れのイメージスプリアスの撲滅です。

 この大事なIFフィルタですが、なんだかんだ言って特性を担保するのはXtal Filterに頼らざるを得ません。しかし、作りやすいラダー型フィルタだと直列/並列共振周波数差があまり離れたものは、特注品以外では得ることができないので、通過帯域幅に関しては妥協せざるを得ないことになります。そうは言っても「受信機」を名乗るのであれば、主帯域制限の前の通過帯域は採用している通信システムにおいて最小であるべきで、何も考えずにワイドバンドにしてしまうと、いろいろな妨害に弱くなるので、ま、こんな帯域でも良しとしましょうか(苦笑)。

 ということで、部品箱の水晶発振子をざっと見渡して、直並列共振周波数をあたってみると、13.4MHzの水晶の直並列共振周波数差が35kHz程度あることがわかりました。これならこの半分程度の帯域(~18kHz)のフィルタを作ることが可能だと判断しました。
 





第一IFフィルタに使う予定のラダー型XF


 このXFは比較的直並列共振周波数をそろえたクリスタルを選別して、ラダーで作ったのですが、振幅特性の「肩特性?」の向上のために両端のクリスタルは並列にしてあります。また、ここは「ギリギリ」特性を詰めるために各エレメントのキャパシタは微調整の可能なトリマコンデンサとしています。このトリマは秋月で売っているもので十分で、けっこうQは高いようです。もちろん、昔のQが1000を超えるような良質なセラミックトリマーには全く及びませんが、XFを作るには「なんとか妥協して」使用可能です。





振幅特性




減衰域特性


 まずは通過帯域特性ですが、帯域を目いっぱい広げようとチューンしてみました。その分、低い周波数域の減衰がスポイルされるように見えますが、イメージ抑圧のためにはアッパーローカルにしますので、あまり気にすることはないでしょう。48kHz離れだと、すでに70dBもの減衰が得られているので、まったく問題はありません。これだけ急峻だと、帯域内の位相特性もきになりますが、帯域が18kHzあるうちの中心のたかだか±3kHzていどの部分しか変復調には使わないのであまり位相の乱れには気を遣う必要はないと思います(これが±3kHzの通過帯域のXFだと大いに問題となるかもしれませんが)。

 48kHz離れも気になりますが、送信時はCodecのオーバーサンプル周波数の384kHz離れのスプリアスも気になりますのでこの点の減衰量も測っておきました(上記2枚目)。もともとここはCodecのアンチエイリアスフィルタで50dBくらいは落ちているので、このフィルタでさらに50dB以上の減衰が得られれば、まったく問題になることはないでしょう。

 調子にのって同じ中心周波数の通過帯域が8kHzのラダーフィルタも作って見ました。以下に示しますが、けっこういい特性が得られています。最終的に使うかどうかは、今後の検討次第ですね。





帯域8kHzのラダー型XFの様子




振幅特性


 さて、そろそろTRXとしてまとめていく方法を考えないといけません。実験中に各機能モジュールが宙ぶらりんだと、ショート事故の起きる確率が高くなるので、モジュールを固定する手立てを考えたほうがよさそうです。そこで以前にTeensy4.0で不安定なSDRもどきを作っていた時の手法を踏襲することにします。





実験基板を準備してみる




ちょっと拡大


 こんな感じでLow IFのDSPにQSDやQSE、IFフィルタ、周波数シンセサイザ等を固定して行きます。全面アース基板に固定していく方法なので、高周波特性に関しては問題が生じにくいと思います。問題があるとすればシールドでしょうが、まぁ、RXの場合、高いゲインがあるので、シールド程度ではスプリアスを受けるときは受けますし、主なものはシンセサイザ由来のものが多いでしょうから、あまり厳密にシールドしても徒労に終わることも少なくありません。TXの場合、スプリアス防止という面ではシールドはほとんど意味をなしません。シンセサイザ由来とか、減衰量の足りないBPF由来とか、シールドしてもダメなケースが多いように思います。まぁ、効果があるとすればAMPの発振抑圧でしょうね。

 さてと、長くなりました。ここらで一息つきたいと思います。このあたりまで来るとCodeの「動き」も何となくわかってきたので、まだまだLow IFにおいてですが、送受信切り替えをやってみました。DSPの場合の送信/受信の処理を切り替えるときには、処理していたデータが全くの無関係なデータに切り替わるので、その時に発散してしまわないかと素人的な心配がありました。





受信から送信に切り替え




送信から受信に切り替え


 上図は送受信切り替え時の信号の変化です。受信は23kHzシングルトーンを受信していて、送信側は2トーン(1kHz/1.8kHz)をLow IF=24kHzのLSBを生成して見ています。いずれの図も黄色の送受切り替え信号をESP32が取り込んで(チャタリングキャンセルをやっていないので少しバタバタしていますが)、受信→送信、あるいは送信→受信にプログラムの動作の流れを切り替えて見た様子です。いきなり、処理中のデータがぶっちぎられて新しい信号が入ってきて、それがディジタルフィルタ類を一巡して出力される様子を見ています。

 まず、送受信ともに切り替え時間は20mS前後ですので、この時間そのものは全く問題になることはないでしょう。しかし、受信→送信時は信号のバタつきは無いようですが、送信→受信時は激しく振幅がバタついてしまいます。ほおっておくと「キン!」という感じに聞こえるので、これについては復調パスをしばらくミュートしておく処理が必要になっりますね。ま、これはそんなにむつかしくないので、あとでゆっくりやることとします。

 さて、長くなるので、今回はこの辺で切り上げたいと思います。


<IFフィルタと送信系> 【2023.2.28】

 さて続きを見ていきましょう。前回までに送信ができるようになって、IF帯まで信号がでるようになりました。この状態のSSBのスペクトラムと近傍のスプリアスを見ておきましょう。





2-Tone波形(IF出力)




近傍スプリアス


 2-Tone波形に関しては逆サイド/キャリアの漏れもなく良好な波形が得られます。アナログBMだと一時的には良好な波形が得られても、長期安定性に関しては保障ができません。ディジタル処理ならではの利点ですね。

 近傍のスプリアスに関しては、DACのオーバーサンプリングのクロックである384kHz離れの漏れを見てみましたが、IFフィルタの帯域外減衰量が大きいので、まったく漏洩していません。安心できるシグナルソースに仕上がっています。





これから使うかもしれないモジュール達


 上図はこのあとTRXに転用できるかもしれないモジュール達です。上段左から、AD9952DDS(ローカルOSC)、Arduino(RE制御の高速化のために、ProMiniを交換する?)、AD9851DDS(あれ?何に使うつもりだったのか忘れた:笑)、中段左からBGA601AMP(プリドライバ?)、24MHzのプラグインBPF、下段左から、SL6440ハイレベルミクサー(TRXで切り替え使用?)RD16HHF1(ドライバー)です。他の製作の余りや当面使わないモジュールにここで活躍してもらおうと思います。





20Wリニアアンプ


 当時を振り返ると、これ(↑)はPAとして別筐体で流用しようかと考えていたようです。まだ、全体をどうまとめるか、あまり考えていなかったので、「有りもの」でなんとか済まそうと思っていました。肝心なSDR本体をどうパッケージングするかも決まっていなかったの、暫定的にこんな感じ・・・と思っていたようです。今の状況と比べるとだいぶ異なっていることに気が付きます。 

 さて、これから先に進めるにはIFから、各ハムバンドに周波数変換するミクサーユニットとBPFが必要になります。





ミクサー、BPFユニット


 これをとりあえず配置してみました。真ん中に鎮座SL6440なるハイレベルミクサーは太古の昔から高IP、比較的高ゲインで重宝されてきました。PWZもSDR-3の周波数変換部に採用した実があり、今回も採用することにします。確か、このユニットはその時に試作したユニットの余剰品だったと思います。これを送受ともに使用します。入出力にリレーを配して、信号の切り替えを行います。

 一番下にはμPC1677Cの送信用アンプ(ミクサー前)を用意していますが、その後の検討で、これは不要なことがわかりました。なので、現在は使っていません。

 最上段はプラグイン式のBPFを準備してあります。プラグインの接点部分は5ピンのピンヘッダー/ソケットを使っています。5ピンのうち真ん中のピンを信号に、その他をGNDに配置すると、結構特性が担保できます。100MHzくらいまでは神経質にならなければ、十分利用可能です。

 このあとは、アナログ送受信系を構築していくわけですが、この時点ではバンド拡張はどこまで行うか決めていなかったために、とりあえず特性評価のプラットフォームだけは作っておいたというところです。この図では、24MHzのユニットが刺さっていて、こんな感じで試験します。

 さて、まずは一番最初に7MHzのBPFを用いて送受信特性を見てみます。





7MHzのBPFでチェックの様子

 最初はミクサーのIIP3を見ます。今回は変換利得重視モードで回路を組んでいるので利得は10dBとなっています。この状態で入力が7MHz帯の-10dBm×2の2-Toneを入れてIF周波数の13.4MHzに周波数変換させました。





SL6440CのIIP3


 IM3は-64dBですから、IIP3は22dBmとなって、パッシブDBMで比較するなら最良の値です。利得が10dBあることを勘案すると使いやすいICだと思います。利得が0dB近辺で良ければ、IIP3は30dBm以上が期待できますが、今回の製作ではこの特性に重点を置いているわけではないので、構成の簡素化(AMPが一段不要になる)を重視して、これで行くことにします。

 次は送信側です。SWを切り替えて、BPFを挿入しますが、まずはその特性です。





直列共振型3段BPFの近傍特性




直列共振型3段BPFの広帯域特性


 このBPFで送信スプリアスを見たのが下の図です。13.4MHzのIF信号(キャリア)をDSPとQSEで発生させて、SL6440Cミクサーに入力します。





ミクサーの送信スプリアス


 これを見るとワイドスパンで-70dB以下の特性が得られており、まったく問題がありません。但し、ここは比較的スプリアスの少ないSi570でローカルを構成していたので、Si5331とかのスプリアス満載のローカルを使う場合は、相当に注意しないといけないでしょう。また、逆に先に示したようにAD9952DDSであればかなり楽になるとは思いますが。

 さて、7MHzならばIF周波数は13.4MHzでもなんら問題がないのですが、14MHz帯に出るには無理があります。IFと送受信周波数が近すぎて、14MHz帯を送信しているつもりが、IF信号が「スプリアス」として残留しちまうという情けない形になりそうです。また、28MHzもIF周波数×2が26.8MHzになるので、これもまた分離がむつかしいという状況です。さらには50MHz帯はIF×4が53.6MHzとなって、バンド内スプリアスと相なってしまいます。

 これは、HF~50MHzのマルチバンドを狙う場合は、IF周波数は13.4MHz以外を用意する必要がありそうです。ということで、またまた手持ちの水晶から直列-並列共振周波数差の大きなものを選択してみました。

 確か秋月で購入した20MHzの水晶でしたが、これが直列-並列共振周波数差が40KHz近くあるので、これはいい塩梅だと飛びつきました。これを使って、ぎりぎり特性を詰めて作ったIFフィルタが以下のブツです。





20MHzのIFフィルタ


 入出力の整合のLマッチにジャンクのエアトリマーを使ったり、段間のトリマは大型のセラミックトリマを使ったり、かなり気を使ったIFフィルタです。調整はもちろんTGやVNAがないとなかなか難しいですね。中心周波数の上側周波数領域の減衰と帯域内平坦さをできる限り詰めた振幅特性が以下の図になります。





 20MHzのIFフィルタの帯域内特性




帯域外特性

副共振応答が半端ないな---!



 通過帯域をできる限り拡大したので、対域外の減衰特性がかなりいびつ(下側周波数の減衰量が少ない)になっているのと、上側周波数における副共振がかなり大きくなって(これは水晶の素性か)しまっています。DSPの処理する24KHzから20MHzにアップさせるにはSi5351を使うので、スプリアスが残留しないか気になってしまうところではあります。±384kHzは甘くなって-40dB程度でしたが、まぁ問題ないでしょう、もともと-50dBとかのスプリアス量ですから。

 さて、このIFフィルタは13.4MHzとバンドに応じて切り替えて使わないといけません。リレーでやれば簡単ですが、今回はアナログスイッチでやってみました。TRXで信号経路を切り替える必要があるために、SPDTアナログスイッチを背中合わせにつないで、TX/RXを切り替えた信号にして、さらには13.4MHzと20MMHzのIFフィルタを切り替えることができるように、フィルタの両端に同じスイッチモジュール?を配置します。下の図がそれです。





送受切り替え&IFフィルタ切り替えアナログSWの様子

 上図の左の二本の同軸がQSE(TX)/QSD(RX)に繋がり、右が2本のIFフィルタに繋がっています。アナログSWはいつものSN74LVC1G3157です。この回路はいろいろなところで使いそうな気がするので、基板を作っておいてもいいかなぁといつも思うのですが、いつも手がつかずにいます。どこかで取り組まないと、やがては作るモノが無くなって、結果的に使う場所がなくなってしまう気がする(笑)。





IFフィルタとアナログSWを実装してみる


 こんな感じにIFフィルタと切り替えSWを実装します。あとは、バンドに応じてIFフィルタを切り替えるように制御すればOKです。いまのところ、13.4MHzのIFフィルタを使うバンドは7/18/21/24MHz帯で、20MHzIFフィルタを使うバンドは14/28/50MHz帯を想定しています。ここまでできたので、早速14MHzの動作を見てみます。





14MHzのBPFをTRXミクサーに挿入する


 上図のようにTRXミクサーに14MHzの直列共振型BPFを挿入して様子を見ておきます。以下は2-Tone信号、近傍スプリアス、広帯域スプリアスの様子です。





2-Toneで変調したUSB信号スペクトラム




近傍スプリアス




ワイドスパンにおけるスプリアス


 これを見ると、2-Toneのスペクトラムのキャリサプとサイドサプが-70dB以下になって「いない」のが何故なのかわかりませんが、おいおい再試験しておきます。スプリアス特性については、十分良好と考えていいと思います。

 このように、IFフィルタを二系統用意するという離れ業で、各種のスプリアス発生を切り抜けているのですが、もちろん、例えば9MHzといった周波数である程度の帯域幅(20kHz以上)を有するクリスタルフィルタが入手できれば、IF周波数は1種類でいいと思います。しかし、まぁ、望むべくもないので、手持ちの部品を総動員して乗り切っていくというのが当面の戦術になりますかね(ふぅ)。

 と、ここまでで一応TXの構成法については目途が立ちそうなので少し横道に逸れます(が重要な内容です)。実は、いままで弄ってきたIFフィルタはクリスタルフィルタではありますが、セラミックトリマーコンデンサでカリカリにチューンしてあります。しかし、この特性が、実際のTRXで実現できているかは、若干怪しいところがあります。

 というのも、TG+スペアナでは50Ωのイメージ成分ゼロの整合状態ですが、実際のTRXの場合はそうは上手く行きません。これで、帯域内の振幅/位相特性は「うねって」いる可能性があります。実装状態では、通過帯域内の中心周波数より低い部分の振幅は「盛り上がって」いるように見えます(これは以降のバンドスコープでわかってきました)。なので、TRXへの実装状態でIFフィルタを調整したいものです。





実装時IFフィルタの特性測定系


 上図はIFフィルタをTRXに実装した状態で振幅特性を測定するしかけです。TRXではIFフィルタの前後にミクサーがあるために、TGで直に測定することができません。TRXの外部にミクサー2組を用意して、TG出力の周波数をスペアナで測定できる周波数に戻してやるという仕掛けです。

 昔、ここで、真空管機のIFフィルタを実装状態でその特性を測ったことがあり、実績のある方法です。但し、この時はミクサーがDUT内に一個だったので、比較的楽に測定できましたが、今回はどうなるか・・・・。

 さて、話変わって、手慰みでAMも見ておくことにします。深い変調が楽に実現できて、歪も少ないきれいなAM波形が得られます。この信号のリニアな増幅は気を使って骨が折れるのですが、大きな変調器が必要無いことを考えると、小電力変調の採用も大きなメリットがありますね。





AM変調波形





AM変調スペクトラム


(続く)