ドキュメンテーション

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

bilinear

アナログ デジタル フィルター変換用の双一次変換

説明

[zd,pd,kd] = bilinear(z,p,k,fs) では、zpk、およびサンプルレート fs で指定される s 領域の伝達関数が等価な離散関数に極-零点形式で変換されます。

[numd,dend] = bilinear(num,den,fs) では、分子 num と分母 den で指定される s 領域の伝達関数が等価な離散関数に変換されます。

[Ad,Bd,Cd,Dd] = bilinear(A,B,C,D,fs) では、行列 ABC、および D の連続時間状態空間システムが離散時間システムに変換されます。

[___] = bilinear(___,fp) はパラメーター fp を "一致する" 周波数として使用し、プリワープを指定します。

すべて折りたたむ

3 dB の通過帯域のリップルをもつ 10 次のチェビシェフ I 型バンドパス フィルターのプロトタイプを設計します。これを状態空間形式に変換します。

[z,p,k] = cheb1ap(10,3);
[A,B,C,D] = zp2ss(z,p,k);  

lp2bp で使用するために、サンプルレート fs=2kHz、プリワープされた帯域エッジ u1 および u2 (rad/s 単位)、帯域幅 Bw=u2-u1 および中心周波数 Wo=u1u2 を持つアナログ フィルターを作成します。100 Hz と 500 Hz として通過帯域のエッジ周波数を指定します。

Fs = 2e3;
u1 = 2*Fs*tan(100*(2*pi/Fs)/2);   
u2 = 2*Fs*tan(500*(2*pi/Fs)/2); 
Bw = u2 - u1;                     
Wo = sqrt(u1*u2);                 
[At,Bt,Ct,Dt] = lp2bp(A,B,C,D,Wo,Bw);
[b,a] = ss2tf(At,Bt,Ct,Dt);        

freqs を使用してアナログ フィルターの周波数応答を計算します。振幅応答とプリワープされた周波数帯域エッジをプロットします。

[h,w] = freqs(b,a);     
plot(w,mag2db(abs(h)))
hold on
ylim([-165 5])
[U1,U2] = meshgrid([u1 u2],ylim);
plot(U1,U2)
legend('Magnitude response','Lower Passband Edge','Upper Passband Edge')
hold off
xlabel('Angular Frequency (rad/s)')
ylabel('Magnitude (dB)')
grid

bilinear を使用して、サンプルレート fs と下側の帯域エッジ 100 Hz をもつデジタル バンドパス フィルターを作成します。ss2tf を使用して状態空間形式から伝達関数形式へデジタル フィルターを変換します。

[Ad,Bd,Cd,Dd] = bilinear(At,Bt,Ct,Dt,Fs);

[bz,az] = ss2tf(Ad,Bd,Cd,Dd);

fvtool を使用して、デジタル フィルターの振幅応答をプロットします。

fvtool(bz,az,'Fs',Fs)

3 dB の通過帯域リップルと 90 dB の阻止帯域減衰量をもつ 6 次の楕円アナログ ローパス フィルターを設計します。カットオフ周波数 fc=20Hz とサンプルレート fs=200Hz を設定します。

clear
Fc = 20;
Fs = 200;                             
[z,p,k] = ellip(6,3,90,2*pi*Fc,'s');
[num,den] = zp2tf(z,p,k);

アナログ楕円フィルターの振幅応答を計算します。アナログ フィルターを可視化します。

[h,w] = freqs(num,den);
plot(w/(2*pi),mag2db(abs(h)))
hold on
xlim([0 50])
[l1,l2] = meshgrid(Fc,[-120 0]);
plot(l1,l2)
grid
legend('Magnitude response','Passband Edge')
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')

bilinear を使用して、これを離散時間 IIR フィルターに変換します。一致する周波数を fp=20Hz として設定します。

[numd,dend] = bilinear(num,den,Fs,20);

fvtool を使用してフィルターを可視化します。

fvtool(numd,dend,'Fs',Fs)                     

入力引数

すべて折りたたむ

s 領域伝達関数の零点。列ベクトルとして指定します。

s 領域伝達関数の極。列ベクトルとして指定します。

s 領域伝達関数のゲイン。スカラーとして指定します。

サンプルレート。正のスカラーで指定します。

アナログ伝達関数の分子係数。配列として指定します。

アナログ伝達関数の分母係数。配列として指定します。

s 領域の状態行列。行列として指定します。システムに p 個の入力と q 個の出力があり、n 個の状態変数により記述される場合、A は n 行 n 列になります。

データ型: single | double

s 領域の状態空間への入力行列。行列として指定します。システムに p 個の入力と q 個の出力があり、n 個の状態変数により記述される場合、B は n 行 p 列になります。

データ型: single | double

s 領域の状態空間からの出力行列。行列として指定します。システムに p 個の入力と q 個の出力があり、n 個の状態変数により記述される場合、C は q 行 n 列になります。

データ型: single | double

s 領域の直達行列。行列として指定します。システムに p 個の入力と q 個の出力があり、n 個の状態変数により記述される場合、D は q 行 p 列になります。

データ型: single | double

一致する周波数。正のスカラーとして指定します。

出力引数

すべて折りたたむ

z 領域伝達関数の零点。列ベクトルとして指定します。

z 領域伝達関数の極。列ベクトルとして指定します。

z 領域伝達関数のゲイン。スカラーとして指定します。

デジタル伝達関数の分子係数。配列として指定します。

デジタル伝達関数の分母係数。配列として指定します。

z 領域の状態行列。行列として返されます。システムが n 個の状態変数により記述される場合、Ad は n 行 n 列になります。

データ型: single | double

