ノッチ フィルターの離散化
この例では、ノッチ フィルターを離散化するいくつかの手法を比較します。制御システムのコンポーネントはしばしば連続時間において設計されますが、それらは一般的に、デジタル コンピューターや組み込みプロセッサ上で実装するために離散化されなければなりません。
連続時間ノッチ フィルター
ノッチ フィルターは、特定の周波数におけるゲインを急激に減衰させることによって、その周波数の信号成分を除去するように設計されています。この例では、次のノッチ フィルターを想定します。
bode
コマンドを使用すると、このフィルターの周波数応答をプロットできます。
H = tf([1 0.5 100],[1 5 100]);
bodeplot(H)
grid on
このノッチ フィルターでは、周波数 w = 10 rad/sec において 20dB の減衰が生じます。
離散化手法の選択
c2d
コマンドを使用すると、連続時間システムを離散化できます。Control System Toolbox™ では、以下をはじめとした離散化アルゴリズムがサポートされています。
ゼロ次ホールド
1 次ホールド
インパルス不変法
Tustin (双一次近似)
周波数プリワーピングをもつ Tustin 変換
極と零点マッチング法
どの方法を選択すべきかは、適用性や要件によって決まります。
ゼロ次ホールド方法と 1 次ホールド方法、およびインパルス不変法は、時間領域における離散近似に適しています。たとえば、ZOH 離散化のステップ応答は、各タイム ステップにおける連続タイム ステップ応答と一致します (サンプリング レートに依存しません)。
Ts = 0.1; Hdz = c2d(H,Ts,"zoh"); stepplot(H,"b",Hdz,"r") grid on legend("Continuous","Discretized at 10 Hz");
同様に、インパルス不変法による離散化では、インパルス応答が元のシステムと同じになります。
G = tf([1 -3],[1 2 10]); Gd = c2d(G,Ts,"imp"); impulseplot(G,"b",Gd,"r") grid on legend("Continuous","Discretized at 10 Hz");
一方、Tustin 方法とマッチング法は、ゲインと位相ひずみがナイキスト周波数の近傍において少なくなるため、周波数領域において性能が向上する傾向があります。たとえば、ZOH、Tustin、およびマッチング法の各アルゴリズムを使用して、連続時間ノッチ フィルターとその離散化のボード応答を比較します。
Hdt = c2d(H,Ts,"tustin"); Hdm = c2d(H,Ts,"match"); bodeplot(H,"b",Hdz,"r",Hdt,"m",Hdm,"g",{1 100}) grid on legend("Continuous","ZOH","Tustin","Matched");
この比較が示すとおり、マッチング法では、ノッチ フィルターの最も正確な周波数領域近似が得られます。ただし、ノッチ周波数と等しいプリワーピング周波数を指定することで、Tustin アルゴリズムの精度をさらに高めることができます。これにより、w = 10 rad/sec の近傍で正確なマッチングが確実に行われるようになります。
Hdp = c2d(H,Ts,"prewarp",10); bodeplot(H,"b",Hdt,"m",Hdp,"g",{1 100}) grid on legend("Continuous","Tustin","Tustin with prewarping");
サンプリング レートの選択
サンプリング レートが高いほど、連続応答と離散化応答がより厳密に一致するようになります。ただし、サンプリング レートはどこまで小さくでき、同様に、サンプリング間隔はどこまで大きくできるでしょうか。経験則として、ある周波数 wm
まで連続モデルと離散化モデルをほぼ一致させるには、ナイキスト周波数 (サンプリング レート× Pi) を必ず wm
の 2 倍以上にします。ノッチ フィルターの場合は、10 rad/sec の近傍で形状を維持する必要があるため、ナイキスト周波数を 20 rad/sec より高くして、サンプリング周期が最大 pi/20 = 0.16 s になるようにします。
この選択肢を確認するには、サンプリング周期を 0.1、0.15、および 0.3 に設定して、一致した離散化を比較します。
Hd1 = c2d(H,0.1,"m"); Hd2 = c2d(H,0.15,"m"); Hd3 = c2d(H,0.3,"m"); bodeplot(H,"b",Hd1,"r",Hd2,"m",Hd3,"g",{1 100}) grid on legend("Continuous","Ts = 0.1","Ts = 0.15","Ts = 0.3");
予想どおり、Ts < 0.16
では離散化の精度がかなり高く維持されますが、サンプリング間隔がそれより大きくなると精度が下がり始めます。