JR2BMU logo

STM32 Nucleoでデジタル信号処理を試してみた(3)【最終回】

  前回はDSPライブラリを用いて信号処理を行うところまで設定しました。今回は、PSN方式SSB変調に用いる直交変調信号を生成する複素FIRフィルタの設計を行います。

動作原理

 PSN方式のSSB変調を行うためには90°位相の異なる信号が必要です。そこでデジタル信号処理を用いてそのような信号の生成を目指します。今回はこちらのページの方法を使用させてい頂きました、大変分かりやすく説明がなされているので是非ご覧ください。
 動作原理の概要は次の通りです。実信号は±ωの複素信号の重ね合わせと見なせますが(Fig. 1(a))、正の周波数のみ取り出すと、実部と虚部は同じ振幅で90度位相が異なっていることを利用します(Fig. 1(b))。この手法は周波数によらないので、広い周波数領域で直交した信号が得られます。
circ_1

 具体的にはFig. 2(a)のように正の周波数を通過させる特性を持つフィルタを実装することになります。 この時のフィルタ係数g(n)は上記の周波数特性を逆フーリエ変換することで得られます。 g(n)の実部のみを係数をするフィルタRと、虚部のみを係数とするフィルタIを入力信号にそれぞれ作用させることで、Fig. 1(b)の実部と虚部に対応した直交信号が得られます。
circ_1

DSPライブラリの設定

(1)フィルタ係数の計算
 フィルタ係数の計算(フーリエ変換)は適当な計算ツールで行います。 今回用いた62タップの定数はこちら(実部虚部)です。

(2)プログラム
基本的には前回作成したコードと同様ですが、変更点は以下の2点です。
 (2-1)DACの設定
  DAC CHANNEL2にチェックを入れると、PA5を2つ目の出力として設定されます。保存するとソースコードが更新されます。
circ_1
また次の通り、ソースコード内にCHANNEL2のDAC開始を追加する必要があります。
   /* USER CODE BEGIN 2 */
      HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
      HAL_DAC_Start(&hdac, DAC_CHANNEL_2);
   /* USER CODE END 2 */


 (2-2)ソースコード
  基本的には前回作成したコードと同様ですが、フィルタを実部・虚部の2つ定義しています。 main.cのうち、main関数までのソースコードはこちらをご覧ください。 今回は、実部信号をPA4、虚部の信号をPA5から出力させます。
  以上の変更・追加を行い、コンパイル-->書き込みを行います。

動作確認

   Fig. 3(a)に1kHz正弦波入力時のCh1(赤)、Ch2(黄)の出力波形を示します。 また、Fig. 3(b-e)には様々な入力周波数(600Hz-6kHz)に対するリサージュ波形を示します。必要な周波数帯域で90度直交した波形が出力されていることがわかります。
circ_1
以上で初心者の私でもPSN方式に用いる直交信号の生成に到達できたので、今回のデジタルフィルタの取り組みはここまでとします。 このデジタルフィルタを利用したPSN方式SSB変調回路はこちら

©JR2BMU All rights reserved.

inserted by FC2 system