STM32 Nucleoでデジタル信号処理を試してみた(3)【最終回】
前回はDSPライブラリを用いて信号処理を行うところまで設定しました。今回は、PSN方式SSB変調に用いる直交変調信号を生成する複素FIRフィルタの設計を行います。動作原理
PSN方式のSSB変調を行うためには90°位相の異なる信号が必要です。そこでデジタル信号処理を用いてそのような信号の生成を目指します。今回はこちらのページの方法を使用させてい頂きました、大変分かりやすく説明がなされているので是非ご覧ください。動作原理の概要は次の通りです。実信号は±ωの複素信号の重ね合わせと見なせますが(Fig. 1(a))、正の周波数のみ取り出すと、実部と虚部は同じ振幅で90度位相が異なっていることを利用します(Fig. 1(b))。この手法は周波数によらないので、広い周波数領域で直交した信号が得られます。
具体的にはFig. 2(a)のように正の周波数を通過させる特性を持つフィルタを実装することになります。 この時のフィルタ係数g(n)は上記の周波数特性を逆フーリエ変換することで得られます。 g(n)の実部のみを係数をするフィルタRと、虚部のみを係数とするフィルタIを入力信号にそれぞれ作用させることで、Fig. 1(b)の実部と虚部に対応した直交信号が得られます。
DSPライブラリの設定
(1)フィルタ係数の計算フィルタ係数の計算(フーリエ変換)は適当な計算ツールで行います。 今回用いた62タップの定数はこちら(実部・虚部)です。
(2)プログラム
基本的には前回作成したコードと同様ですが、変更点は以下の2点です。
(2-1)DACの設定
DAC CHANNEL2にチェックを入れると、PA5を2つ目の出力として設定されます。保存するとソースコードが更新されます。
/* 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から出力させます。
以上の変更・追加を行い、コンパイル-->書き込みを行います。