• ベストアンサー

IIRフィルタの応答を高速にする方法

入力信号をIIRフィルタに通すと、一般に、出力が落ち着くまで時間がかかります。 この時間を短縮する方法はありますでしょうか。 例えば、一定振幅 A Hz + B HzのSin波を、中心周波数がA Hzで帯域幅が狭く次数の高いIIR BPFに通すと、出力信号の振幅は、しばらく0が続き、途中からグワっと大きくなり、やがて一定のA Hzに落ち着きます。 帯域幅や次数を変えないで、信号を入れた直後から、振幅一定のA Hzの出力を得たい(応答を早める)のですが、可能でしょうか。 アドバイス、お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#101087
noname#101087
回答No.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) してくれます。   

ishi_mitsu
質問者

お礼

素晴らしいです! Excel等で式を組立てられたのですね。 確かに、G(ω)はω=1で0、ω= q1, q2で∞になっています。 並列共振、直列共振、抵抗を組合わせて、フィルタ特性を作る 総合力に感激しました。 因数分解の方法も参考になります。今度、試してみます。 後は、G(ω)そのものか、微調整をしてフィルタ特性をゆるめ、 遅延を少なく持っていけそうです。 また、(一朝一夕にはいきませんが)Excel上でG(ω)を求める式を 組み立ててみたいと思っています。 具体的にご指導いただき、まことにありがとうございました。

その他の回答 (7)

noname#101087
noname#101087
回答No.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 スプレッド・シートで関数シミュレート済み。   

ishi_mitsu
質問者

お礼

いつもありがとうございます。助かります。 私は、次数とカットオフ周波数から、一律に係数を求めており、周波数と減衰量から伝達関数を求めたことはないため、興味深く思っています。 分からない用語もありますが、まずは式をたどってみて、その上でまたご質問いたします。(確認に日数がかかりそうです) 今回の回答を通じ、遅延の少ない減衰特性を得る技術を身に付けられれば、嬉しく思います。

ishi_mitsu
質問者

補足

ボード線図にて周波数特性を確認しました。 きれいな形をしていました。ありがとうございました。 いくつか分からない点が出ました。 またご指導頂けると嬉しいです。 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等はありますでしょうか。 質問ばかりですみません。よろしくお願いいたします。

noname#101087
noname#101087
回答No.6

訂正も限界オーバーですが、G(ω)は右辺の逆数でした。 言い訳も種切れ。   

ishi_mitsu
質問者

お礼

重ねてのご回答、ありがとうございます。 回答をたどり確認いたします。 ただ、私の能力とシミュレーション環境の関係で、時間がかかりますが、 ご容赦下さい。 具体的なご指導、本当に助かります。 取り急ぎお礼まで。

noname#101087
noname#101087
回答No.5

度々の訂正、蒙御免。 有理関数の通分をサボってました。 ------------------  G(ω) = 1 + (K/2)*jω(1 - ω^2)/(q1^2 - ω^2)(q1^2 - ω^2)   K = 1.7, q1 = 0.94, q2 = 1.06

noname#101087
noname#101087
回答No.4

タイプミスの訂正。 ----------------  G(ω) = K*(q1^2 - ω^2)(q1^2 - ω^2)/jω(1 - ω^2)   K = 1.7, q1 = 0.94, q2 = 1.06

noname#101087
noname#101087
回答No.3

>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 を付加して除去。 おそらく、これが最低遅延の目安になるでしょう。   

noname#101087
noname#101087
回答No.2

>質問:最少移相関数とは何でしょうか。 .... IIR なら、おそらく「最少移相(minimum phase-shift)」でしょうね。 FIR で直線位相にすると、「最少移相」でなくなり、遅延量が増えます。   ↓ 参照例  http://ufcpp.net/study/dsp/phase.html >線形位相と最小位相 >A と B (Hz)は近いため、急峻なフィルタが必要です。 A を通過し、B を阻止するだけなら、BEF (帯域阻止フィルタ) にして余分な減衰量を減らせば、改善の余地があるかも。 現設計が IIR ということは、B に減衰極 (通過零点) があるのでしょうけど、余分な減衰域はどの程度?   

ishi_mitsu
質問者

お礼

重ねてのご回答ありがとうございました。 >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 を通すと、遅延が小さくなるかもしれない、と思いました。

noname#101087
noname#101087
回答No.1

ご質問の文面から憶測できる原因。 ・出力信号の遅れ … バンド幅が狭いので、通過信号の遅延が増大。(最少移相関数なのでしょうね) ・リンギング大 … 減衰特性の立ち上がりが急峻で、過渡応答が振動的。 A と B (Hz) が近すぎて、設計の自由度がほとんど無いかも。 A がワンポイントであれば、なるべくダラダラ減衰特性を立ち上げる。

ishi_mitsu
質問者

補足

