Teensy4.xによるSD-TRX   【2022.7.6】



 Teensyなるモジュールを最初に見つけたのは2021年の夏の事でした。当時は、NucleoF446なるArm4コアの入ったチップでSDRもどきを弄っていました。これで、基本的な作業はできるようになったのですが、A/D D/Aが12ビットだったので、D-rangeに関しては満足していませんでした。浮動小数点演算がDSP処理においてかなり実用的に扱えたのは大きなメリットではありましたが、以前に弄っていた本物のDSPに比べると、妥協せざるを得ないところが多く、「これで練習を終えたら、16bit以上が扱える処理チップが欲しいなぁ」と漠然と考えていたのです。

 そんな時に目に留まったのがTeensy4.Xでした。これはなんとArm7コアでFPUも搭載されており、驚くべきはクロックが600MHzと圧倒的なこと(不足ならオーバークロックも可能)でした。OSはArduinoの拡張版Teensyduinoで、最近やっと少し慣れてきたC/C++をベースにしているので、とっつきやすいことこの上無しです。似たようなモジュールではラズパイもPicoの登場で組み込み用にはかなり魅力が増してきましたが、私は、もうお腹いっぱいで、当分は浮気する余裕がありません。

 良く調べてみると、Teensy3.Xはだいぶ以前から海外のSDR界隈では使われていたようですが、日本においてはそういったアクティビティが見当たらなくて、あまりポピュラーでは無かったようです。そこにきて、Teensy4.Xは大幅な能力強化がなされたので、やはり海外ではありますが、本格的なSDRであるT41-EPにも採用されるに至ってSDRとしては確固たる位置を占めたように思います。

 能書きはさておいて、私も、懸案だった16ビットの少し高速な処理系が手に入るというので、喜々としてこれを弄り始めました。その経緯を少しづつ纏めておきたいと思います。





Teensy4.0の外観


 Teensy4.xはPJRCというLLC(有限責任会社)から発売されている、ARM Cortex-M7が搭載されたモジュールで、特に4.0の方は非常に小型です。にもかかわらずArduino ProMini以上Nano以下の大きさで、FPU搭載のARM7が600MHzで動くというのですから、破格の代物です。趣味で弄るには「かなりの上玉」と言って良いですね。





Teensy4.0のパフォーマンス


 上図はTeensy一族のベンチマークテストの様子でPJRCのサイトからの転用です。Teensy4.0はArduino Mega(16MHz?)の330倍ものパフォーマンスがあるとしています。Mega/Nano/UnoはAVRですから殆ど同じと考えると、とんでもないスピードを有していることになりますね。語長もクロックも比較にならないので、Teensy4.0は信号処理を余裕を持って実行することができます。これならば、しばらくの間、DSP処理を楽しむプラットフォームとして遊べると思っています。

 実行速度に関して言えば、このTeensyduinoなるOSですが、標準でOver Clockをサポートしています。これは画期的なことで、クロックの変化に応じてマイコン内部処理のタイミングを合わせて、固定のタイミングの処理(Serial通信処理とか)もきっちり合わせていくようなので、動作が確実なようです。TeensydionoのプルダウンメニューのCPU速度のタグを見ると、600MHzが標準で、720,816,912,960,1008MHzが可能とあります。912MHz以上はCooling処理が必要とかいてありますが、70%近いOver Clockができるなんて、素敵じゃないですか。最高のスピードだとMegaの554倍ものスピードが出るということですか。

 さて、このTeensy4.XをDSP処理させるには、当然のことながらA/DとD/Aが必要です。最初は不慣れなので、出来合いのシールドというかボードを求めました。PJRCの用意したボードはSGTL5000というCODECを使っており16ビットの入出力が可能です。





Audio Shield


 このボードがマイク、Line入力とLine出力を有しています。また、音源保存用のSDメモリーI/Oも搭載されているので、何かの応用に使えるかもしれません。Teensy4.0との結合は長いピンを有するピンソケットを用いて、高床式?にTeensy4.0をAudioボードの上側で着脱可能なようにしてみました。これが以下の図です。





Audio Shieldの基板への取付


 使った基板は秋月で売ってる両面スルーホール基板です。 実は、最初がごく少数のI/Oが付けばいいやと思っていたので、Teensyduinoにある評価用スケッチを動作させるための入力として、3つのプッシュボタンSWと2つのVRを付けた両面基板をに先のスルーホール基板を乗せてみました。





Teensy評価用ボードの様子


 ついでに、そのうち使うだろうと考えられる一番高い可能性のあるTFT LCD(2.8inch ILI9341)も配置してあります。この程度のペリフェラルがあれば、とっかかりには十分でしょう。これで、まずは動作をさせてみます。




DSBとランダムノイズ


 上図はFs=44.1kspsで、ためしに11kHzのキャリアを1kHzのトーンでDSB変調した波形を作ってみます。いずれの信号もDSP内部で生成して乗算し出力しただけです。キャリアは全く洩れませんから、10/12kHzの2-Tone波形と等価ということになりますね。下側の波形はランダムな数値を発生させたものです。それっぽく出力されています。さて、次はフィルタの設計ができるようにしないといけません。





