SDRトランシーバー4号機(SDR#4)の製作「送信用D/Aコンバーター部の予備確認」


写真はNECLEO STM32F446RE評価ボードで、プログラム作成にTRY。開発過程や疑問点などをまとめた開発ノートは4冊めとなりました。

2025.03.06

はじめに
 今回からSDR#4号機送信部のソフト作成スタートです。
 SDR#4号機では、SSB信号の作成をSTM32F446のマイコンボード内で処理します。SDR#3号機までは、PC内サウンドカードから10数kHzの ペースバンド信号を出力していましたが、4号機では455kHz付近の信号を、STM32のDAコンバーターから出力します。
 455kHz付近のIF信号をマイコンボードから出力する製作例は、参考例を見かけないので各ブロックごとに、予備実験をしながら検討を進めていきます

DA出力とサンプリング周波数
 STMマイコンのDAコンバーター(DAC)から455kHzを出力するには、サンプリングはどの程度にすればいいのか? 経験上、出力周波数の10倍程度にすれば それなりの波形になりますが、サンプリングが低いと"カクカク"した波形になってしまいます。逆にサンプリングが高いほど、アップサンプリング のフィルター処理が重くなってきます。
  DACのMAXサンプリングはSTMマイコンのデータから10Msps(DAC OUT Buffer disable時)となっているので、今回8.4Mに設定しました。6Msps程度でもきれいな 波形が得られますが、ファイナルAMP後のLPFで取り切れないスプリアスになることを懸念して8.4Mspsとしました。
 8.4MのタイミングはTIM6クロック84MHzを1/10にして作成します。

  出力波形を見てみる
 実験的に、8.4Mspsのサンプリングで455kHzキャリアのAM信号とSSB信号の波形を作成して、DAC出力してみました。
     

 
 左写真はDA出力波形(0.5V/div 5us/div)、455kを25kHzでAM変調した波形、455成分は"カクカク"感もなく使えそうです。
 右写真は出力波形(0.5V/div, 20us/div)、455kを20kと30kのAF 2TONE信号で変調したSSB信号、こちらも使えそうな波形です。
 いずれの波形もDA出力を10:1プローブで確認しています、DAC出力BufをOFFにしているので、1:1プローブで測定するとプローブの入力容量り 影響で波形はなまってしまいます。

 

波形データ―の作成
 波形データは、本来なら動的に変化する(例 音声信号)ですが、今回は予備実験なので固定の波形データを配列に入れ、DACへTIM6のトリガイベント でDMA転送してみます。
AM変調波形
 AM変調の式は、以下で表わせるので
S(t) = Amp * cos(ωct) + 1/2 * (m * Amp)* [cos{(ωc + ωs)t} + cos{(ωc - ωs)t}] ....@
ωc: キャリア周波数 ωs: 変調信号周波数 Amp: キャリア振幅 m: 変調度 0< m <1
叉は  S(t) = Amp * [1 + m * cos(ωst)] * cos(ωct)....A

Excelで波形を確認してみる

 左図は、Amp=1024 455kHzを25kHz 変調度0.8としてA式で計算したAM変調波形で、計算式を元に波形の配列データを作成し DACへ転送すればAM変調が得られるはずです。
波形データ―配列の作成
wave[i] = (int16_t)(Amp * [1 + m * cosf(ωsT*i)] * cos(ωcT*i)) + 2048;
T; サンプリング間隔 2048: DAC用DCバイアス 
計算はfloat形式として、最後に16bit整数に戻し、wave[0]〜wave[1025]までforループで作成した配列データをDACへDMA サーキュラー 転送で繰り返し出力されます。 但し波形データのwave[0]とwave[1025]は不連続になっています。

 

SSB変調波形
2TONEでSSB変調した式は、以下で表わせるので
S(t) = Amp * [cos{(ωc + ωs1)t} + Amp * cos{(ωc + ωs2)t}] ....@
ωc: キャリア周波数 ωs1,2: 変調信号周波数1,2 Amp: 振幅 
 AM波形と同様にExcelで波形をみると

 左図は、Amp=1024 455kHzを30kHz 20kHzで計算した変調波形で、計算式を元に波形の配列データを作成し DACへ転送すればSSB 2Tone変調が得られるはずです。
波形データ―配列の作成
wave[i] = (int16_t)[Amp * {cosf(ωc + ωs)*T*i} + Amp * {cos(ωc + ωs2)*T*i)}] + 2048;
T; サンプリング間隔 2048: DAC用DCバイアス 
計算はfloat形式として、最後に16bit整数に戻し、wave[0]〜wave[1025]までforループで作成して、DACへDMA サーキュラー 転送で繰り返し出力されます。 但し波形データのwave[0]とwave[1025]は不連続になっています。

 

出力波形のノイズ見てみる

 左写真は、dataは100に固定して出力ノイズを見た波形(2mV/div,)。約2mVppのノイズの他に、写真では見えませんが5mVpp程度のスパイク状のノイズが乗っています。
 SDRにまとめたときのS/N比は実用になりそうです。

 

今後の進め方
 DACから455kHz TXIF出力可否の確認は出来たので、引き続きSSB発生〜455kHzまで周波数変換について予備実験を進めていきます。  

  Top Menu