メインコンテンツ

islinphase

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

    説明

    flag = islinphase(b,a) は、指定されたフィルターが線形位相の場合、1 に等しい logical 出力を返します。分子係数 b と分母係数 a をもつフィルターを指定します。

    flag = islinphase(B,A,"ctf") は、分子係数 B と分母係数 A によってCascaded Transfer Functions (CTF) として指定されるフィルターが線形位相の場合、1 を返します。 (R2024b 以降)

    flag = islinphase({B,A,g},"ctf") は、CTF 形式で指定されるフィルターが線形位相の場合、1 を返します。分子係数 B、分母係数 A、およびフィルター セクション全体のスケーリング値 g を使用してフィルターを指定します。 (R2024b 以降)

    flag = islinphase(d) は、デジタル フィルター d が線形位相の場合、1 を返します。

    flag = islinphase(sos) は、2 次セクション行列 sos で指定されるフィルターが線形位相の場合、1 を返します。

    flag = islinphase(___,tol) は、許容誤差 tol を指定して、2 つの数が等しいと見なせる程度に近づく時点を判別します。

    すべて折りたたむ

    ウィンドウ法を使用して、正規化されたカットオフ周波数 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("Normalized Frequency (\times\pi rad/sample)")
    ylabel("Phase (radians)")

    Figure contains an axes object. The axes object with xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Phase (radians) 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);
    sosC1 = zp2sos(zc,pc,kc);
    
    [zd,pd,kd] = cheby2(ord,atten,Wcut);
    sosC2 = zp2sos(zd,pd,kd);
    
    [ze,pe,ke] = ellip(ord,rippl,atten,Wcut);
    sosE = zp2sos(ze,pe,ke);

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

    phasez(sosB)
    hold on
    phasez(sosC1)
    phasez(sosC2)
    phasez(sosE)
    hold off
    ylim([-14 2])
    legend("Butterworth","Chebyshev I", ...
        "Chebyshev II","Elliptic",Location="best")

    Figure 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(sosC1) ...
           islinphase(sosC2) islinphase(sosE)]
    phs = 1×4 logical array
    
       0   0   0   0
    
    

    R2024b 以降

    阻止帯域エッジ周波数が 0.4、阻止帯域の減衰量が 50 dB の 40 次ローパス チェビシェフ II 型デジタル フィルターを設計します。CTF 形式のフィルター係数を使用して、フィルターが線形位相をもっているかどうかを確認します。

    [B,A] = cheby2(40,50,0.4,"ctf");
    
    flag = islinphase(B,A,"ctf")
    flag = logical
       0
    
    

    通過帯域エッジ周波数が 0.3 と 0.7、通過帯域リップルが 0.1 dB、阻止帯域の減衰量が 50 dB の 30 次バンドパス楕円デジタル フィルターを設計します。CTF 形式のフィルター係数とゲインを使用して、フィルターが線形位相をもっているかどうかを確認します。

    [B,A,g] = ellip(30,0.1,50,[0.3 0.7],"ctf");
    flag = islinphase({B,A,g},"ctf")
    flag = logical
       0
    
    

    入力引数

    すべて折りたたむ

    伝達関数の係数。ベクトルとして指定します。ba の値は、それぞれ分子多項式と分母多項式の係数を表します。

    例: [b,a] = cheby2(5,30,0.7) は、係数 ba をもつ 5 次のデジタル バタワース ローパス フィルターを作成します。このフィルターは、正規化された 3 dB 周波数が 0.7π ラジアン/サンプルで、阻止帯域の減衰量が 30 dB です。

    データ型: single | double
    複素数のサポート: あり

    R2024b 以降

    カスケード伝達関数 (CTF) 係数。スカラー、ベクトル、または行列として指定します。BA は、それぞれカスケード伝達関数の分子係数と分母係数をリストします。

    B のサイズは L 行 (m + 1) 列、A のサイズは L 行 (n + 1) でなければなりません。ここで、

    • L はフィルター セクションの数を表します。

    • m はフィルターの分子の次数を表します。

    • n はフィルターの分母の次数を表します。

    カスケード伝達関数の形式と係数行列の詳細については、CTF 形式によるデジタル フィルターの指定を参照してください。

    メモ

    A(:,1) のいずれかの要素が 1 と等しくない場合、islinphase はフィルター係数を A(:,1) で正規化します。この場合、A(:,1) はゼロ以外でなければなりません。

    データ型: double | single
    複素数のサポート: あり

    R2024b 以降

    スケール値。実数値のスカラー、または L + 1 個の要素をもつ実数値のベクトルとして指定します。ここで、L は CTF セクションの数です。スケール値は、カスケード フィルター表現のセクション全体にわたるフィルター ゲインの分布を表します。

    islinphase 関数は、g の指定方法に応じて、scaleFilterSections 関数を使用してフィルター セクションにゲインを適用します。

    • スカラー — この関数は、すべてのフィルター セクションにわたってゲインを均一に配分します。

    • ベクトル — この関数は、最初の L 個のゲイン値を対応するフィルター セクションに適用し、最後のゲイン値をすべてのフィルター セクションに均一に配分します。

    データ型: double | single

    デジタル フィルター。digitalFilter オブジェクトとして指定します。d を周波数応答仕様に基づいて生成するには、関数 designfilt を使用します。

    例: designfilt("lowpassfir",FilterOrder=10,CutoffFrequency=0.55) は、正規化された 3 dB 周波数が 0.55π rad/サンプルの 10 次 FIR ローパス フィルターの digitalFilter オブジェクトを生成します。

    データ型: digitalFilter

    2 次セクション表現。L 行 6 列の行列として指定します。ここで、L は 2 次セクションの数です。行列

    sos=[b01b11b211a11a21b02b12b221a12a22b0Lb1Lb2L1a1La2L]

    は、次に示す H(z) の 2 次セクションを表します。

    H(z)=k=1LHk(z)=k=1Lb0k+b1kz1+b2kz21+a1kz1+a2kz2.

    例: [z,p,k] = butter(3,1/32); sos = zp2sos(z,p,k) は、正規化された 3 dB の周波数 π/32 ラジアン/サンプルをもつ 3 次のバタワース フィルターを指定します。

    データ型: single | double
    複素数のサポート: あり

    近い値を区別するための許容誤差。正のスカラーとして指定します。許容誤差の値は、2 つの数が等しいと見なせる程度に近づく時点を判別します。

    データ型: single | double

    出力引数

    すべて折りたたむ

    線形位相フラグ。logical スカラーとして返されます。この関数は、入力が最小位相フィルターである場合、1 を返します。

    詳細

    すべて折りたたむ

    ヒント

    • スケーリング ゲインを含むフィルターを CTF 形式で取得できます。buttercheby1cheby2ellip などのデジタル IIR フィルター設計関数の出力を使用します。これらの関数で、"ctf" フィルタータイプ引数を指定し、スケール値を取得するために BAg を返すように指定します。 (R2024b 以降)

    参照

    [1] Lyons, Richard G. Understanding Digital Signal Processing. Upper Saddle River, NJ: Prentice Hall, 2004.

    バージョン履歴

    R2013a で導入

    すべて展開する