ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

invfreqz

周波数応答データからの離散時間フィルター パラメーターの同定

構文

[b,a] = invfreqz(h,w,n,m)
[b,a] = invfreqz(h,w,n,m,wt)
[b,a] = invfreqz(h,w,n,m,wt,iter)
[b,a] = invfreqz(h,w,n,m,wt,iter,tol)
[b,a] = invfreqz(h,w,n,m,wt,iter,tol,'trace')
[b,a] = invfreqz(h,w,'complex',n,m,...)

説明

invfreqz は、freqz逆演算です。特定の複素周波数応答に対応する離散時間伝達関数が求められます。実験室の解析の見地から、invfreqz は、振幅データや位相データを伝達関数に変換するのに役立ちます。

[b,a] = invfreqz(h,w,n,m) では、伝達関数の実数の分子係数ベクトル b および分母係数ベクトル a が返されます。

H(z)=B(z)A(z)=b(1)+b(2)z1++b(n+1)zna(1)+a(2)z1++a(m+1)zm

この複素周波数応答は、ベクトル w に指定した周波数点において、ベクトル h で与えられます。スカラー n および m は、分子多項式および分母多項式の希望の次数を指定します。

周波数は、0 ~ π のラジアン単位で指定し、h の長さは w の長さと等しくしなければなりません。invfreqz では、-wconj(h) を使用して、実数フィルターに対して適切な周波数領域の対称性を保証します。

[b,a] = invfreqz(h,w,n,m,wt) では、周波数に対する近似誤差に重みが付けられます。wt は、w と同じ長さの重み係数のベクトルです。

[b,a] = invfreqz(h,w,n,m,wt,iter) および

[b,a] = invfreqz(h,w,n,m,wt,iter,tol) では、数値的な反復スキームを使用して、結果として得られる線形システムの安定性を保証し、最大限の近似を探索する優れたアルゴリズムが提供されます。iter パラメーターでは、解が収束するか、反復回数が iter に達するかのいずれかが先に起こったときに、invfreqz に反復を終了するように指示します。invfreqz では、修正した勾配ベクトルのノルムが tol 未満となるときが収束と定義されています。ここで、tol はオプションのパラメーターで、既定の設定では 0.01 に設定されます。すべてが 1 の重みベクトルを取得するには、次のステートメントを使用します。

invfreqz(h,w,n,m,[],iter,tol)

[b,a] = invfreqz(h,w,n,m,wt,iter,tol,'trace') では、反復の経過報告がテキストで表示されます。

[b,a] = invfreqz(h,w,'complex',n,m,...) では、複素フィルターが作成されます。この場合、対称性は強制されません。周波数は、-π ~ π の間のラジアン単位で指定されます。

すべて折りたたむ

簡単な伝達関数を周波数応答データに変換し、次に、元のフィルター係数に戻します。関数のゼロと極をスケッチします。

a = [1 2 3 2 1 4];
b = [1 2 3 2 3];

[h,w] = freqz(b,a,64);
[bb,aa] = invfreqz(h,w,4,5)
bb = 1×5

    1.0000    2.0000    3.0000    2.0000    3.0000

aa = 1×6

    1.0000    2.0000    3.0000    2.0000    1.0000    4.0000

zplane(bb,aa)

bb および aa は、b および a とそれぞれ等価です。ただし、システムは単位円の外側に極をもつため不安定です。invfreqz の反復アルゴリズムを使用して、システムに対する安定近似を求めます。極が単位円内にあることを検証します。

[bbb,aaa] = invfreqz(h,w,4,5,[],30)
bbb = 1×5

    0.2427    0.2788    0.0069    0.0971    0.1980

aaa = 1×6

    1.0000   -0.8944    0.6954    0.9997   -0.8933    0.6949

zplane(bbb,aaa)

アルゴリズム

既定の設定では、invfreqz では方程式誤差法を使用して、データに対する最適なモデルが識別されます。これは、以下の式で ba を求めます。

minb,ak=1nwt(k)|h(k)A(w(k))B(w(k))|2

で、線形方程式系を作成し、MATLAB®\演算子で解くことにより、ba を求めるものです。ここでは、A(ω(k)) と B(ω(k)) は、それぞれ周波数 ω(k) における多項式 ab のフーリエ変換です。n は周波数点 (hw の長さ) の数です。このアルゴリズムは、Levi (参考文献 [1]) に基づいています。

優れた (出力誤差) アルゴリズムでは、初期推定値として最初のアルゴリズムの出力が使用され、反復探索 ([2] 参照) に対して、減衰付きガウス-ニュートン法が使用されます。この方法では、実際の周波数応答点と希望の周波数応答点の間の二乗誤差の重み付き和を最小化するという、直接的な問題を解けます。

minb,ak=1nwt(k)|h(k)B(w(k))A(w(k))|2

参考文献

[1] Levi, E. C. “Complex-Curve Fitting.” IRE Transactions 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.

参考

| |

R2006a より前に導入