IIRディジタルフィルタの縦列接続変換とは?

このQ&Aのポイント
  • IIRディジタルフィルタの縦列接続変換について、量子化誤差を考慮した設計方法について解説します。
  • 4次のIIRフィルタを2次IIRフィルタの縦列接続に変換したい場合の手法について調査しました。
  • 被除数と除数を多項式で表し、除法を行うことで、伝達関数の分母と分子を2次多項式に分解する方法があります。
回答を見る
  • ベストアンサー

IIRディジタルフィルタの縦列接続変換について

4次のIIRフィルタ(1次帯域阻止フィルタ)を設計したのですが、 量子化誤差の観点から、2次IIRフィルタの縦列接続への変換を考えています。 (4次のままだと、係数は固定小数点で54bitほど必要なようです;) そのため、伝達関数の分母、分子それぞれの5次多項式を2次多項式に分解したいのですが、 どのような方法があるのでしょうか? 自分なりに途中まで求めてみたのですが・・・ (1)被除数を a0 + a1*Z^-1 + a2*Z^-2 + a3*Z^-3 + a4*Z^-4 除数を b0 + b1*Z^-1 + b2*Z^-2 と置き、多項式の除法を行う。 (商、余り には係数an,bnが含まれた形になる) (2)余りが0になる係数an,bnを求める。 (余りは2項になるので、連立方程式を解く必要がある) ・・・ここまでやってみたのですが、 4次IIR以上のことを考えると、冗長なため、少々気力が尽きてきました; 便利な手法があればご教授いただけないでしょうか。 以上、よろしくおねがいします。

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

  • ベストアンサー
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.2

#1に関して補足、修正 通常は a0 + a1*x + a2*x^2 + a3*x^3+ a4*x^4=0 全体をa4で除して、最高次(この場合はx^4)の係数を1にして (c0+c1*x+c2*x^2)(d0+d1*x+d2*x^2) のc2,d2を1にします。 でないと、決定すべき係数の数が多すぎて一意に決まりませんので。 ((x-x1)(x-x2)(x-x3)(x-x4)はその形になってます) 実係数多項式の解を求めるプログラムでは、複素解は全て共役になっていることを使って、二次式(とひとつの一次式)の積に展開し、二次式から解の公式で計算するアルゴリズムが良く使われるようです。 今回の用途では、二次式の展開まででよい(その後の解の計算は不要)ので、多少計算が楽になるかもしれません。 実係数の多項式の解を数値計算する場合、順番に二次式を除していく方法では、だんだん誤差が累積し、後のほうで求めた解の精度が落ちる可能性があります。二次式への分解が完了したら、積を再計算して、もとの多項式と係数を比較してみるなどの考慮が必要かと思います。

tak_man
質問者

お礼

回答いただいた内容で数値計算関係の本を探したところ、 二次式に展開するベアストウ・ヒッチコック法のアルゴリズムとソースコードを みつけました。(Numerical Recipes in Cは在庫切れでした・・・大学でみたことあったんですが・・) 回答ありがとうございました。

その他の回答 (1)

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.1

要は、実係数の4次の方程式 a0 + a1*x + a2*x^2 + a3*x^3+ a4*x^4=0 を満たす解(x1,x2,x3,x4)を求めて、(係数が実数なので、複素根は共役になる。) 分母の多項式を (x-x1)(x-x2)(x-x3)(x-x4) =(c0+c1*x+c2*x^2)(d0+d1*x+d2*x^2) という形に持っていければよい。 ということになります。 数値解を求めるには、市販の数式処理プログラムを使うのが手っ取り早くて楽なのですが、 使えない場合には、自分で計算プログラムを作る必要が出てくるかもしれません。 繰り返し計算で、実係数多項式の解をもとめるプログラムはいくつか公開されています。 (私が使ったことがあるのは、Numerical Recipes in Cに掲載のプログラム。手順は、ご質問でかかれているように、二次の多項式で除算をして、余り(一次の式)が0になるように収束計算を行う、というものでした。)

tak_man
質問者

お礼

なるほど! (x-x1)(x-x2)(x-x3)(x-x4)の形にできればいかようにも加工できますね。 多項式の解の数値計算なら、より高次な多項式への汎用性も期待できそうです。 回答ありがとうございました。

