メインコンテンツ

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

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 を "一致する" 周波数として使用し、プリワープを指定します。

すべて折りたたむ

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

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

プロトタイプをバンドパス フィルターに変換し、同等のデジタル フィルターが fs=2 kHz のレートでサンプリングされた場合に 100 Hz および 500 Hz でエッジをもつ通過帯域をもつようにします。変換に際しては、プリワープされた帯域エッジ u1 u2 (rad/s 単位)、中心周波数 Wo=u1u2、および帯域幅 Bw=u2-u1 を指定します。

fs = 2e3;

f1 = 100; u1 = 2*fs*tan(f1*(2*pi/fs)/2);
f2 = 500; u2 = 2*fs*tan(f2*(2*pi/fs)/2);

[At,Bt,Ct,Dt] = lp2bp(A,B,C,D,sqrt(u1*u2),u2-u1);

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

[b,a] = ss2tf(At,Bt,Ct,Dt);
[h,w] = freqs(b,a,2048);

plot(w,mag2db(abs(h)))
xline([u1 u2],"-",["Lower" "Upper"]+" passband edge", ...
    LabelVerticalAlignment="middle")

ylim([-165 5])
xlabel("Angular frequency (rad/s)")
ylabel("Magnitude (dB)")
grid

Figure contains an axes object. The axes object with xlabel Angular frequency (rad/s), ylabel Magnitude (dB) contains 3 objects of type line, constantline.

関数 bilinear を使用して、サンプル レート fs をもつデジタル バンドパス フィルターを作成します。

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

デジタル フィルターを状態空間形式から 2 次セクションに変換し、freqz を使用して周波数応答を計算します。振幅応答と通過帯域エッジをプロットします。

[hd,fd] = freqz(ss2sos(Ad,Bd,Cd,Dd),2048,fs);

plot(fd,mag2db(abs(hd)))
xline([f1 f2],"-",["Lower" "Upper"]+" passband edge", ...
    LabelVerticalAlignment="middle")

ylim([-165 5])
xlabel("Frequency (Hz)")
ylabel("Magnitude (dB)")
grid

Figure contains an axes object. The axes object with xlabel Frequency (Hz), ylabel Magnitude (dB) contains 3 objects of type line, constantline.

5 dB の通過帯域リップル、90 dB の阻止帯域減衰量、および fc=20 Hz のカットオフ周波数をもつ 6 次の楕円アナログ ローパス フィルターを設計します。

fc = 20;

[z,p,k] = ellip(6,5,90,2*pi*fc,"s");

アナログ楕円フィルターの振幅応答を可視化します。カットオフ周波数を表示します。

[num,den] = zp2tf(z,p,k);
[h,w] = freqs(num,den,1024);

plot(w/(2*pi),mag2db(abs(h)))
xline(fc,Color=[0.8500 0.3250 0.0980])

axis([0 100 -125 5])
grid
legend(["Magnitude response" "Cutoff frequency"])
xlabel("Frequency (Hz)")
ylabel("Magnitude (dB)")

Figure contains an axes object. The axes object with xlabel Frequency (Hz), ylabel Magnitude (dB) contains 2 objects of type line, constantline. These objects represent Magnitude response, Cutoff frequency.

関数 bilinear を使用して、アナログ フィルターを離散時間 IIR フィルターに変換します。サンプル レートを fs=200 Hz に、プリワーピング一致周波数を fp=20 Hz に指定します。

fs = 200;
fp = 20;

[zd,pd,kd] = bilinear(z,p,k,fs,fp);

離散時間フィルターの振幅応答を可視化します。カットオフ周波数を表示します。

[hd,fd] = freqz(zp2sos(zd,pd,kd),[],fs);

plot(fd,mag2db(abs(hd)))
xline(fc,Color=[0.8500 0.3250 0.0980])

axis([0 100 -125 5])
grid
legend(["Magnitude response" "Cutoff frequency"])
xlabel("Frequency (Hz)")
ylabel("Magnitude (dB)")

Figure contains an axes object. The axes object with xlabel Frequency (Hz), ylabel Magnitude (dB) contains 2 objects of type line, constantline. These objects represent Magnitude response, Cutoff frequency.

入力引数

すべて折りたたむ

s 領域伝達関数のゼロ、極およびゲイン。2 つの列ベクトルおよびスカラーとして指定します。

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

アナログ伝達関数の分子と分母の係数。行ベクトルとして指定します。

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

データ型: single | double

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

出力引数

すべて折りたたむ

z 領域伝達関数のゼロ、極およびゲイン。列ベクトルおよびスカラーとして返されます。

デジタル伝達関数の分子と分母の係数。行ベクトルとして返されます。

z 領域の状態空間表現。行列として返されます。システムが n 個の状態変数により記述され、q 個の出力をもつ場合、Adnn 列、Bdn 行 1 列、Cdqn 列、Ddq 行 1 列になります。

データ型: single | double

アルゴリズム

すべて折りたたむ

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

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

H(z)=H(s)|s=2fs×z1z+1.

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

ω=2tan1(Ω2fs).

bilinear では、プリワープを指定するオプションのパラメーター fp を指定することができます。fp は、マッピング処理前後で周波数応答が厳密に一致する "一致" 周波数をヘルツで示します。プリワーピング モードでは、双一次変換によって以下の式を使用して 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 は状態空間形式に転換し、変換を実行し、結果として得られた状態空間システムを伝達関数形式に逆変換します。

参照

[1] Al-Saggaf, Ubaid M., and Gene F. Franklin. “Model Reduction via Balanced Realizations: An Extension and Frequency Weighting Techniques.” IEEE Transactions on Automatic Control 33, no. 7 (July 1988): 687–92. https://doi.org/10.1109/9.1280.

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

[3] Parks, Thomas W., and C. Sidney Burrus. Digital Filter Design. New York: John Wiley & Sons, 1987.

[4] Tustin, Arnold. “A Method of Analysing the Behaviour of Linear Systems in Terms of Time Series.” Journal of the Institution of Electrical Engineers - Part IIA: Automatic Regulators and Servo Mechanisms 94, no. 1 (May 1947): 130–42. https://doi.org/10.1049/ji-2a.1947.0020.

拡張機能

すべて展開する

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入

参考

| | | |

トピック