T-Filterによる簡易なフィルタの設計例


 FIRフィルタの係数を計算するツールはあまたあります。三上さんのツールもかなり有効なツールです。今回はこの界隈では良く使われているT-Filterというツールを使ってみることにします。もう、一年近く前の事なのでどういう経緯で見つけたのか失念しましたが、当時は三上さんツール以外にも計算ツールがないか探していて見つけたようです。これ以外にもIowa大学の強力なツール(そのうち紹介します)とかもありで、FIRの計算は随分楽になりました。

 おっと横道に逸れました。上記のフィルタは特に目的も無く、とにかく、計算した結果が実際の特性に反映されるかどうか確認するための練習材料です。なのでTap数も20と、極めて少ないブロードなフィルタです。このツールで DESIGN FILTERボタンを押すと、右側に(図では非表示)に係数がずらーっと書き出されるので、それをFIRの係数に埋め込めば終了です。

 で、Teensy4.0 with Audio ShieldをAPB-3のスカラーネットアナ機能で特性確認したのが以下の図です。





APB-3による確認


 これを見ると設計通り特性が実現できていることが解ります。これで、Teensy4を使う準備が出来ました。

 次にいつもの位相器を作ってみることにします。100TapsのI/Q間90度位相差を生じる位相器で、たしか帯域は11kHz±5kHz位に決めたと思います。これに11kHzの信号を突っ込んで出力信号に90度位相差を確認しています。





90度位相差信号の生成


 ここまでは簡単なので、ふんふんと進みます。しかしながら、高次のFIRができないと、SSBのTRXを作ることはできません。なので、以前のNucleo F446ボードで弄っていた、帯域内90度位相差のある複素BPFを作ってみます。以前とやりかたは同じです。0-1.2kHzのLPFのデータを中心周波数が11kHzの複素BPFに変換します。こうしてできたI/QのBPFを「カスケード」に繋いでF特を測ったのが以下の図です。





複素BPFのカスケード接続


 実は、わざわざこんなことをするのは、400次相当のFIRのD-rangeを見たかったからです。一応80dB以上取れているように見えますが、以前弄っていたTIのDSPに比べて、D-rangeは10dB位悪いような感じです。理想を追及するとキリがないので、最初はこの程度から進めて見ることにします。


<ベースバンド処理の復調器> 【2022.7.30】

 まずは、Teensy を弄るうえで、極めて便利なAudio System Design Toolについて見ていきます。といっても、詳しくはPJRCのサイトを参照してみてください。ここでうだうだ書くよりは、オリジナルサイトの説明を見た方がいいでしょう。一言でいうと、いろいろな機能ブロック間の結線を描画するだけで、DSPの動作コードを生成してくれるという優れモノです。コードをしこしこ書くのに比べると、動作が直感的に解って、間違いも少ないのでおすすめです。ただし、用意される機能ブロックに制限があるのでGNU Radioのように、「やりたいことは殆どできる」というレベルでもないのですが、ま、DSPの入門用「には」格好のツールと言えるでしょう。しかしながら、簡単なSD-TRXくらいなら、十分に実現できるので、まずは、これの活用を前提に進めていきたいと思います。





ベースバンドRXの例


 上図は、QSD(Quadrature Sampling Detecter)なる直交復調器の出力から得られるI/Q信号を入力してSSB復調する機能を示しています。QSDからのI/Q信号はI2S2で、A/D変換されてからTeensyに取り込まれ、その後、二本のFIRフィルタを通過後、Mixer1で合成(加算)されます。その出力をがI2S1でD/A変換されてAudio信号が復調されることになります。この図をExportすると下記のようなコードが得られます。

AudioInputI2S i2s2; //xy=177,511
AudioFilterFIR myFilterL; //xy=374,387
AudioFilterFIR myFilterR; //xy=376,636
AudioMixer4 mixer1; //xy=587,512
AudioOutputI2S i2s1; //xy=781,518
AudioConnection patchCord1(i2s2, 0, myFilterL, 0);
AudioConnection patchCord2(i2s2, 1, myFilterR, 0);
AudioConnection patchCord3(myFilterL, 0, mixer1, 0);
AudioConnection patchCord4(myFilterR, 0, mixer1, 3);
AudioConnection patchCord5(mixer1, 0, i2s1, 0);

 これをスケッチのSetup Loop 以外の場所に記述しておけば所定の動作を行うことができます。このあたりは、Teensyのスケッチ例を見ながら、自分なりに弄り込んでいけばなんとなく解るようになります。





QSD(FST3253)の様子

なんだか初段OPAがソケットに入っていない写真だなぁ(苦笑)


 さて、次に上図のようなQSDを作り、Teensy4.0につなげて簡単な受信機を作ってみることにします。このQSDはお世話になっているJF3HZB上保さんの回路図をそっくりコピーさせていただきました。FST3253を使ったQSDの使用法を結構調べたのですが、全てをバランス処理している見事な回路です。他のアンバランス処理の回路に比べて、高性能な予感がしますね。

 オリジナルから変更したのは初段のオペアンプです。ここのノイズ特性は感度に直結しますので、できる限りLow Noiseな石を使いたいものです。オリジナルの回路では、OPA2134が使われていて、私も調達しようと思ったのですが在庫が無く、いろいろ調べた結果、5nV/√Hz以下の入力換算雑音で、さらには5Vで動作するものを探しました。NJM2068、LM4562、LT6231とかが目に入ったので、これらを入手しました。まずは、一番安直なNJM2068を使います。これは、大昔のCQに基板が付属していたQSDにも使われた物で、データシート上かえらは、とってもこの用途に使うには役不足と思っていたのですが、結構いい感じで動作しています。 

 さて、さっそくSSBのRXというか復調器を作ってみます。QSDは上記のもの、直交発振器はここで作ったものを用いて、Teensy4.0のAudio Shield経由でI/Q信号を取り込みます。そのあとは上記のコードで復調処理をするだけのお話です。いままで、何度も実験してきたので、これは簡単に進みます。ちなみにコードの中のMyFilterL/Rというのは1.4kHzのLPFからこの周波数を中心に複素BPF化したI/Qチャネル(±45度の位相差を生成)のFIRフィルタです。タップ数はそれぞれ200となります。前回の最後で紹介したFIRをカスケードではなくI/Qチャネルに用いたものです(但し今回のBPFはLPFからのシフト周波数は前回の11kHzではなくて1.4kHz)。以下にその受信機?復調器?の感度特性を見てみます。周波数は7MHzです。





