手習ひデジタル信号処理(5) STM32F446、非巡回型移動平均

Joseph Halfmoon

三上直樹先生著、工学社『「Armマイコン」プログラムで学ぶデジタル信号処理』で手習ひさせていただいとります本シリーズもようやくデジタル信号処理っぽいボード線図が出てくるようになりました。わたしゃ嬉しいよ。といっても今回は非巡回型移動平均、名前は厳めしいですが「普通の移動平均」でやんす。

※「手習ひデジタル信号処理」投稿順 Indexはこちら

ご本のネタバレにならぬよう、ソースの引用等は行いませんが、三上先生の御ソースはArm社のMbed環境上で公開されています。

外付けのフロントエンド回路?も出来ているし、後は淡々とソースをビルドして試していけばアッという間に演習は終り、ついてはデジタル信号処理に「精通」できるかとも思うのです。しかし急ぎませぬ、ゆるゆると1単元づつ、しみじみ味わって行く所存にござりまする。

移動平均、昔からお世話になっております。なんといっても実装簡単。ただし、ご本では、

  • 非巡回型
  • 巡回型

の2種類を勉強するようです。今回は「非巡回型」、ぶっちゃけ「いつものやつ」です。まずはビルドしたNucleo-F446RE用のプログラムの諸元から。

MovingAVG_pgmまだまだメモリには余裕あり。ま、当然だけれども。何度も書きますが、MbedのWeb環境、こういうときは楽です。しみじみ味わうために、mainのソースは自分のスタイルで手入力させていただいたのですが(ロジックは三上先生本のとおり寸分の変更なし)、10分もあればビルドしてボードが動いてしまいます。

動作確認

例によって、Digilent AnalogDiscovery2を接続して、その動作を観察してみました。三上先生本ではこの単元に時間波形のグラフはでてきませんが、折角なのでとっておきました。黄色(C1)が入力、青(C2)が出力です。右側に最大、最小、平均電圧と周波数の測定結果を表示しています。

最初は入力が周波数1kHzの正弦波のときです。後のボード線図を見ると分かるとおり、このときは振幅特性の「深い谷」にハマっています。出力信号がでてこないケースです。黄色の入力は0V中心に振れており、その平均は「ほぼほぼ」0Vです。しかしF446のADに入力される前に、ボードの「3.3V」電源の約半分の電圧オフセットが加えられています。DAされた出力をみるとそのオフセット分だけのDC波形に見えます。まずは予定どおり。

movingAVG_1kHzちょっと周波数をずらし、正弦波の波形がみえそうな周波数にしてみました。1.25kHz。こんな感じ。正弦波らしき波形が出力されています。

movingAVG_1.25kHzもっと周波数を低く、といっても低くしすぎるとDCカットのコンデンサの影響が出てくるので、とりあえず250Hzでどうよ?

movingAVG_250Hz3例もやれば時間波形はいいでしょ、ということでオシロ画面は終了。そして取得したボード線図が以下です。三上先生本では0から5kHzにx軸とってますが、以下は10Hzスタートです。それでもDC近いところではDCカットの凹みがわずかに見え、2分の1サンプリング周波数である5kHz付近でも特性がちょっと変なのが見てとれます。

movingAVG_Bode
如何にもな振幅特性の波形が登場して、デジタル信号処理な感じがしてきました。普段、移動平均にお世話になるときは、こういうような吟味もなく、成り行きでやってたな~。そういうことではイケないなあと反省。反省したらちゃんとやれよ、自分。

手習ひデジタル信号処理(4) STM32F446、最初はIIRフィルタ? へ戻る

手習ひデジタル信号処理(6) STM32F446、巡回型移動平均1/3 へ進む