LADSPA IIR LPF Butterworth 1pole
処理が軽くて便利なIIRのLPF(ローパスフィルター)をLADSPAで作成してみる。
IIRとは、無限インパルス応答をもつ再帰型フィルタで、アナログ回路に起源を持つ。
まずは、もっともタップ数が少ない1poleのutterworthを試す。 3年以上前にJavaで作っているので、その焼き直し。
上記式から1poleのプロトタイプを計算
LPFを作りたいので、上記式 s に次式を代入する。
fcの中はこんなかんじ。ωcはカットオフ周波数で、fsはサンプリング周波数。
ブロック図は下図を採用。
予備実験は終了。後はLADSPAで組んで実際の音に適用してみる。
上記をコンパイルしてAudacityで起動すると以下のようなインターフェイス。 入力はカットオフ周波数だけだが、実験的に0~20kHzまで扱うようにした。0Hzで実行すると出力信号は0になる。
ホワイトノイズに適用してみた。上段がホワイトノイズで、下段がLPFを適用した状態。カットオフ周波数は1000Hz。
周波数スペクトルを見ると、LPFによって、1000Hz以上が削れているのがわかる。 カットオフ周波数で-4~5dB程度になっている。
お手軽LADSPAであるが、ソースコードはダラダラしやすい。またインターフェイスまわりは、ホスト側が提供することもあって、自由度はあまりない。Audacityでは、パラメーターを増やすとウィンドウサイズばかり大きくなって扱いにくくなってしまう。コンパクトで扱いやすいインターフェイスを作ることは今のところ出来そうもない。
そんなこともあって、ユーザーインターフェイスがVSTのように自由に作れるLV2というLADSPAの後継規格もある。Audacityでもver2.0.6から利用できるようになった。 ただGUIの開発のためにはGTKが必須となって、開発環境がそれなりに巨大になる。コンパイルもMakefileを使うなど、いろいろ大げさな印象。プラットフォームによって開発手続きが違うのも問題。 だったらLADSPAでいいや・・・
sound programming 目次はこちら
まずは、もっともタップ数が少ない1poleのutterworthを試す。 3年以上前にJavaで作っているので、その焼き直し。
上記式から1poleのプロトタイプを計算
LPFを作りたいので、上記式 s に次式を代入する。
LPF: ((z-1)/(z+1)) / (2πfc) |
fcの中はこんなかんじ。ωcはカットオフ周波数で、fsはサンプリング周波数。
ブロック図は下図を採用。
LPF 1pole Butterworth 係数計算
まずは係数を求める部分だけテストしてみた。これはLADSPAではなく、ターミナル上で係数を確認するためのプログラム。
|
a.exe を実行
上記プログラムをコンパイルして、実行すると以下のような結果がでる。LPF Butterworth 1poleの係数がちゃんと出ている。a[0]=1.000000 a[1]=0.866788 b[0]=0.066606 b[1]=0.066606 |
予備実験は終了。後はLADSPAで組んで実際の音に適用してみる。
LADSPA LPF 1pole Butterworth ソースコード
相変わらず、よく理解しないまま作ってしまう。LADSPAの仕様をもう少し調べた方がよいのだが、とりあえず動かすことを優先してしまう。
|
上記をコンパイルしてAudacityで起動すると以下のようなインターフェイス。 入力はカットオフ周波数だけだが、実験的に0~20kHzまで扱うようにした。0Hzで実行すると出力信号は0になる。
ホワイトノイズに適用してみた。上段がホワイトノイズで、下段がLPFを適用した状態。カットオフ周波数は1000Hz。
周波数スペクトルを見ると、LPFによって、1000Hz以上が削れているのがわかる。 カットオフ周波数で-4~5dB程度になっている。
お手軽LADSPAであるが、ソースコードはダラダラしやすい。またインターフェイスまわりは、ホスト側が提供することもあって、自由度はあまりない。Audacityでは、パラメーターを増やすとウィンドウサイズばかり大きくなって扱いにくくなってしまう。コンパクトで扱いやすいインターフェイスを作ることは今のところ出来そうもない。
そんなこともあって、ユーザーインターフェイスがVSTのように自由に作れるLV2というLADSPAの後継規格もある。Audacityでもver2.0.6から利用できるようになった。 ただGUIの開発のためにはGTKが必須となって、開発環境がそれなりに巨大になる。コンパイルもMakefileを使うなど、いろいろ大げさな印象。プラットフォームによって開発手続きが違うのも問題。 だったらLADSPAでいいや・・・
sound programming 目次はこちら