SINAD特性


 上図は復調されるSSB信号のSINAD(=(S+N+D)/(N+D))を見たものです。一応Teensy内部の処理は16ビットなので、かなり感度がいいという印象です。この図の中で-100dBm入力時のSINADで見ると、いま改修中のメイン機の30dBには及ばないものの、26dBとかなりの高感度を得ています。ちっぽけなこんな基板から、大がかりなメイン機にあまりそん色の無い感度が得られるのは、すごいことだと思います。

 図中の紫の×印は自作のある機器で、以前から感度わりーだろうなぁと思いながら怖くて測定していなかったブツ(笑)です。結果は思った通りで、耳SINADを測定器で確認する羽目になりました。実は、今年の初めころ、支那のµSDXもどきの完成品を入手したのですが(FBのグループでは、これはパチモンの可能性が高いぞーーーとご指摘を受けてしまいました(笑)、その感度特性を下記に乗せておきます。





支那µSDX




支那µSDXのSINAD特性


 何せ支那製ですから、トンデモ物なのでしょう。-100dBmの入力時SINADは12dB近辺です。µSDXはもともA/Dと内部処理が12ビットなので、16ビットA/Dに比べてそれだけでもダイナミックレンジが24dBも低いことを勘案すると、処理の工夫(デシメーション利得等)で、相当に頑張っているのかな?と思います。ただ、勉強不足なのかこのような感度データを殆ど見たことがないので、「純正の」µSDXはどうなのかについては、極めて興味のあるところです。

 おっと脱線してしまいました。本題に戻りましょう。先ほどのSINAD特性を見ると、今回のQSD+Teesy4.0のSDRのSINAD=26dB@-100dBmとなります。アンテナ入力信号と復調信号の関係は線形なので、入力のS/NもほぼSINADに等しいはずです。なので、Nfを簡易的に求めると

-100(Input)-26(SINAD)-35(2.8kBand Noise)-(-174(KTB))=13 (dB)

 となって、そこそこの値になっていることが解ります。7MHzではNfが10dB程度ならば、外来ノイズの方がはるかに大きいので、まったく問題ないレベルと言えます。

 このように、RFAMP無しにこの感度特性が得られるのはかなりびっくりしました。OPAをローノイズのものに変えれば、メイン来機並みの感度が得られるということじゃないですか!

 これで気をよくしたので、その他の受信特性も測定してみることにしました。まずは、こういった希望周波数からゼロIFにダウンコンバートするRXの一番の問題点であるイメージ受信について考えてみます。そうです、ダイレクトコンバージョンのDSB受信機を作って7MHzとかを覗くと、混んでいる時は、LSBを受信しているつもりが、逆サイドの妨害を希望波と同じレベルで受けてしまって実用にならない・・・て奴ですね。これがどの程度抑圧できているのか見ることにします。





希望波受信時の復調出力




逆サイド信号受信時の復調出力


 上図は-70dBmの入力を希望波としてLSB受信した場合の復調出力と、レベルは同じでSSGの信号をUSBに移して逆サイドバンドを受信した場合の復調出力の様子です。この復調信号のレベル差が逆サイド信号抑圧ということになりますね。その値は59dBが得られています。7MHz帯ではQSDのバランスも良く、比較的良好な値ですが、じつは、この特性は受信周波数が上がっていくと、どんどん劣化します。原因はQSDのバランス以外にも、直交発振器の位相精度もあるようで、Si5351から90度位相差を生成する方法だと、HFハイバンドではかなり厳しい値になってしまいます。ちなみに、先の支那製µSDRの特性は以下のようです。





支那製µSDRの逆サイド抑圧特性


 この図は7/14MHzで希望信号と逆サイド信号を復調した時に同じ復調レベルになる受信信号強度「差」を見ています。先の方法と基本的には同じ測定です。復調信号レベルを一定にするか、受信信号レベルを一定にするかの違いで、いずれの方法でも、逆サイド抑圧量が測れます。上図を見ると、その値は20dB程度になっています。これはどんな感じかというと、希望波受信時、希望波と同じレベルの逆サイド信号があった場合、妨害としては、希望波の1/10の電圧レベルの妨害波が生成されまっせ(当然モガモガ聞こえるでしょう)ということです。なので、支那µSDRのRX部はあまり褒められた特性ではありませんね・・・・ということになりそうです。

 さて、ここまで来たら、測れる特性は確認しておきましょう。次はRXのIIP3を見てみます。今回はQSDにFST3253(5V)を使っていて、RFアンプがありませんから、かなりリニアリティは良好なのではないかと期待してしまいます。受信機のIIP3は以前に測定したことがありまして、その時に使用した実験用発振器が2台ありますので、これを使ってみます。





IIP3測定用治具の様子


 この治具は2台のXtal発振器(シールドケース内)をバッファリングしてアイソレーションを稼ぎ、ハイブリッドコンバイナーで結合しています。これでも、RXの感度がいいものですから、測定系の発生するIMD3が測定誤差要因になってしまいますが、まずはこれを用いて、QSDに繋ぎこんで見ます。このRXは発振器の周波数間隔だけどちらかの発振器周波数から離調して受信します。そこに、QSD起因のIMD3が発生するからです。





FST3253のIIP3特性


 AF復調出力には上図のように受信入力が低い領域(例えば-40dBm以下の領域)では測定系の生成するIMD3を素直に受信してしまいますので、RXのAF復調出力は入力の2-tone信号にリニアに反応します。入力の2-tone信号が大きくなってくると、測定系で発生する歪成分(IMD3)に加えて、FST3253の発生する3次歪成分が加わってきます。これが入力レベルで-30~-10dBmの領域で、この傾きは入力1増に対して3増となります。FST3253のIMD3がメジャーに領域を外挿して信号の外挿との交点を取れば、そこのX軸の値が入力換算3次インターセプトポイント(IIP3)ということになります。図からは、FST3253のIIP3は20dBm程度と測定されました。

 この値は、ダイオードDBMと比較するとそれより5~10dB高い値なので、トップアンプを使わないとすると、十分実用的な値であると言えます。このように、感度、逆サイド抑圧、IIP3と見てきて、けっこうFST3253をしゃぶってみましたが、ウルサガタにも十分に「使えるデバイス」であることが明かになりました。


<受信系の最適化> 【2022.8.21】

 さて、前回までに、SSBの受信ができるところまで来ました。直交DEMOのFST3253とTeensy4.0の組み合わせはかなりのポテンシャルを有することが解りました。しかしながら、ネット上では、FST3253はハイバンドになると感度が劣化するという定説があります。µSDXの情報を集めていると、その定説は確からしいのですが、解らないのは「一体どの程度劣化するんだ?」ということでした。FST3253の素子由来なのか、直交発振器として用いるSi5351の位相精度なのかも、「あまり良く解りません」でした。なので、実際にそのあたりを「つついて」見たいと思うのは、私にとって極めて自然な成り行きです。

 おっと、また、能書きが長くなるので、先に進めます。その前に、このRXですが、TeensyのAudio Shieldの出力には多重帰還型のアナログフィルタを挿入してありましたので、それ込みで復調時のベースバンドのバンドパス特性を取得してみました。以下がその図です。




ベースバンド復調帯域特性


 もともと、複素BPFの帯域は2.8kHzくらいに計算していたので、2.8kHz@-3dBの2次のアクティブLPFをかました特性となります。アナログなので、帯域内も少し減衰が起きていてちょっといびつですが、実際上(聴感上)まったく問題はありません。XFの整合を「こかす」ととんでもないリプルが出ますが、それを放置するのに比べればこの程度の減衰はまったくノープロブレムです(大笑)。さーて、この状況で、まずはヘルスチェックです。7~21MHzの3バンドで入力信号対復調SINAD特性を見てみます。




バンド毎の復調SINAD特性


 上図より、受信周波数があがるに連れて、感度劣化が始まることになります。14MHzでは7MHzに比べて殆ど劣化しませんが21MHzになると3~4dB程度劣化するようですね。この先がどうなるのかについては興味が尽きないのですが、それは、以下の周波数構成の変更後に片付けることにしたいと思います。

 というのも、ダイレクトコンバージョンのごとくDCから受信帯域になる(もっとも複素BPFで300Hz以下は減衰するが)と、ローカルの純度の問題で妨害が発生する可能性から、少し復調帯域をオフセットさせておこうと考えたのです。すなわち、+/-45度の位相差をもつ複素BPFではなく、IF=11kHzのBPFで帯域制限してやろうと考えたのです。ローカル純度は11kHzも離れれば-100dBC/Hz程度は楽勝ですから、まったく気にする必要はありません。

 また、IF=0Hzのベースバンド処理でスペクトラルモニタを作る場合、ちょっと厄介な処理が要りますが、IF=11kHzとするとナイキスト帯域全体(22kHz)を簡単にFFTできますから、処理が非常に楽になります。

 ということで、さくっとAusio System Design Toolを起動して以下のような受信機をTennsy4.0内に構成してみます。



Low IFによるSDR回路


 まず、上図のfir1/2ですが、ここではナイキスト帯域(22.05kHz)のなるべく広い範囲において、位相が±45度になるようなヒルベルトフィルタです。次数はそれぞれ100次で、これは、このあとIFを11kHzとして、そのイメージを抑圧する(1信号受信とかいいますね)ための処理が必要だからです。その信号をmixer1で合成することで、ナイキスト帯域領域で1信号受信となります。
 ちなみに、fir1/2に同一の19kHzシングルトーンを入力して、出力信号でリサージュを描いたのが以下の図です。まんまるになるので、位相誤差は殆どありませんね。





リサージュ波形(入力信号は18kHzトーン)


 ちなみに、入力が1kHzと19kHzのfir1/2の出力の様子お以下に記しておきます。広い帯域でしっかり90度の位相差を得ることができますね。これはIF(11kHz)のイメージ低減にも十分な精度が要求されることになりますので、注意が必要です。これを考慮しないでいいのであれば、IF±数KHzの範囲でいいので、FIRの次数が少なくて大変に楽になりますが。





入力信号1kHzの90度位相差信号




入力信号19kHzの90度位相差信号


 mixer1の出力は、その後fir4でLSB/USBの帯域制限をかけることになります。11kHzのキャリアを立てて、その上側(USB)と下側(LSB)のどちらかを通過させるBPFになります。fir4がこれで、とりあえず200次のFIRで、キャリアポイントの11kHzで減衰が-20dB程度になるように、また-3dB帯域が2.4kHz(0.3-2.7kHzを通過)程度になるように特性を選んであります。先のmixer1の出力で複素信号処理は終わっていて、ここからは、実信号処理になります。このあたりの感覚は、実際にいろいろ弄ってみないとわからないものですが、Teensyでは簡単に系の構築ができるので、本当に助かります。




LSB/USB FIlterの様子


 fir4を通過したU/LSB信号はキャリア周波数の11kHzと乗算されて、音声帯域に落ちてきます。あとは、3kHz程度の80次のfir5で音声帯域を選択して復調が完了します。以下に、実際の各モジュールを結線して受信機として構成してみた様子を示します。





Teensy4 SDR受信系の様子

なんだか直交発振器がオフバンドしている(笑)


 ここでは、周波数の表示はSi5351のQuadrature OSCで実行していますので、Teensy4に繋がっているLCDは受信レベルRSSと受信スペクトラムをとりあえず表示することにします。受信スペクトラムはIF帯である11kHzをセンターにして±11kHzの間を表示することになります。スペクトラム表示は256FFTを採用してみましたが、表示が荒すぎるので、後になって1024FFTに変更してあります。この当時はまだまだどこまでできるか解らなかったので、手探り状態でした。I





表示の様子


 IF=11kHzにとったので、FFTは何も考えずに、実信号処理で受信周波数±ナイキスト帯域/2(=11kHz)を表示することができます。これがゼロIFになると複素FFTを持ちこまなければならないです。ライブラリの変更は厳しそう(私の手に余る)なので、このまま続けることにします。

 さてここで、ハードにもどって、QSDの特性向上について考えてみます。特に、FST3253ではHFハイバンドで感度が劣化する問題について、改善手法を考えてみます。 

 そこで、まずはFST3253のハイバンド特性をざくっと見てみます。





SINAD感度特性図


 上図の青線はFST3253の感度を見ていますが、21MHzを過ぎると急激に感度劣化が始まって、28M以上の周波数では7MHzに比べてSINADの劣化が15dB以上にも達し(SINAD一定なら受信レベルは同じような値だけ劣化する)、まーー、あまり気持ちのいいものでもありません。アンプを付ければ補償できますが、当然、大信号入力時のリニアリティを害してしまって、この方法はあまり奨められた方法ではありません(よくやっちまいますがね)。

 ということで、ちょいと趣向を変えて小信号アナログミクサーとして人気の高いSA602でQSDを構成してみます。以下は去年にMbed上でSTM32F466を弄っていた時に用いていたミクサー(真ん中の基板)で、今回、臨時のスワップしてみました。





SA602のQSD

MBEDのSTM32F466の時に弄っていたQSD


 これで、感度特性を見たのが、先の図の黄色線です。周波数変化に対する感度劣化は少なくなりましたが、絶対的なゲイン不足だったのか、HFローバンドの感度が不足してしまいました。では、ということで、BGA601に12dBのATTを後置して、8dBのアンプとしたものをQSDに前置してみます。それが先の図の水色のラインです。これだと、かなりの向上を見せて、HF~50MHzまでなんとか感度劣化を少なくすることが可能です。しかしながら、なんともアナログアナログしているので、DSPの受信機のフロントエンドとして落ち着きがワルイですね。

 そこで、新兵器の登場です。FST3253の類似品?に74CBTLV3253というチップがあります。これは、いろいろ調べていく過程で見つけたのですが、JF3HZBさんもこれに目を付けていたようで、丁度同じような時期に入手していたことが解りました(←かなりの安心材料!)。これは種類にもよりますがデータシート上は200~300MHzもの動作が可能とあって、ちょっと心がときめきますね。ということで、早速組んでみたのが以下の図です。今見ると、OPAは廉価ですがお値打ちもののNJM2068が刺さっています。




74CBTLV3253のQSD


 これを用いて、特性を取ったのが先の図の赤紫のラインです。FST3253に比べて、期待が大きかった割には改善効果がありません。これには、がっくりと来た覚え(もう半年近く前なので記憶が薄れているが)があります。さて、いったいこの劣化原因ってなんなのか、性根を据えて調べてみたくなりました。一つの原因として、Si5351のQuadrature 発振器が目に留まりました。リサージュを見ていると、ハイバンドになるにつれ、正方形からずれていって、位相精度は大丈夫なのだろうか?と思えていたからです。

 ここで白羽の矢がたったのが、Si570と高速ロジックICのフリップフロップの組み合わせです。Si570はこのHPでも何度か弄った痕跡がありますが、最終的には他の周波数生成手段でセットを組んできたのですが、ここではスプリアスが「比較的」クリーンで、位相ジッタの非常に少ない発振器ということで、Si5351の変わりに持ち出しました。これと高速フリップフロップの組み合わせで、発振周波数の1/4で90度位相差を生成してみようと思ったのです。




Si570の実験の様子

 まずは、昔、弄っていた様子で中央の銅板に裏返して、マウントされているチップがSi570です(見ずらいが)。スペアが3つも残っているようです。このままだと部品箱の肥し化は必定ですので、ここで活躍の機会を上げたいものです。ちなみに近傍スペクトラムは以下の通りで、素晴らしいものですね。クリスタル発振器並みの純度です。これだと、IFを11kHzに取らず、ダイレクトにゼロIFでも十分なノイズ特性が得られるかもしれません。




Si570の発振スペクトラム(狭帯域)


 そして以下の図が2種のDーFFを用いた90度位相差生成回路の様子です。使用素子はSN74AUP1G80と79です。1ゲートのFFでピン数が5ピンとなり、出力論理の差で2種類必要になります。Qか反転QしかこのFFには出力されていませんので。いつものごとくランドカットで作ってみます。




高速ロジックICによる90度位相差生成回路


これを、先のQSDのてっぺんに増築したのが以下の図です。なかなかのつぎはぎ状態ですが、けっこう動作は確実です(笑)。




高速ロジックICによる90度位相差生成回路を74CBTLV3253QSDに搭載下の図


 さて、こんな感じで、FST3253オリジナルにこのSi570+1/4FFを搭載して測定したのが、下図の黄色ラインで、これを74CBTLV3253に交換したのが青のラインです。なんと、90度位相回路を変えただけで、普通のFST3253でも大幅な感度アップを実現出来てしまいました。これは大きな驚きです。さらに74CBTLV3253に交換しても、感度のアップは50MHzで少し見られるだけなのには更に驚いてしまいました。これって、Si5351の位相差生成がペケなのか?それとも私の作った5351のコードが変なのか?

 実はµSDXのグループ(FB)で、T41-EPというQSD/QSEを用いたTeensy4.1ベースのTRXの紹介が有ったので、その紹介本(アマゾンで売っています)を見ると、この機器にもSi5351の直接90度位相差生成ではなくて、D-FFを用いた90度位相差生成回路が採用されてありました。Si5351の90度位相差信号生成回路は、このT41-EPを設計された大学教授にはお気に召さなかったようですね。こういった一連の「事実」を勘案すると、Si5351の90度位相差発振は、HFハイバンドにおいては問題があると考えざるを得ません。




各種3253の特性図(周波数 vs SINAD感度)


 ただ、今回の実験では、「Si5351悪玉説」を完全に実証することはできない(傍証でしかない)ので、これ以上突っ込むのは止めますが、代わりに、SI570と高速ロジックICによる90度位相差生成回路を用いれば、QSDの本来の性能を発揮できることが明かに出来ました。ま、これで十分じゃないかと思います。50MHzまで動いているというのは、FF入力が200MHzとなりますからよく動いているなぁと関心してしまいます。ロジックICといえば、74HCシリーズを弄っていた大昔は、動作周波数はせいぜい30MHzがいい所でしたので。

 さて、最後に上記の系で7MHzを受信した様子を以下に貼り付けておきます。スマホの縦長画面で取ったので、あまり旨くないのですが、そこはご容赦です。次回はTX側のQSEについて藻掻いてみます(苦笑)。


<送信部と全体のまとめ> 【2022.9.1】

 さて、受信部はこれくらいにして送信側に移ります。まずは、一番重要な部分である直交変調器から。最初に試したのは、自分勝手流に構成した2個のNJM2594の50Ω出力をハイブリッド合成したタイプ。こう書けば、直交変調器の原理に忠実に構成したものと解るでしょう。なので、回路図は容易に想像できると思います(書いてもいいけど、あまりに当たり前すぎるので省略)。






NJM2594二個による直交変調器


 なにやら、可変抵抗器がやたらついていますが、これはAudioサイドのキャリサプの租調整、微調整×2組で小計4個、キャリアサイドのキャリサプ調整ですがこれはあまり敏感じゃないので一個で済ませて小計2個、あとは出力レベル調整に小計2個の総計8個という物々しさです(笑)。ま、どこが一番効くのか試すためなので、最終的には何個か減らせるだろうとタカをくくっていました。

 ローカルの90度位相器は前出Si570の出力を74AC74で4分周したタイプの90度位相器を使っています。これを7MHzで動かしたのが以下の図です。





NJM2594の直交変調器のキャリヤサプレッション、サイドバンドサプレッション


 これを見ると、7MHzみたいなHFローバンドでは、調整するとかなりのところまで追い込めます。サイドサプ、キャリアサプ共に-60dBまでいきますが、さすがにこの安定度は良くありません。長期的には-45dB程度を維持するのがやっとだと思います。

 といいうことで次はFST3253を用いたQSE(Quadrature Sampling Exciter)をいじって見ます。これは、FST3253は受信と同じく差動ドライブしています。FST3253をOPAでドライブするのはちょっと厄介のようで、単電源で出力インピーダンスの低いTLV2462を選んでいます。ここに汎用のOPAを使うとうまくFST3253がドライブできないようです。その様子が以下になります。






FST3253によるQSE


 この特性は以下に示すようになります。






FST3253によるQSEのキャリヤサプレッション、サイドバンドサプレッション


 これを見ると、キャリサプ、サイドサプをみると7MHzのようなHFローバンドでは-50dBは得られることが解ります。調整箇所はI/Q入力のレベル調整だけですから、先の直交変調器に比べて、調整箇所が少なく(VRは2個)7MHzで使うならこれでもいいかな?とは思わせてくれます。

 7MHzでの特性はいずれも殆ど問題がないのですが、これがHFハイバンドになってくると途端に状況が一変します。それは上記のQSEの場合は、もしかすると私がヘボだからかもしれませんが、調整してもキャリ/サイドサプレッションが低くなりません。このあたりのデータは例えば前述のT41-EPというQSD/QSEを用いたTeensy4.1ベースのTRXの紹介本(アマゾンで売っています)のp202には7MHzの例が出ていまして、キャリサプが-50dB、サイドサプが-40dB程度となっているようですが、ハイバンドでの例が見当たりません。同じような回路構成なので、非常に興味があるのですが、残念ながらデータが無いので確認ができないのは仕方ありません。

 さて、ここでは、「調整のし甲斐のある」「動作原理に忠実に構成した」(笑)、NJM2594×2の直交変調器にて、ハイバンドの様子を見ていきます。以下に21/24/28MHzでチューンアップした様子を挙げておきます。





21MHzのキャリヤサプレッション、サイドバンドサプレッション




24MHzのキャリヤサプレッション、サイドバンドサプレッション




28MHzのキャリヤサプレッション、サイドバンドサプレッション


 これを見ると、なんとか特性が出ていることが解ります。なので、とりあえずは、NJM2594の直交変調器で進めることにしたいと思います。

 さて、このあとは一応、不要波の低減のためにBPFを設けることにします。送信周波数をダイレクトに生成するタイプのSDRではこのBPFはあまり重要ではなく、PAのあとのLPFでほぼ事足りるのですが、受信トップには、しっかりとしたBPFを設けるのが、「無線屋の流儀(笑)」です。「ディジタル屋さん」はこの辺りの感覚がないのか、あえて無視しているのか、受信トップにはなにも帯域制限がなくて、送受共用のLPFで終わり!というアプローチをしがちですが、昨今の「簡易SDR」のこの仕草には、同意することはできません(笑)。





プラグインBPF 基台と24MHzの3ポールの直列共振型BPF


 上図はプラグイン式のBPFを作ってみたところです。ピンジャック/プラグを使ってソケットを構成しています。5ピンの中間を信号に、両側の2ピンずつをアースにすると、意外に特性が乱れずにHF~50MHzくらいまでは使用できそうです。BPFの入出力はリレーをつかって送受を共用できるようにしています。

 BPFはニッチハイバンドの24MHzを選んでみました。あまり人の出ていないバンドが好きなのでここを選びました。以下にその帯域特性を示します。たしか通過帯域は無理に狭めずに2MHzとしています。綺麗な特性になっていることが解ります。





24MHz3ポールBPFの特性


 これらのパーツを使って、原始的なSD-TRXを構成してみることにします。下記に、バラック状態ですが、一応結線した様子を示します。





Teensy SD-TRXの様子


 この構成でとりあえず1Wくらいはでるように設定しています。まずは基本特性の取得の段階で、TRX切り替え等はついていません。完全な結線状態は最後に示すことになりますので、ちょいとお待ちを。

 で、まずは高次のスプリアスですが、24MHzで取得してみました。1WPA①の後に、陰に隠れて解りずらい3段の定K型フィルタ②を付けたあとです。





高次スプリアス


 3次の高調波が-60dB程度得られていますので、まったく問題はありません。QRPならこれで電波を出せます。定K型の3段のフィルタを終段に投入すれば、たいていの場合OKである経験則を得てもいますので。ただ、Teensyの処理のバックグラウンドノイズ?のせいか100~200kHz離れでノイズの盛り上がりが観測されます。





帯域外ノイズの盛り上がり


 最大強度は-60dB程度なので、特に問題はないと考えられますが、ちょっと気持ちの悪い特性でもありますね。これは、Codecのオーバーサンプルの影響なのかもしれません。もし、そうだとすると、Audio Codecに一般的な256倍オーバーサンプルが使えればもっとレベルが抑圧(広い帯域に拡散)されるのかもしれません。

 次に、変調入力として2-トーンを用いた場合のPA出力(24MHz)の時間波形を以下に示します。





2-トーンでSSB変調されたRF波形(1WPA後)


 p-p値で20.4Vということは、ほぼ1WPEPということになるようですね。この状態のスペクトラムを以下に示します。





2-トーン変調時RFスペクトラム



 2トーン信号だとシングルトーンの時に比べてダイナミックレンジが6dB必要になるので、前回のシングルトーン次よりは抑圧量は劣化します。また、おなじようなレベルで3rd IMDも出てくるので、なんだかスペクトラム全体が「ざわついて」来ますね。オシロでみると、さっきのように問題は無く見えるので、これは逆に言えば、オシロで明らかに歪の解るレベルの波形は「送信してはいけません!」ということになります。

 おっと話が逸れた。目的の「自作SD-TRXで交信する」には1Wでしこしこやるのも趣ではあるのですが、アンテナがプアなので、少しパワーアップを図ることにします。以前に、SDR-3の外付けリニアとして用いた以下の機器を繋ぐことにします。





30Wリニアアンプ


 RD16HHF1のパラレルプッシュプルから3並列プッシュプルに戻して、余裕を持ってドライブするこにします。先の1WのPAからそのまま繋ぎこんで見たのが下図になります。





リニアアンプ出力の2-トーン波形


 これを見ると115Vp-pですから33Wというところになりますね。見た目上はそれっぽい形(そんなに責められるようなワルイ波形ではない)ですが、ではということで、このRFスペクトラムは以下のようになります。





SD-TRXにリニアをつけた場合のRFスペクトラム


 これをみると、-30dBですから、ギリ合格というレベルです。ま、逆サイドは3rdIMDに隠れて見えにくくなっていますが、ま、そんなに褒められた特性ではありません。しかしながら法規上は、なんとかクリアしている(帯域内-40dB)ので、ここでは良しとしましょう。

 さてここでちょっと趣向を変えて、受信スペクトラム表示というか、ついでにウォーターフローというかの処理をFFT256からFFE1024に高分解能化して作ってみました。先のAudio System Design ToolのFFTの部分を変更して、得られるBinデータを無手勝流に表示してみたものですが以下のような表示になりました。





1024ポイントFFTに分解能を向上させた表示


 この表示はDSPに12kHz近辺のオーディオSGの出力信号をを突っ込んで表示させてみたものです。周波数をダイヤルで振ってみたのでスペクトラムが広がっている様子が解ります。ウォーターフローの色使いは8色をディスクリートに表示させたので、色変化の連続性にちょいと難がありそうですね。このあたりは必要に応じて改善していく必要がありそうですが、今回は深追いしません。とりあえず、スペクトラムとウォーターフォールの表示ができることを確認して次に進みます。ちなみに先のオーディオ変調入力が2-ト―ンだった場合の表示は以下の通りです。





1024ポイントFFTに分解能を向上させた変調入力信号の表示


 さーて、寄り道から復帰です。これら、作ってきたパーツをブレッドボード上に集積して、SD-TRXに仕立てて見ます。以下がその様子です。





Teensy4によるSD-TRX(TXドライバー+RX+Local)の様子


 上図は、全体の様子で、送受信切り替えリレーやマイク端子等も備えていて、これと30Wリニアとで、SD-TRXの基本部分を構成しています。やっとここまで来ました。Teensyを弄りだしてからなんと十か月も立ってしまったではないですか。こうやってみると、当初に比べてモジュール類の増殖が半端ではないですね。まったく「よくやるよ」てなもんです(笑)。

 早速、過疎の24MHzにてプアなGPを用いて交信をしてみます。なお、事前に変更申請は処理してありますのでそのあたりは問題ありません。リニアの後には前述の24MHzの定K型LPFも入れてあり、抜かりはありません。

 最初は海外交信を一丁やったろと思たのですが、あいにく24Mに出ている局が少なく、止む無く国内局で我慢(SRI)することにしました。





交信例


 相変わらず我彼のC/N差が大きいのは、仕方ありません。プアなアンテナのせいにしてしまいます。ま、今回は自作のSD-TRXで交信するところまでできたということで満足してしまいましょう。特に、バラックセット然としたもので、電波が出て行くのは面白いです。念のため、2回しか電波を出してないのですが、「飛び」の様子を見てみました。





海外への飛びの様子


 C/Nレポートを見ると、国内よりも大きな値になっているので、ま、こんなセットでも普通に海外交信も可能だろうというところで溜飲を下げることにします。

 しかし、このセットはバラックからケーシングに進むことはしません。

 いきなり「何だ?」と思われるかもしれませんが、このままのこのTRXの能力だと、「長く使うためにケースに収める気が起きないから」というのが本音なのです。交信ができるところまで持って行ったのも、簡易なSDRについて述べるときに、「どーせ実際に運用したことも無いのに、えらそうなこと言うな!」と必ず湧いて出る輩を黙らせるためというのが本音なのです(笑)。

 なので、交信できたが、この手のSD-TRXはあまり実用性という観点からは「ディジタルの強味を生かし切れていない中途半端な代物」という判断をしています。その大きな理由は以下の点です。

 ゼロIF方式のSD-TRXでは、

①送信側のQSEや直交変調器ではキャリアサプレッション&サイドバンドサプレッションを良好に維持することが難しい。また運用周波数が高くなると特性そのものが満足できるレベルにない。

②RXのQSDにおいても同じ問題がある。サイドバンドサプレッションはRXにおいてはイメージ除去能力であり、ハイバンドでは劣化が著しい。

 これは、ディジタル処理した信号を最後の無線化(直交変調器)、あるいは無線信号をディジタル信号に変換するとき(直交復調器)に起きる「アナログ的な」安定度あるいは特性の悪さに起因するものと言えます。

 アナログ的不安定度があるなら、ディジタル処理で補正してやれというのも一つの解だと思います。例えば、受信イメージ抑圧なんかはやれば自動補正が可能だと思います。(LSB波をUSB受信してその出力が最低になるようにI/Q間補正すればできそう・・・・あとで試行してみようか)送信は狭帯域な誤差信号の抽出(LSB送信時USB検出とか)が厄介かもしれませんね。(先の受信で補正できたら、送信波のU/LSB受信してみて、不要サイドバンドを落とすように補正する・・・・って、これもやればある程度はできるかも?)

 と、対処の方法はありそうですが、改善できてもその絶対量は、QSD/QSEのアナログ的精度で決まってしまいます。モノリシックで-60dBのサイドバンドサプレッションがワイドバンドで軽々実現できるICでも有ればやる気になるのでしょうが、そんなものは存在しそうにないし・・・・結局のところ、ダイレクトサンプルで一括してD/A A/Dする方式のSDRでないと、まともな物にはならないということになりそうですが、それを趣味レベルで実現するのはかなりのハードルがありますね。FPGAが縦横無尽に使いこなせないと無理そうです。

 うだうだ書いてきましたが、妥協策としては、しっかりとしたフィルタを有するまともなアナログ機のIF以降をディジタル化することです。たとえばIF=11kHzでteensy4で2-トーンを出すと以下のようになります。





Teensy4.0によるSSB生成

右のスプリアスは広帯域IFフィルタでクリーンアップされる予定


 このようにキャリサプ/サイドサプも-70dBが経時安定的に実現できます。ここはアナログ機で、特にキャリアサプレッションは以前やったように自動補正を掛けないと、かなり難しいです。自動補正しても、長期に安定にはならないので、面倒な補正が要りますね。これが全く不要になるのですから、ディジタル処理はその存在意義があると思われるのです。

 長くなりました。このあとの展開については、現在改修中の半導体アップコンバージョン機の外部ユニットとして、TeensyのMOD/DEMで遊んでみる予定です。果たして思惑通り進むだろうか・・・・・