- ベストアンサー
IIRフィルタの応答を高速にする方法
入力信号をIIRフィルタに通すと、一般に、出力が落ち着くまで時間がかかります。 この時間を短縮する方法はありますでしょうか。 例えば、一定振幅 A Hz + B HzのSin波を、中心周波数がA Hzで帯域幅が狭く次数の高いIIR BPFに通すと、出力信号の振幅は、しばらく0が続き、途中からグワっと大きくなり、やがて一定のA Hzに落ち着きます。 帯域幅や次数を変えないで、信号を入れた直後から、振幅一定のA Hzの出力を得たい(応答を早める)のですが、可能でしょうか。 アドバイス、お願いいたします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>3.極、零点はs平面状に無数に存在します。その中から、どのようにして G(s)の式を導いたのでしょうか。 1. 2. への疑問も、これで氷解するでしょう。 一口でいえばカット&トライですけど、ターゲットを単純化しているので、それほど面倒じゃありません。 (すべて、スプレッドシート上で、シート関数のみ使って試作) ・直線周波数ω = 1±2% で 3dB ダウン、1±4% で 10dB ダウン、隣接 B (1±6%) に減衰極、の伝達関数 G(ω) の試作。 まず想いつくのは、隣接 B (1±6%) にて並列共振点、中心 ω = 1 にて直列共振点となる LC 共振回路を入出力抵抗間に直列挿入したシンプルな 2-ポートを想定。 G(ω) = 1/{1 + (K/2)*jω(1 - ω^2)/(q1^2 - ω^2)(q1^2 - ω^2)} K = 1.7, q1 = 0.94, q2 = 1.06 明らかに、ω = 1 にて 0 dB、ω = q1, q2 にて -∞dB ですね。 K は、ω = 1±2% で 「約」3dB ダウンとなるよう狙ってみました。 その結果がω = 1±4% で 10dB ダウン。 (体裁のため) 因数分解した結果 (s = jω)、 G(s) = (s^2 + q1^2)(s^2 + q2^2)/(s^2 + b1*s +c1)(s^2 + b2*s +c2) q1 = 0.941, q2 = 1.059, b1 = 0.235013, c1 = 0.990744, / b2 = 0.059105, c2 = 1.002328 でした。 なお因数分解は "Bairstow-Hitchcock の方法" が便利。 ↓ 参照ページ http://www.mech.titech.ac.jp/~dosekkei/kuma/material_lectures/materialoffer/math_bairstw.pdf 次数が少ないので、スプレッドシートで組むほうが楽チン。 クローン(コピー)を貼り付けていくと、逐次勘定 (iteration) してくれます。
その他の回答 (7)
遅ればせの因数分解。...... 忘却しそうなので為念、メモ。 >直線周波数ω (A で規準化)の 1±2% で 3dB ダウン、1±4% で 10dB ダウン、隣接 B (1±6%) に減衰極、という伝達関数 G(s) ....... (s = jω) G(s) = (s^2 + q1^2)(s^2 + q2^2)/(s^2 + b1*s +c1)(s^2 + b2*s +c2) q1 = 0.941, q2 = 1.059, b1 = 0.235013, c1 = 0.990744, / b2 = 0.059105, c2 = 1.002328 スプレッド・シートで関数シミュレート済み。
お礼
いつもありがとうございます。助かります。 私は、次数とカットオフ周波数から、一律に係数を求めており、周波数と減衰量から伝達関数を求めたことはないため、興味深く思っています。 分からない用語もありますが、まずは式をたどってみて、その上でまたご質問いたします。(確認に日数がかかりそうです) 今回の回答を通じ、遅延の少ない減衰特性を得る技術を身に付けられれば、嬉しく思います。
補足
ボード線図にて周波数特性を確認しました。 きれいな形をしていました。ありがとうございました。 いくつか分からない点が出ました。 またご指導頂けると嬉しいです。 1.G(s)の極を計算しますと、 極1=0.1175065±0.9884008j、極2=0.0295525±1.0007271j abs(極1)=0.9954 (-0.46%)、 abs(極2)=1.0012 (+0.12%) となっていました。 ここは、本来は(-2%)、(+2%)となるのでしょうか。 (なお、零点は、(-6%)、(+6%)となっています) 2.「1±4%で10dBダウン」は、設計条件として与えて、解析的にG(s)を 求めたのでしょうか。 それとも、極、零点を調節して、「1±4%で10dBダウン」に近付けたのでしょうか。 3.極、零点はs平面状に無数に存在します。その中から、どのようにして G(s)の式を導いたのでしょうか。魔法のように思えます。 参考になるWeb等はありますでしょうか。 質問ばかりですみません。よろしくお願いいたします。
訂正も限界オーバーですが、G(ω)は右辺の逆数でした。 言い訳も種切れ。
お礼
重ねてのご回答、ありがとうございます。 回答をたどり確認いたします。 ただ、私の能力とシミュレーション環境の関係で、時間がかかりますが、 ご容赦下さい。 具体的なご指導、本当に助かります。 取り急ぎお礼まで。
度々の訂正、蒙御免。 有理関数の通分をサボってました。 ------------------ G(ω) = 1 + (K/2)*jω(1 - ω^2)/(q1^2 - ω^2)(q1^2 - ω^2) K = 1.7, q1 = 0.94, q2 = 1.06
タイプミスの訂正。 ---------------- G(ω) = K*(q1^2 - ω^2)(q1^2 - ω^2)/jω(1 - ω^2) K = 1.7, q1 = 0.94, q2 = 1.06
>A(Hz)の両側に±(半音の1/3)程の帯域幅を設け .... 「半音」とは、freq 比(間隔)で 6% くらいですかね。 ±(半音の1/3)程の帯域幅なら 2% 。 目安の一例。 直線周波数ω (A で規準化)の 1±2% で 3dB ダウン、1±4% で 10dB ダウン、隣接 B (1±6%) に減衰極、という伝達関数 G(ω) を想定すると、 G(ω) = K*(q1^2 - ω^2)(q1^2 - ω^2)/jω(1 - ω^2) K = 1.7, q1 = 0.94, q2 = 1.04 隣接 B より外側の不足分は、ゆるやかな BPF を付加して除去。 おそらく、これが最低遅延の目安になるでしょう。
>質問:最少移相関数とは何でしょうか。 .... IIR なら、おそらく「最少移相(minimum phase-shift)」でしょうね。 FIR で直線位相にすると、「最少移相」でなくなり、遅延量が増えます。 ↓ 参照例 http://ufcpp.net/study/dsp/phase.html >線形位相と最小位相 >A と B (Hz)は近いため、急峻なフィルタが必要です。 A を通過し、B を阻止するだけなら、BEF (帯域阻止フィルタ) にして余分な減衰量を減らせば、改善の余地があるかも。 現設計が IIR ということは、B に減衰極 (通過零点) があるのでしょうけど、余分な減衰域はどの程度?
お礼
重ねてのご回答ありがとうございました。 >IIR なら、おそらく「最少移相(minimum phase-shift)」でしょうね。 >FIR で直線位相にすると、「最少移相」でなくなり、遅延量が増えます。 > ↓ 参照例 > ?http://ufcpp.net/study/dsp/phase.html? >線形位相と最小位相 難しそうですね。後で勉強してみます。 ありがとうございます。 >A を通過し、B を阻止するだけなら、BEF (帯域阻止フィルタ) にして余分な減衰量を減らせば、改善の余地があるかも。 >現設計が IIR ということは、B に減衰極 (通過零点) があるのでしょうけど、余分な減衰域はどの程度? 情報が不十分で、申し訳ありません。 実際は、入力信号は、半音づつ異なる複数の音です。 その中から、A(Hz)のみ取り出したいのです。 そのため、A(Hz)の両側に±(半音の1/3)程の帯域幅を設けて います。 帯域幅をもっと大きくできればいいのですが、 半音が区別できなくなります。 >余分な減衰域どの程度? 急峻で帯域幅を狭くする必要があるため、余分な減衰域は 無さそうです。 帯域幅の狭いBPFではなく、カットオフ周波数が ・A(Hz)-(半音の1/3)のHPF と、 ・A(Hz)+(半音の1/3)のLPF を通すと、遅延が小さくなるかもしれない、と思いました。
ご質問の文面から憶測できる原因。 ・出力信号の遅れ … バンド幅が狭いので、通過信号の遅延が増大。(最少移相関数なのでしょうね) ・リンギング大 … 減衰特性の立ち上がりが急峻で、過渡応答が振動的。 A と B (Hz) が近すぎて、設計の自由度がほとんど無いかも。 A がワンポイントであれば、なるべくダラダラ減衰特性を立ち上げる。
補足
早速のご回答、ありがとうございます。 > ・出力信号の遅れ … バンド幅が狭いので、通過信号の遅延が増大。 > (最少移相関数なのでしょうね) ご指摘の通り、狭いバンド幅です。 質問:最少移相関数とは何でしょうか。初めて知りました。 解説のあるWEBや本を教えて頂ければ幸いです。 IIRフィルタの係数計算は、MATLAB等を使わず自前で行っています。 今後もそうしたいと思います。 > ・リンギング大 … 減衰特性の立ち上がりが急峻で、過渡応答が振動的。 急峻な特性が必要で、バタワース8次(縦続型4段)のBPFとしました。 過渡応答は、感覚的な説明ですが「口ばしの長いコブラの頭」の ような形です。 > A と B (Hz) が近すぎて、設計の自由度がほとんど無いかも。 その通りです。A と B (Hz)は近いため、急峻なフィルタが必要です。 > A がワンポイントであれば、なるべくダラダラ減衰特性を立ち上げる。 必要以上に急峻にしない、ということですね。 ワンポイントの時は、そのように致します。
お礼
素晴らしいです! Excel等で式を組立てられたのですね。 確かに、G(ω)はω=1で0、ω= q1, q2で∞になっています。 並列共振、直列共振、抵抗を組合わせて、フィルタ特性を作る 総合力に感激しました。 因数分解の方法も参考になります。今度、試してみます。 後は、G(ω)そのものか、微調整をしてフィルタ特性をゆるめ、 遅延を少なく持っていけそうです。 また、(一朝一夕にはいきませんが)Excel上でG(ω)を求める式を 組み立ててみたいと思っています。 具体的にご指導いただき、まことにありがとうございました。