主要内容

对陷波滤波器进行离散化

此示例说明对陷波滤波器进行离散化的多种方法的比较。虽然控制系统组件通常是在连续时间下设计的,但为了在数字计算机和嵌入式处理器上实现,一般必须对其进行离散化。

连续时间陷波滤波器

陷波滤波器旨在通过显著衰减特定频率处的增益来抑制该频率处的信号成分。对于此示例,假设有以下陷波滤波器:

H(s)=s2+0.5s+100s2+5s+100

您可以使用 bode 命令绘制该滤波器的频率响应:

H = tf([1 0.5 100],[1 5 100]);
bodeplot(H)
grid on

MATLAB figure

该陷波滤波器在频率 w = 10 弧度/秒处提供 20dB 的衰减。

选择离散化方法

您可以使用 c2d 命令对连续时间系统进行离散化。Control System Toolbox™ 支持多种离散化算法,包括:

  • 零阶保持

  • 一阶保持

  • 冲激不变

  • 突斯汀(双线性逼近)

  • 具有频率预修正的突斯汀

  • 匹配的零极点

选择哪种方法取决于应用和需求。

零阶保持方法、一阶保持方法以及冲激不变方法非常适合时域中的离散逼近。例如,ZOH 离散化的阶跃响应在每个时间步都与连续时间阶跃响应匹配(与采样率无关)。

Ts = 0.1;
Hdz = c2d(H,Ts,"zoh");
stepplot(H,"b",Hdz,"r")
grid on
legend("Continuous","Discretized at 10 Hz");

MATLAB figure

类似地,冲激不变离散化与原始系统具有相同的冲激响应:

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");

MATLAB figure

相比之下,突斯汀方法和匹配方法在频域中往往表现更好,因为它们在奈奎斯特频率附近引入的增益和相位失真较小。例如,比较连续时间陷波滤波器及其使用 ZOH、突斯汀和匹配算法进行离散化后的波特响应:

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");

MATLAB figure

该比较表明,匹配方法为陷波滤波器提供了最准确的频域逼近。然而,您可以通过指定一个等于陷波频率的预修正频率来进一步提高突斯汀算法的准确度。这可确保在 w = 10 弧度/秒附近实现准确匹配:

Hdp = c2d(H,Ts,"prewarp",10);
bodeplot(H,"b",Hdt,"m",Hdp,"g",{1 100})
grid on
legend("Continuous","Tustin","Tustin with prewarping");

MATLAB figure

选择采样率

采样率越高,连续响应与离散化响应之间的匹配度就越高。但采样率可以小到多少?或者说,采样间隔可以大到多少?按照经验,如果您希望连续模型与离散化模型在频率 wm 以内能够紧密匹配,需确保奈奎斯特频率(采样率乘以 Pi)至少为 wm 的两倍。对于该陷波滤波器,您需要保留 10 弧度/秒附近的特性形状,因此奈奎斯特频率应超过 20 弧度/秒,这对应的最大采样周期为 pi/20 = 0.16 秒。

为确认该选择,比较采样周期分别为 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");

MATLAB figure

正如预测的那样,当 Ts < 0.16 时,离散化保持相当高的准确度,但当采样间隔增大时,准确度开始下降。