Signal Processing Toolbox | ![]() ![]() |
表示
[b,a]=
invfreqs(h,w,nb,na) [b,a]=
invfreqs(h,w,nb,na,wt) [b,a]=
invfreqs(h,w,nb,na,wt,iter) [b,a]=
invfreqs(h,w,nb,na,wt,iter,tol) [b,a]=
invfreqs(h,w,nb,na,wt,iter,tol,'trace') [b,a]=
invfreqs(h,w,'complex',nb,na,...)
詳細
invfreqs
は、freqs
の逆の操作であり、与えられた複素周波数応答に対応する連続時間伝達関数を求めます。実験解析の見地から、invfreqs
は、ゲインデータや位相データを伝達関数に変換するのに役立ちます。
[b,a]
は、伝達関数の実数の分子係数ベクトル =
invfreqs(h,w,nb,na)
b
および分母係数ベクトルa
を出力します。
この複素周波数応答は、ベクトルw
に設定した周波数点でベクトルh
に与えられます。スカラnb
およびna
は、分子および分母多項式の次数を設定します。
周波数は、0との間のラジアンで設定され、
h
の長さは、w
の長さと等しくしなければなりません。invfreqs
は、-w
でconj(h)
を使って、実数フィルタに対して、適切な周波数領域の対称性を保証します。
[b,a]
は、周波数に対する近似誤差に重みを付けます。 =
invfreqs(h,w,nb,na,wt)
wt
は、w
と同じ長さの重み係数のベクトルです。
invfreqs(h,w,nb,na,wt,iter)
および
invfreqs(h,w,nb,na,wt,iter,tol)
は、得られる線形システムの安定性を保証し、数値的な反復法を使って最良近似を求めるより優れたアルゴリズムを実現します。iter
パラメータは、解が収束するか、あるいは、iter
に設定した反復回数に達するかのいずれかが先に起こったときに、invfreqs
に反復を終了させます。invfreqs
では、(修正した)勾配ベクトルのノルムがtol
未満となるときを収束と定義しています。tol
は、オプションパラメータであり、デフォルトでは0.01に設定されます。すべてが1の重みベクトルを得るには、つぎのステートメントを使用します。
invfreqs(h,w,nb,na,[],iter,tol)
invfreqs(h,w,nb,na,wt,iter,tol,'trace')
は、反復の経過報告を文字で表示します。
invfreqs(h,w,'complex',nb,na,...)
は、複素数のフィルタを作成します。この場合、対称性は要求されません。そして、周波数は、-と
の間でラジアン単位で設定されます。
注意
高周波数を使って高次モデルを構築するときには、よい条件数のa
およびb
の値を得るために、w
に存在する最も高い周波数の1/2の係数で除算して周波数をスケーリングすることが重要です。これは、時間の再スケーリングと対応します。
例題
単純な伝達関数を周波数応答データに変換し、ついでオリジナルのフィルタ係数に戻します。
a=
[1 2 3 2 1 4]; b=
[1 2 3 2 3]; [h,w]=
freqs(b,a,64); [bb,aa]=
invfreqs(h,w,4,5) bb = 1.0000 2.0000 3.0000 2.0000 3.0000 aa = 1.0000 2.0000 3.0000 2.0000 1.0000 4.0000
bb
およびaa
は、b
およびa
とそれぞれ等しくなることに注目してください。ただし、aa
は左半平面に極をもつため、システムは不安定です。invfreqs
の反復アルゴリズムを使って、システムに対する安定近似を求めます。
[bbb,aaa] =
invfreqs(h,w,4,5,[],30)
bbb =
0.6816 2.1015 2.6694 0.9113 -0.1218
aaa =
1.0000 3.4676 7.4060 6.2102 2.5413 0.0001
実験室で収集したゲインデータと位相データを含む2つのベクトルmag
およびphase
と、周波数ベクトル w
があるものとします。つぎのようにして、invfreqs
を使って、このデータを連続系伝達関数に変換することができます。
[b,a] =
invfreqs(mag.*exp(j*phase),w,2,3);
アルゴリズム
デフォルトでは、invfreqs
は、式誤差法を使って、データから最良モデルを同定します。これは、
の bとaに関する連立1次方程式を作成し、MATLABの\
演算子でそれを解くことにより求めます。ここで、A(w(k))およびB(w(k))は、それぞれ周波数w(k)での多項式aおよびbのフーリエ変換であり、n
は周波数点数(h
およびw
の長さ)です。このアルゴリズムは、Levi(参考文献[1])に基づいています。この文献にはいくつかの変形が提案されていますが、高周波数に対する重み関数wt
の考慮があまりなされていません。
より優れた("出力誤差")アルゴリズムでは、初期推定値として、最初のアルゴリズムの出力を使って、繰り返し探索に対して、減衰付きGauss-Newton法を使います(参考文献[2])。これは、実際の周波数応答点と希望の周波数応答点との間の2乗誤差の重み付き和を最小化する直接的な問題を解きます。
参考
|
アナログフィルタの周波数応答 |
|
ディジタルフィルタの周波数応答 |
|
周波数データからの離散時間フィルタの同定 |
|
Prony法を使った時間領域IIRフィルタ設計 |
参考文献
[1] Levi, E.C., "Complex-Curve Fitting," IRE Trans. on Automatic Control, Vol. AC-4 (1959), pp. 37-44.
[2] Dennis, J.E., Jr., and R.B. Schnabel. Numerical Methods for Unconstrained Optimization and Nonlinear Equations. Englewood Cliffs, NJ: Prentice-Hall, 1983.
![]() | intfilt | invfreqz | ![]() |