関連するQ&A

  • IIRフィルタについて

    IIRフィルタで疑問があり、過去のページを調べてもわからなかった ので新たに質問を作りました。 今検討しているのは下記HPの図1のIIRフィルタの1次版(a1,b1,b0のみ) で伝達関数(Z領域)、サンプリング周波数、各係数が分かっています。 (逆に言うとこれしか分かってません) ここで上記の資産を流用して新たにサンプリング周波数 だけを変更して使いまわしたいのですが係数をどのように 変更したらよいのか分からずに困っています。 (アナログの伝達特性などはわかりません) どなたか分かる方、教えていただけないでしょうか。 よろしくお願いします。 http://adsp2191.hp.infoseek.co.jp/misc/009_difficult_sp.shtml もしくは http://www.ics.es.yamanashi.ac.jp/~hanawa/asp/ppt/asp-6.ppt(39枚目スライドの右図)

  • FIR,IIRフィルタの伝達関数に対する周波数特性を求めるには?

    FIRやIIRフィルタの伝達関数を式変形すると、周波数特性や移送特性が求められるようなのですが、伝達関数からの式変形がわからず困っています。 周波数特性を求めたいFIR,IIRフィルタの伝達関数は以下のようになっています。 直接型FIRフィルタの伝達関数 H(z)=h(0) + h(1)・z^-1 + h(2)・z^-2 + ・・・ h(x):係数(定数) http://momiji.i.ishikawa-nct.ac.jp/dfdesign/gfir/gfir.pdf 縦続型のIIRフィルタの伝達関数 H(z)=k1・(a10 + a11・z^-1 + a12・z^-2)/(1 + b11・z^-1 +b12・z^-2) ・k1・(a10 + a11・z^-1 + a12・z^-2)/(1 + b11・z^-1 +b12・z^-2) ・・・・ kx,axx,bxx:係数(定数) http://momiji.i.ishikawa-nct.ac.jp/dfdesign/giir/giir.pdf ここで、 z=exp(jwT)を代入し、 H(exp(jwT))=|H(w)|exp(jθ(w)) と式変形した際の|H(w)|が周波数特性となるそうです。 ただし、能力不足のため式の変形ができず周波数特性を求めることができません。 わかるかたご回答よろしくお願いします

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

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

  • IIR型の低域通過フィルタについて

    次のような問題を出されたのですが、中間試験に備えて解き方をマスターしたいと思っています。 どなたか解答例をお願いします。 遮断周波数がπ/3となるIIR型の低域通過フィルタを設計したい。 (a)アナログバタワースフィルタから、双1次z変換によってデジタルフィルタの設計をしたい。このとき、アナログフィルタにおける遮断周波数はどうなるか。 (b)上記の遮断周波数で設計した3次バタワースフィルタの伝達関数は添付画像の式のようになる。対応するデジタルフィルタの伝達関数H(z)を示せ。 (c)|H(z)|の周波数特性を求めよ。 どなたか、回答よろしくお願いします。

  • IIR型の低域通過フィルタについて

    次のような問題を出されたのですが、解き方がさっぱり分かりません。 どなたか解答例をお願いします。 遮断周波数がπ/3となるIIR型の低域通過フィルタを設計したい。 (a)アナログバタワースフィルタから、双1次z変換によってデジタルフィルタの設計をしたい。このとき、アナログフィルタにおける遮断周波数はどうなるか。 (b)上記の遮断周波数で設計した3次バタワースフィルタの伝達関数は添付画像の式のようになる。対応するデジタルフィルタの伝達関数H(z)を示せ。 (c)|H(z)|の周波数特性を求めよ。

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

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

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

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

  • FIRフィルタ 零点から係数を求める。

    FIRフィルタの係数の求め方がわかりません。 測定した信号から特定次数の高調波をカットするフィルタを 設計したいのですが、 どのように計算したらよいのかわからず、困っています。 ちなみに、タップ数は10と決まっています。 カットしたい高調波は 1次調波・3次調波・5次調波・7次調波・・・ という具合に、4~6こ程度あるので、単にBEFやBPFでは思ったような 特性が得られません。 また、Re-Im軸の単位円上から零点としたいn数の調波の座標(an,bn)を 読み取り、 (x-a0-b0i)(x-a+Bi)(x-a1-b1i)… という式に代入し、xの0~2n+1乗までの係数を求めるという方法も あるようなのですが、こちらもよい特性は得られませんでした。 よろしくお願いします。

  • 誰か教えてください・・・。

    木曜日までの宿題なんですけど誰か教えてください・・・。 注:以下のan+1,bn+1 などはn+1番目のa,bという意味です。わかりにくくてすいません。 0>a1>b1 , an+1=√(anbn) , bn+1=(an+bn)/2 (n=1,2,3,・・・) で与えられている数列{an},{bn}について、次を証明せよ。 (1) {an}は増加関数、{bn}は減少関数である。 (2) lim(n→∞)an=lim(n→∞)bn もう1問いいですか。 回転楕円形x^2+y^2+(z^2)/4=1の表面上で、f(x,y,z)=x+y+z を最大化するような座標を求めなさい。 むずかしいっすよね・・

  • [0はまたは正の整数とする。

    [0はまたは正の整数とする。 anをa0=1,a1=2,an+2=an+1+an によって定める。anを3で割った余りをbnとし cn=b0+・・・・・+bn とおく。 題1:b0+,・・・・・,+bnを求めよ。] と言った問題がありました。b6の時0とこたえはなっていました。 そこらへんの証明が全く解りません。 どなたか助けて下さい よろしくお願いしますm--m 追加でanのnはaの右下に小さくついていました