早速のご回答、ありがとうございます。 > ・出力信号の遅れ … バンド幅が狭いので、通過信号の遅延が増大。 > (最少移相関数なのでしょうね) ご指摘の通り、狭いバンド幅です。 質問:最少移相関数とは何でしょうか。初めて知りました。 解説のあるWEBや本を教えて頂ければ幸いです。 IIRフィルタの係数計算は、MATLAB等を使わず自前で行っています。 今後もそうしたいと思います。 > ・リンギング大 … 減衰特性の立ち上がりが急峻で、過渡応答が振動的。 急峻な特性が必要で、バタワース8次(縦続型4段)のBPFとしました。 過渡応答は、感覚的な説明ですが「口ばしの長いコブラの頭」の ような形です。 > A と B (Hz) が近すぎて、設計の自由度がほとんど無いかも。 その通りです。A と B (Hz)は近いため、急峻なフィルタが必要です。 > A がワンポイントであれば、なるべくダラダラ減衰特性を立ち上げる。 必要以上に急峻にしない、ということですね。 ワンポイントの時は、そのように致します。

関連するQ&A

  • バンドパスIIRフィルタの低域におけるエラー

    バンドパスIIRフィルタの低域におけるエラー 申し訳ないのですが教えて下さい。  波形データのオクターブバンド分析結果を出す為に、ScilabやOctaveなどMatlabクローンのソフトを使ってバンドパスIIRフィルタを使用して各バンドでフィルタを通過させるのですが、ナイキスト周波数に対して通過域が低域にありすぎるとエラーを起こすのか、結果が出てきません。サンプリング周波数の値を変えて遮断周波数との差を縮めればそのようなエラーは起きません。例えば、480Hzサンプリングでも、1Hzと2Hzの中心周波数のバンドパスフィルタは値が帰っていなかったり、波形がおかしかったりします。  フィルタ次数は4で行っていて、1などに下げればそのナイキスト周波数と遮断帯域の差ではエラーを起こさなくなりますが、もっと差が広がった場所では起きますし、JISで定めるオクターブフィルターの遮断性能を考えると次数を下げる訳にも行きません。  本家Matlabはもっていないので判りませんが、会社のLabviewですと問題はありません。解決策はデサンプリングしてエラーを起こす帯域ではサンプリング周波数を落とすしか無いのかな?と思うのですが、実際はどうなのでしょうか?お教え頂けると幸いです。 宜しくお願い致します。

  • デジタルフィルタの設計

    はじめてデジタルフィルタの設計をすることになりました。 決まっている事項は以下のようになります。 ・25msごと(40Hz)にA/D変換されたデータが出力されます。 ・出力データを使って波形を描きます。 ・描く波形はおよそ周波数は0~10Hzのものです。 ・係数を算出して、C言語のプログラムに組み込みます。 今のところ決まっているのはこのくらいです。 自分でも勉強していますが、 FIRは計算が比較的簡単で、安定しているが、次数が多くなる。 IIRは複雑で、不安定になることもあるが、次数が少なくてよい。 FIRでは、窓関数やREMEZ法などリプルを小さくする方法がある。 IIRでは、バタワース、チェビシェフ、ベッセルなどの方法がある。 程度のことしかわかっていません。 どのように設計していけばいいかわかりません。 経験のある方、良いアドバイスをお願いします。 また何かフリーツールで設計できるものがあれば教えてください。

  • FIRフィルタの遅延量補正とIIRフィルタの安定性について教えて頂きた

    FIRフィルタの遅延量補正とIIRフィルタの安定性について教えて頂きたいのですが。  双一次z変換を用いていくつかのIIRフィルタを作る事が出来ました。Scilbが持つIIR関数と比較して同じ結果になっています。IIRフィルタがフィルタ係数によっては不安定=発信したりする、というのはScilab等の結果と同じになる→フィルタ係数も同じ→不安定にならない。と思ってよいのでしょうか?。例えばですが、あるサンプリング周波数の波形データをフィルタする為に、同じサンプリング周波数で作ったImplus波形をIIRフィルタに放り込んで周波数応答を確認したら、実際にフィルタする波形データの最初から最後までその周波数応答でフィルタされると私は理解しているのですが。  私のフィルタを使う用途の場合は、フィルタの計算速度は特に制限は無く、速いに越した事はありませんが得られた結果が正確な事が大切なので、安定性や係数誤差の事を考えるとIIRフィルタではなくFIRフィルタでも構わないのですが、FIRフィルタの場合だとタップ数が多くなるので波形の遅延量が無視出来ません。フィルタを通した波形は次定数fastのレベル波形にして100Hz位で出すとは言え、IIRよりは数秒かコンマ数秒遅延した結果になると思います。そのような場合、遅延量を補正するとしたらどうしたら良いのでしょうか?。個人的にはタップ数が(IIRの場合は次数が)遅延量と思っているのですが。  宜しくお願い致します。

  • 周波数解析について

    ある信号をFFTを用いて周波数解析をしているのですが、単純なことについて教えて下さい。 自分の中のイメージとしては、周波数解析とは、 ある波を一定の周波数ごとに分解して、ある周波数帯域にどれくらいの成分が含まれているかを検討する物だと思っています。 自分のイメージが正しければ、あることが疑問に浮かんでいます。 現在、ある信号を周波数解析する前段階として、エラー(人工産物的な要素)を除外しています。 方法としては、時系列の信号データを一定時間毎に区切ってFFTをかけると言う物です。 自分が解析したい、周波数帯域は1Hz~35Hzまでの帯域と考えています。 綺麗な信号ならば問題なのですが、先のようなエラーと言うかノイズが載っている信号に対して、35Hzのフィルターをかけるとノイズの部分がなくなりクリアーな波形が見られます。 自分の知識が少ないため、ノイズが見られる信号は破棄していましたが、考えてみれば、必要な部分は1Hz~35Hzなので、35Hz以上のノイズ(フィルターをかけてなくなる領域のノイズ)が乗っていても、自分が必要な周波数帯域での周波数解析には関係ないのではないだろうか?と考えています。 少々ややこしい内容の質問になりましたが、アドバイス宜しくお願いいたします。

  • FFTによるフィルタの可能性について

    はじめまして、信号処理については初心者です。教えていただけると幸いです。 ソフト処理でディジタルフィルタを作成したいと思っています。 リアルタイム処理が最終目標です。 IIRとかFIRとかの手法がありますが、FFTによるフィルタリングの可能性はあるのか知りたいです。 エクセルを用いて、模擬的に作った方形波をFFT演算して、 その結果の高い周波数部分を0にして逆FFTすると、綺麗に高調波が除去されていました。 この方法でのフィルタリングは実現可能なものと考えてよいのでしょうか? FFT処理では、エクセルの結果を見る限り、(当たり前ですが)遮断周波数でスパッと切れた波形が得られています(遮断周波数以上の振幅は0になる)。 一方、フィルタの本などでは、振幅減衰は1次で-20dB/dec、2次で-40dB/decと書かれており、 物理法則上そうなるものと思っていました。 FFTを利用したフィルタリング(遮断周波数以上の振幅は0)というのは、 何か原理的に(物の理として)おかしいところはないのか、不安に思っています。 また、電気系の雑誌にはIIRフィルタ等の使用について書かれている記事を見受けますが、 FFTフィルタリングが可能だとすれば、こちらの方が理想的なフィルタが得られることになります。 何か問題があってFFTフィルタリングが採用されていないと思いますが、どのような問題を秘めているのでしょうか。 (FFTフィルタが理想なのに、IIRフィルタが使用される理由は?) 上にも記載しましたが、将来的には高速マイコン(DSP,FPU付き)を使用してリアルタイム的な処理を行いたいと考えています(サンプリング周波数は16kHz程度です)。 FFTフィルタリングの設計の肝、IIR(FIR)フィルタとの使い分けについても、ご教示いただけると幸いです。 どうぞよろしくお願いいたします。

  • 周波数特性のグラフ

    OSCの出力を、10[mV]一定として、周波数を、15[Hz]から100[kHz]まで変化させたときの、出力電圧を測定し、電圧増幅度、電圧利得を求める。結果より、周波数特性のグラフを、片対数グラフに描き、帯域幅を求めなさい。周波数の目盛りは、1,1.5,2,3,5,7,10,15,20・・・とする。 をやって下さい。よろしくお願いします。

  • 周波数特性のグラフ

    OSCの出力を、10[mV]一定として、周波数を、15[Hz]から100[kHz]まで変化させたときの、出力電圧を測定し、電圧増幅度、電圧利得を見て、結果より、周波数特性のグラフを、片対数グラフに描き、帯域幅を求めなさい。周波数の目盛りは、1,1.5,2,3,5,7,10,15,20・・・とする。 というグラフを描く課題が出ました。まったくわからなくて困っています。教えてください。よろしくお願いします。

  • 振幅変調の長所について

    振幅変調の長所のひとつに、周波数変調よりも帯域幅が狭いということがあげられると思いますが、帯域幅が狭いと具体的にどういった点でよいのでしょうか?

  • 標本化した信号を再生する補間フィルタについて

    標本化した信号を、再生する補間フィルタについての質問です。 標本化する連続信号の帯域幅の2倍以上の標本化周波数で標本化すればエイリアスが生じないのはわかるのですが、 もし、補間フィルタの帯域幅が大きすぎる時 【例】 原信号の帯域幅  【f=0.5】 標本化周波数       【fs=2.0】 補間フィルタの帯域幅が 【f’=2.0】 原信号x(t)のスペクトル X(f) 標本化した信号のスペクトルがX’(f)=1/Ts∑X(f-nTs) の時 保管フィルタの中に、X'(f)のn=0の時の項だけでなく、n=1,-1の項の波形も少し含まれると思うのですが、 この場合、再生した波形はどうなるのですか? 原信号x(t)が普通に復元されると考えてしまっていいのでしょうか? どなたか、お力添えをお願いします。

  • 信号の雑音などについて

    次の文章の意味することをわかりやすく教えて頂きたいのです。 [時間域の不規則信号の振幅の二乗平均平方根値は、分光器の帯域幅に依存する。] どうして分光器の帯域幅に依存しているといえるのでしょうか。 よろしくお願いいたします。