Main Content

polystab

構文

b = polystab(a)

説明

polystab では、単位円に対して多項式が安定化されます。これによって、1 より大きい根が単位円の内側に射影されます。

b = polystab(a) では、安定化された多項式を含む行ベクトル b が返されます。a は、通常 z 領域における多項式係数ベクトルです。

A(z)=a(1)+a(2)z1++a(m+1)zm.

すべて折りたたむ

ウィンドウ法を使用して、正規化されたカットオフ周波数 0.4π ラジアン/サンプルをもつ 25 次の FIR フィルターを設計します。フィルターが最小位相でなく線形位相をもっているかどうかを確認します。

h = fir1(25,0.4);

h_linphase = islinphase(h)
h_linphase = logical
   1

h_minphase = isminphase(h)
h_minphase = logical
   0

polystab を使用して、線形位相フィルターを最小位相フィルターに変換します。フィルターの位相応答をプロットします。

hmin = polystab(h)*norm(h)/norm(polystab(h));

hmin_linphase = islinphase(hmin)
hmin_linphase = logical
   0

hmin_minphase = isminphase(hmin)
hmin_minphase = logical
   1

phasez(h,1)
hold on
phasez(hmin,1)
hold off
legend("h","hmin")

2 つのフィルター処理が同じ振幅応答をもつことを検証します。

[hf,f] = freqz(h,1);
hfmn = freqz(hmin,1);

plot(f/pi,mag2db(abs([hf hfmn])))
grid
legend("h","hmin")

アルゴリズム

polystab では、多項式の根が求められ、単位円の外側に見つかった根が単位円の内側に写像されます。

v = roots(a);
vs = 0.5*(sign(abs(v)-1)+1);
v = (1-vs).*v + vs./conj(v);
b = a(1)*poly(v);

バージョン履歴

R2006a より前に導入

参考