コラム33 ラズベリーパイでIIRフィルタを実行する


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

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


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

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


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

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

cd ~/Downloads
unzip chap3.zip

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

mv chap3 ../Desktop
cd ~/Desktop/chap3


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

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

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

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

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

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


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

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

./iirexec lowsh200.txt 100hz.wav


●lowsh200.txtの係数でIIRフィルタを実行

 図3-41のようなウインドウが現れます。上が入力で100Hzのサイン波、下がフィルタの出力で約2倍になっています。この係数は
ローシェルビングフィルタであり、200Hz以下を+6dB持ち上げます。


 図3-41 ローシェルビング、低域を持ち上げる


 では2000Hzを入力するとどうなるでしょうか?次のようにタイプします。

./iirexec lowsh200.txt 2000hz.wav

 結果は図3-42のようになり、振幅は変わりません。


 図3-42 ローシェルビング、高域はそのまま


●highsh1000.txtの係数でIIRフィルタを実行

./iirexec highsh1000.txt 100hz.wav

 このようにタイプすると図3-43のようなウインドウが現れます。上が入力で100Hzのサイン波、下がフィルタの出力で振幅は一緒です。


 図3-43 ハイシェルビング、低域はそのまま


 では2000Hzを入力するとどうなるでしょうか?次のようにタイプします。

./iirexec highsh1000.txt 2000hz.wav

 結果は図3-44のように出力は約2倍になります。
ハイシェルビングフィルタであり、1000Hz以上を+6dB持ち上げます。


 図3-44 ハイシェルビング、高域を持ち上げる


 周波数特性の計算方法、Cソース(iirexec.c)の説明に関してはコラム34を参照してください。


目次へ戻る