Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

islinphase

フィルターが線形位相をもつかどうかを判別

構文

flag = islinphase(b,a)
flag = islinphase(sos)
flag = islinphase(d)
flag = islinphase(...,tol)

説明

flag = islinphase(b,a) では、logical の出力 flag が返されます。これは ba のフィルター係数が線形位相フィルターを定義している場合、true になります。flag は、フィルターが線形位相をもたない場合、false になります。

flag = islinphase(sos) では、2 次セクション行列 sos で指定されるフィルターが線形位相をもつ場合、true が返されます。sos は K 行 6 列の行列です。ここで、セクション数 K は 2 以上でなければなりません。sos の各行は 2 次 (双二次) フィルターの係数に対応しています。sos 行列の i 行目は [bi(1) bi(2) bi(3) ai(1) ai(2) ai(3)] に対応しています。

flag = islinphase(d) では、デジタル フィルター d が線形位相をもっている場合、true が返されます。d を周波数応答仕様に基づいて生成するには、関数 designfilt を使用します。

flag = islinphase(...,tol) では、許容誤差 tol を使用して、2 つの数が等しいと見なせる程度に近づく時点が判別されます。tol を指定しない場合は、既定値の eps^(2/3) が使用されます。

すべて折りたたむ

ウィンドウ法を使用して、正規化されたカットオフ周波数 0.55 をもつ 10 次のローパス FIR フィルターを設計します。フィルターが線形位相をもっているかどうかを確認します。

d = designfilt('lowpassfir','DesignMethod','window', ...
    'FilterOrder',10,'CutoffFrequency',0.55);
flag = islinphase(d)
flag = logical
   1

[phs,w] = phasez(d);

plot(w/pi,phs)
xlabel('Frequency \omega/\pi')
ylabel('Phase')

Figure contains an axes object. The axes object with xlabel Frequency omega / pi, ylabel Phase contains an object of type line.

通常、IIR フィルターは線形位相をもっていません。8 次のバタワース、チェビシェフおよび楕円フィルターを同じ仕様で作成し、ステートメントを確認します。

ord = 8;
Wcut = 0.35;
atten = 20;
rippl = 1;

[zb,pb,kb] = butter(ord,Wcut);
sosb = zp2sos(zb,pb,kb);

[zc,pc,kc] = cheby1(ord,rippl,Wcut);
sosc = zp2sos(zc,pc,kc);

[zd,pd,kd] = cheby2(ord,atten,Wcut);
sosd = zp2sos(zd,pd,kd);

[ze,pe,ke] = ellip(ord,rippl,atten,Wcut);
sose = zp2sos(ze,pe,ke);

フィルターの位相応答をプロットします。線形位相をもっているかどうかを判別します。

fv = fvtool(sosb,sosc,sosd,sose,'Analysis','phase');
legend(fv,'Butterworth','Chebyshev I','Chebyshev II','Elliptic')

Figure Figure 1: Phase Response contains an axes object. The axes object with title Phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Phase (radians) contains 4 objects of type line. These objects represent Butterworth, Chebyshev I, Chebyshev II, Elliptic.

phs = [islinphase(sosb) islinphase(sosc) ...
       islinphase(sosd) islinphase(sose)]
phs = 1x4 logical array

   0   0   0   0

バージョン履歴

R2013a で導入