- 締切済み
CでIIRフィルタを作りたいのですが。。。
IIRフィルタで、BPF(バンドパスフィルタ)を作りたいのですが、 どうすればよいでしょうか? インターネットとかで検索してみても、バンドパスについてはぜんぜん発見できませんし、 本を読んでもほぼ同様。式がいきなりバンっと出てきてお終い。おいおい、そんで 係数はどうすればいいんだよ?どう使うんだよ?って感じです。 詳しいIIRフィルタの作り方の解説orプログラム&係数の設定方法、お待ちしてます。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
IIRだとフィルタの設計(係数を決めるということ)は一つ間違えると発振したり不安定になるので、具体的には一つの専門書になるほどの代物だそうです。 私も詳しくはありませんが、帯域フィルタであれば、とりあえずつかえそうな式がありますのでお知らせします。 下限遮断周波数Fa、上限遮断周波数Fbとします。 フィルタの式を、 Yn=SUM(k=0,M){Ck * Xn-k} + SUM(j=1,N){ Dj * Yn-j } とします。 このとき、 C0 = - b /{(1+a)(1+b)} C1 = 0 C2 = b / {(1+a)(1+b)} D1 = {(1+a)(1-b)+(1-a)(1+b)}/{(1+a)(1+b)} D2 = - {(1-a)(1-b)}/{(1+a)(1+b)} a = i * [(1-Za)/(1+Za)] b = i * [(1-Zb)/(1+Zb)] i は虚数。 Za = Exp[ 2 * π * i * Fa * Δ ] Zb = Exp[ 2 * π * i * Fb * Δ ] ここで、Δは標本化間隔です。 なお、a, bは実数になります。 詳しくは Numerical Recipes in C という本を参照ください。
お礼
ありがとうございました