z 領域の状態空間への入力行列。行列として返されます。システムが n 個の状態変数により記述される場合、Bd は n 行 1 列になります。

データ型: single | double

z 領域の状態空間からの出力行列。行列として返されます。システムに q 個の出力があり、n 個の状態変数により記述される場合、Cd は q 行 n 列になります。

データ型: single | double

z 領域の直達行列。行列として返されます。システムに q 個の出力がある場合、Dd は q 行 1 列になります。

データ型: single | double

診断

関数 bilinear では、分子の次数は分母の次数以下でなければなりません。この条件が満たされない場合、関数 bilinear によって以下が表示されます。

分子は分母より高い次数にはできません。

関数 bilinear で零点-極-ゲイン型と伝達関数型の線形システムを区別するには、最初の 2 つの入力パラメーターは同じ向きのベクトルでなければなりません。この条件が満たされない場合、関数 bilinear によって以下が表示されます。

最初の 2 つの引数は、同じ方向でなければなりません。

アルゴリズム

すべて折りたたむ

"双一次変換" とは変数の数学的なマッピングで、デジタル フィルター処理において s (アナログ) 平面を z (デジタル) 平面にマッピングする標準的な方法です。この変換では、従来のフィルター設計法を使用して設計されたアナログ フィルターが離散の等価なフィルターに変換されます。

双一次変換では、以下の式によって s 平面が z 平面にマッピングされます。

H(z)=H(s)|s=2fsz1z+1.

この変換では、以下の式を使用して、jΩ 軸 (Ω = -∞ から +∞) が単位円周上 (ejw、範囲は ω = –π から π) に繰り返しマッピングされます。

ω=2tan1(Ω2fs).

関数 bilinear では、プリワープを指定するオプションのパラメーター Fp を指定することができます。fp は "一致する" 周波数、すなわちマッピング処理前後で周波数応答が厳密に一致する周波数を Hz で示します。プリワーピング モードでは、双一次変換によって以下の式を使用して s 平面が z 平面にマッピングされます。

H(z)=H(s)|s=2πfptan(πfpfs)z1z+1.

プリワーピング オプションを選択した場合、bilinear では以下の式を使用して、jΩ 軸 (Ω = –∞ から +∞) が単位円周上 (e、ω = -π から π) に繰り返しマッピングされます。

ω=2tan1(Ωtan(πfpfs)2πfp).

プリワーピング モードでは、bilinear によって s 平面の周波数 2πfp (ラジアン/秒単位) が、z 平面の正規化周波数 2πfp/fs (ラジアン/秒単位) に一致されます。

関数 bilinear では、3 つの異なる線形システム表現を扱うことができます。すなわち、零点-極-ゲイン、伝達関数、および状態空間型です。

bilinear では、提供した入力線形システムの形式に応じて、2 つのアルゴリズムのいずれかが使用されます。1 つのアルゴリズムは零点-極-ゲイン型を、もう 1 つのアルゴリズムは状態空間型を処理します。伝達関数表現に対し、関数 bilinear は状態空間型に転換し、変換を実行し、結果として得られた状態空間システムを伝達関数型に逆変換します。

零点-極-ゲイン アルゴリズム

零点-極-ゲイン型のシステムでは、関数 bilinear によって以下の 4 つのステップが実行されます。

  1. fp が存在する場合、以下のようにプリワーピングが行われます。

    fp = 2*pi*fp;
    fs = fp/tan(fp/fs/2)
    

    そうでない場合は fs = 2*fs となります。

  2. 次のステートメントを使用して、±∞ で零点が削除されます。

    z = z(finite(z));
    
  3. 次のステートメントを使用して、零点、極、およびゲインの変換が行われます。

    pd = (1+p/fs)./(1-p/fs);    % Do bilinear transformation
    zd = (1+z/fs)./(1-z/fs);
    kd = real(k*prod(fs-z)./prod(fs-p));
    
  4. -1 に零点が追加され、結果として得られるシステムの分子と分母の次数が等しくなるようにします。

状態空間アルゴリズム

状態空間形式のアナログ システムは

x˙=Ax+Buy=Cx+Du

で表現されます。このシステムは、次のように状態空間方程式を使用して離散形式に変換されます。

x[n+1]=Adx[n]+Bdu[n],y[n]     =Cdx[n]+Ddu[n].

状態空間形式でアナログ システムを変換するには、bilinear が次の 2 つのステップを実行します。

  1. fp が存在する場合は

    λ=πfptan(πfp/fs).

    に、fp が存在しない場合は λ=fs にします。

  2. 以下を使用して、ABC、および D に対して、AdBdCd、および Dd を計算します。

    Ad=(IA12λ)1(I+A12λ),Bd=1λ(IA12λ)1B,Cd=1λC(IA12λ)1,Dd=12λC(IA12λ)1B+D.

伝達関数

伝達関数形式のシステムの場合、bilinear では、num および den で指定される s 領域の伝達関数が離散の等価な関数に変換されます。行ベクトル num および den では、以下のように、分子および分母の係数が s の降べきの順でそれぞれ指定されます。Bs を分子の多項式に、As を分母の多項式にします。伝達関数は、次のように表されます。

B(s)A(s)=B(1)sn++B(n)s+B(n+1)A(1)sm++A(m)s+A(m+1)

fs は Hz のサンプルレートです。関数 bilinear では、離散相当が、行ベクトル numddend に z の降べきの順 (z–1 の昇べきの順) で返されます。fp は、プリワーピング用のオプションの一致する周波数を Hz で表したものです。

参照

[1] Parks, Thomas W., and C. Sidney Burrus. Digital Filter Design. New York: John Wiley & Sons, 1987, pp. 209–213.

[2] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice Hall, 1999, pp. 450–454.

R2006a より前に導入