構想の具体化
目標仕様
製作に先立ち目標仕様を、以下の様に仮設定します。
項目 | 仕様 | 備考 |
周波数 | 7MHz | シングルバンド |
対応モード | LSB/CW/AM | AM_L/AM-Hは受信のみ |
受信最小感度 | -125dbm以下 | CWモードにてビート確認できるレベル |
受信最大入力 | -30dbm以上 | 10kHz離れて-30dbmの2トーンを入力してもIMD成分が受信出来ないこと |
送信出力 | 5W | |
送受信イメージ比 | 60db以上 | イメージ周波数8MHz |
不要スプリアス | -70db以下 |
補足説明
IF周波数を455kHzに取った場合、8MHz帯のイメージ比があまりとれないことが予想されます、出来ればイメージリジェクション方式を検討
してみます。
以下2024.3月追記、2024.4月、2025.5月一部見直し、受信部概略構想
SDR#4の開発をスタートして約2年、自分の技術力ではかなりハードルの高いSTMマイコンですが少しずつ具体化して、ようやく信号が通るようになってきました。
受信部のみですが、現状の概略構想を一旦まとめておきます。
AD変換、フロントエンドからの455kHz IF信号をAD、サンプリング周波数(Fs)はタイマー(TIM3)のクロックから分周して作成するので、割り切りの良い
fsに制約されるので1Mspsとします。ナイキスト周波数(500kHz)に対して余裕がありませんが、TIM3の分周比と最終出力サンプリング周波数の制約から、あまり選択肢は
ありません。
AD結果は、メモリー(BUF)へDMA転送し、BUFの容量はAD以降のソフト処理時間との兼ね合いになりますが、検討課題です。
デジタルミキサー、アナログ受信機のミキサーに相当、入力信号AD値(455kHz)とNCO(ローカルOSC相当448kHz)のデータを掛け算した、デジタルダウンコンバーター で、最終的なIF周波数は8kHzになります。
NCO、アナログ受信機のローカルOSCに相当する機能です。今回は周波数固定で使うので、ADサンプリング間隔に合わせた波形データ―(数サイクル分)
を配列で準備しておきます。配列の最初と最後のデーター不連続にならないように波形データ数を設定します。
一方、参考にしている「ARMマイコンでつくるダイレクトサンブリングSDR」(CQ出版)では、周波数可変タイプなので、計算で波形データ―を作っています、
処理時間の比較について、検討課題とします。
2025.5追記 今回は、周波数選択の自由度から「ARMマイコンでつくるダイレクトサンブリングSDR」の発生方法を採用しました。
Cicフィルタ、ADFsをデシメーションするため、Cicフィルタを配置し、次数は3次、Cicフィルターの組み込みは初めてなので、 どのような特性が良いのか、検討課題になります。
デシメーション比(R)、2025.5修正 デシメーション比は当初1/25と設定しましたが、プログラム上、2のべき乗の方が都合よく、1/32に変更しました。
一方ADのサンプリング周波数(Fs)は1Mspsとしたので、PCへの出力サンプリングは1M/32=31.25kHzとします。
Firフィルタ、出力fsは31.25kで、PC側のスペクトラム表示範囲は-15.5〜+15.5kになります。経験上スペクトラム表示範囲は-16〜+16k程度が見やすく、
Firフィルターのカットオフ周波数は16kHz程度とし、次数は3段に設定します。
CicフィルターのF特補正については、今後の課題です。
USB出力、PCへのI/Q信号をUSBオーディオストリーミングで出力することを考えています。サンプリング周波数(fs)は48kHz(40kHzに修正、その後31.25k)を想定していますが、
未だ具体的な実現方法が理解できていません。
USBオーディオクラスの規格などを参考にしていますが、ハードルが高くて停滞しています。通常のシリアル出力(CDC)でもある程度の遅延を許容すれば
実現出来そうな気もしますが、、、。
2025.5追記、USB出力はSTMマイコンから直接出力もできますが、PC側のバーチャルCOMポートの速度が出ていないので、新たにFTDIの変換モジュールとドライバを介して
STMからUART出力後USB変換(2Mbps)することにします。
プログラムの構成
プロクラム構成は、現在のところメイン、CIC、NCO、FIRに分割し、他Si5351(PLL)制御用のI2Cは別途検討です。STMCubeIDでは自動生成されるソースだけでかなりの
行数があり、すべてのソースをメインに記述するよりは、分割する方が判り易くなります。
今後の予定
SDR#4では、未経験の要素技術が多くで、ソースコードを記述しても間違いが多く、なかなか進めません。次回からは、各要素毎に動作確認しながら
進めていきます。