コラム2F ラズベリーパイでIIRフィルタの係数を求める


●ラズベリーパイとOpenCVの準備

 本コラムではデジタルフィルタの周波数特性を計算するC言語ソースコードを
ラズベリーパイで実行します。また特性を描画するためにOpenCVコラム16参照)というライブラリを使用します。


■ラズベリーパイでコンパイルして実行する

 C言語で書かれたソースコードのコンパイルには
gcc(GNU Compiler Collection)を使用します。gccはラズベリーパイ(正確にはRasbianというOS)に含まれています。


●ソースコードのダウンロード

 ラズベリーパイをネット接続してWeb Browserを開き、このZIPファイルをダウンロードします。その後Terminalを開き、Downloadsディレクトリに行って次のように解凍します。

cd ~/Downloads
unzip chap2.zip

 するとchap2というディレクトリが出来るので次のようにデスクトップに移動します。

mv chap2 ../Desktop
cd ~/Desktop/chap2


●C言語で書かれたソースのコンパイル

 chap2ディレクトリにデジタルフィルタの周波数特性を計算するソースコード(iirdesign.c)があるので次のようにコンパイルします。(*1)(*2)(*3)

gcc `pkg-config --cflags opencv` iirdesign.c -o iirdesign `pkg-config --libs opencv`

(*1)コンパイル済みのバイナリはここ。属性を変える必要あり(chmod 744 filename)

(*2)`pkg-config ... opencv`を囲むキャラクタ(``)はクォーテーションマークではなく、
バッククオート。本サイトからコピー&ペーストすると良い。

(*3)OpenCVをインストールしないとエラーになります(コラム16にインストール手順)。


●周波数特性の計算と描画

 エラーなしで通ったら次のように実行します。

./iirdesign


●LPFを設計してみる

 図2-158のようなウインドウが現れてIIRフィルタの周波数特性が描画されます。カットオフ2kHz、
バタワース型LPFです。


 図2-158 設計したIIRの周波数特性(LPF, バタワース型、サンプリング22050Hz)


●導出した係数がファイルに落とされている

 ウインドウ上で何かキーを押すか、Terminal上でCtrl+Cでアプリケーションは終了します。coeff1.txtというファイルが生成されており(図2-159)、設計したIIRフィルタの係数が5個書かれています。
2次IIR(Biquad)1個からなり、上からa0, a1, a2, b1, b2です。


 図2-159 coeff1.txtのなかに係数が5個ある


●HPF, BPF, BRFも設計できる!

 Cソース(iirdesign.c)内のFilTypeの値を0から2にすれば
BPFになります。図2-160にその特性を示します。2k〜5kHzを通すバタワース型のBPFです。


 図2-160 設計したIIRの周波数特性(BPF, バタワース型、サンプリング22050Hz)


 coeff1.txtを開くと係数は10個書かれています。
Biquad×2個からなり、上からBiquad1個目のa0, a1, a2, b1, b2、Biquad2個目のa0, a1, a2, b1, b2です。


 図2-161 coeff1.txtのなかに係数が10個ある


 FilTypeの値を1にすればHPFに、3にすればBRFになります。またOrderNは2まで、1だと緩やか、2だとやや急峻な減衰特性になります。iirdesign.cにおけるFilType, OrderNの値と、導出されるBiquadの個数は以下ような対応になります。

OrderN=1 OrderN=2
FilType=0 (LPF) Biquadは1個 Biquadは1個
FilType=1 (HPF) Biquadは1個 Biquadは1個
FilType=2 (BPF) Biquadは1個 Biquadは2個
FilType=3 (BRF) Biquadは1個 Biquadは2個


 IIRフィルタ係数の導出方法に関してはコラム2E、Cソース(iirdesign.c)の説明に関してはコラム2Gを参照してください。


目次へ戻る