前回はWeaver変調器の原理を学ぶ、ということで三角関数の計算に突入してしまいました。しかし実際に計算したのはMaxima様で私は見ていただけですが。原理は分かった(ホントか)ということで、今回は実機にプログラムを書き込んでその特性を観察してみたいと思います。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※勝手に手習ひさせていただいております教科書へのリンクが以下です。
三上直樹先生著、工学社『「Armマイコン」プログラムで学ぶデジタル信号処理』
上記教科書の6.4「Weaver変換器」による「位相シフタ」が手習ひのターゲットです。
※実習はST Microelectoronics社製 Nucleo-F446REボード(STM32F446RE、Arm Cortex-M4F搭載)をターゲットボードとして Arm社のWeb開発環境 Mbed Webコンパイラでビルドしています。なお、三上先生のソースは、Mbed Webコンパイラ環境(要無料登録)で誰でも参照可能です。
ビルド
今回は、三上先生のコードをそのままMbed環境でビルドさせていただいて、その動作を確認させていただきます。ターゲットのコードの機能は、
-
- 入力信号の周波数+100Hzの周波数の信号を出力する
- 取り扱う周波数帯では増幅しないが、処理対象でない低域、高域の周波数は遮断する。取り扱う周波数範囲は0.1~4.5kHz。
です。
私としたら(いつものことですが)何も頭を使う局面はありません。なお、三上先生のソースは別シリーズで使っているMbed OS6よりは「軽い」Mbed OS2でビルドさせていただいております。まずは、ビルド結果が以下に。
ソースをみると、それなりな仕事をやっているのですが、いつものとおり大したメモリは使われていないです。F446RE余裕しゃくしゃく。
実機動作確認
何度となく同じことを繰り返しています。今回もC1(黄色)入力(ADコンバータ)には周波数300Hz、振幅1V、オフセット0Vの正弦波を加えています。C2(青色)出力(DAコンバータ)には、予定どおり、ほぼ400Hzの正弦波が出力されているように見えます。
上の信号をFFTかけて観察してみると以下のような感じです。黄色の入力の300Hz付近のピークに対して、青の出力は400Hz付近にピークがあることが分かります。
一種類の周波数を「運んでいる」正弦波では面白くない(?)ので、いろいろな周波数が重なっている波形ということで、入力波形を矩形波に切り替えてみます。300Hz、振幅1V、オフセット0Vはそのままです。10Hzから5kHzまでの周波数帯についてFFTかけてみたものが以下に。
黄色の入力の周波数を観察すると
-
- 約300Hz付近
- 約900Hz付近
- 約1500Hz付近
- 以下つづく
という周波数にピークが見えてます。300Hzが矩形波の周波数、900が第3高調波、1500が第5高調波、以下奇数次の高調波が続きます(矩形波の場合、偶数次の高調波は見えなくなる。)
これに対して、+100Hzの
-
- 約400Hz付近
- 約1000Hz付近
- 約1600Hz付近
に入力波のピークにほぼ匹敵する出力が観察されています。ここまでは予定通りですな。
しかし、出力みると、予定のピークよりかは30dBくらい小さいけれどもコマケー山が見えとります。要考察といいつつ、いつ考察するんかいのう。
次回は、処理フローにそって各要素部品をおさらいして行きたいと思います。