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

Joseph Halfmoon

信号処理素人の個人の感想ですが、デジタル信号処理の入門書の多くはFIRが先、IIRが後という順番じゃないかと思います。IIRは難しそうだからかな。でも実装するとなるとIIRの方が簡単だったりして。ところが、三上先生本では、先にIIRが登場、どっちが先でもいいっちゃいいですが。まずは前回プログラムを「チョイ変」して1次のIIRフィルタをしみじみ?味わってみたいと思います。

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

前回の繰り返しですが、これを述べずにはいられません。「手習ひ」に使わせていただいておりますご本は以下です。

三上直樹先生著、工学社『「Armマイコン」プログラムで学ぶデジタル信号処理

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

早速実習

今回ようやく第3章『簡単な「デジタル・フィルタ」』に突入。ようやく信号処理らしくなってきました。その前半は「1次のIIRフィルタ」です。ぶっちゃけ先頭のアイキャッチ画像に掲げましたるもの。ブロックダイアグラムは単純明快。しかし、頭の中でインパルスをば入力すれば、Z-1(遅延というか、記憶というか。。。)ところに「昔の入力が残り」それが減衰しつづけても、くるくると回りつづけ「永遠に残る」ことが想像できます。立派なIIR(Infinite Impulse Response)だあ。

IIRフィルタは安定性を解析しないとダメだとか、位相応答が難しいとかいろいろある筈です。しかし、ココでは簡単な例ということでその辺には踏み込みませぬ。

そう割り切ってしまうと、前回のプログラムからの差分は本質1行であります(A1=0.9, B0=0.1で計算。)プログラムをWeb上のMbed環境でコンパイルしてNucleo-F446REボードにダウンロード。前回「半田付け」化した「アナログ入出力」ボードに接続いたします。

三上先生本では計測も「STM32F446+パソコン」(ちょうどトラ技で関連記事が連載されています)なのですが、当方では外付けのアナログIFボードにDigilent社Analog Discovery2を接続して実験しております。ボードのアナログ入力にシグナルジェネレータ出力とオシロのCH.1、アナログ出力にオシロのCH.2を接続すれば準備完了。

入力信号100Hz

最初はアナログ入力に100Hzの信号を与えてみます。黄色が入力のCH1、青が出力のCH2です。この辺の低い周波数では、入力振幅がそのまま出力されるのが期待されます。グラフをみるとまさに期待通りであります。しかしMeasurementsの数値を見ると微妙に出力が大きくなってますな。「誤差のうち」と「いいんだよ、コマケーことは」と踏みつぶして先に進みます(考察せずに済ませていいのか、そういうことで。)

IIR1st_100HzTIM

入力信号3.5kHz

続いて入力を3.5kHzに上げました。サンプリング周波数は5kHzですが、前々回の3.5kHzだと波形が「唸って」ました。そしてDAにアップサンプリングが入った前回の3.5kHzだとキレイな波形になった「因縁」の周波数であります。

さすがにこの周波数になると、目に見えて振幅が落ちていますが、思ったほどでもないです。まだまだイケル?

IIR1st_3_5kHzTIMここまで時間領域でグラフを眺めてみました。しかしAnalog Discovery 2には、当然ボード線図描画の機能もあるので調べてみます。

振幅特性

一応、10Hzから5kHzの範囲で振幅のみ描いてみました。三上先生本では0Hzから5kHz、かつF446利用のツールで測定描画されていたのです。こちらでは0Hzはあんまりなので入れられませんでした。またCH1の振幅基準なので、入出力が等しければ 0dB表示です。低い周波数のところで落ちているのは、入力に挿入されている直流カットのコンデンサの影響ということです。

IIR1st_Bode計測系が異なるのでご本とはカーブの塩梅が異なりますが、LPFっぽい周波数応答になっています。一応予定通りか。本当は「塩梅が異なる」ところを考察すべきなんだろうけれども。素人で良く分かっていないので無駄口は叩きませぬ。よいのかそんなことで。

手習ひデジタル信号処理(3) STM32F446、DAのアップサンプリング へ戻る

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