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')

通常、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);

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

phasez(sosb)
hold on
phasez(sosc)
phasez(sosd)
phasez(sose)
hold off
ylim([-14 2])
legend('Butterworth','Chebyshev I','Chebyshev II','Elliptic', ...
    'Location','best')

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

   0   0   0   0

バージョン履歴

R2013a で導入