离散化传递函数:差分、双线性与预矫正双线性方法

作者:很酷cat2024.01.18 12:48浏览量:22

简介:本文将介绍三种常用的传递函数离散化方法:差分法、双线性法和预矫正双线性法。通过对比它们的优缺点,我们将在MATLAB中实现这些方法,并给出相应的源代码。

在控制系统分析和设计中,传递函数是一种描述系统动态特性的数学模型。然而,在实际应用中,我们通常需要将连续时间的传递函数离散化,以便在数字计算机上进行模拟和控制系统设计。本文将介绍三种常用的传递函数离散化方法:差分法、双线性法和预矫正双线性法,并通过MATLAB源代码实现这些方法。
一、差分法
差分法是最简单的传递函数离散化方法。它基于离散时间系统的差分方程,通过将连续时间的传递函数在采样点上进行离散化,得到离散时间的传递函数。这种方法简单直观,但忽略了系统在采样点之间的动态特性。
以下是使用MATLAB实现差分法的源代码:

  1. function discrete_sys = diff_discretize(sys, Ts)
  2. n = numel(sys.den); % 计算传递函数的极点数
  3. a = [1 Ts^0 Ts^(-1)]; % 计算差分方程的系数
  4. b = [0 Ts^(-1)]; % 计算差分方程的初始条件
  5. discrete_sys = tf(a,b,[1 0]); % 构建离散时间传递函数
  6. end

二、双线性法
双线性法是一种更精确的传递函数离散化方法。它通过使用双线性变换将连续时间的传递函数转换为离散时间的传递函数。这种方法考虑了系统在采样点之间的动态特性,因此更接近实际情况。然而,双线性变换可能会导致系统极点的偏移和不稳定。
以下是使用MATLAB实现双线性法的源代码:

  1. function discrete_sys = bilinear_discretize(sys, Ts)
  2. s = tf('s'); % 定义复数变量s
  3. z = (Ts^2 + 2*Ts + 1)/(Ts^2); % 计算双线性变换的z因子
  4. discrete_sys = (sys*z) / (Ts^2 + 2*Ts + 1); % 进行双线性变换
  5. end

三、预矫正双线性法
为了解决双线性变换可能导致系统极点偏移和不稳定的问题,提出了预矫正双线性法。这种方法在双线性变换之前对系统进行预矫正,以减小极点偏移和改善系统的稳定性。通过合理的选择预矫正矩阵,可以进一步优化离散化后的系统性能。
以下是使用MATLAB实现预矫正双线性法的源代码:

  1. function discrete_sys = pre_bilinear_discretize(sys, Ts)
  2. s = tf('s'); % 定义复数变量s
  3. z = (Ts^2 + 2*Ts + 1)/(Ts^2); % 计算双线性变换的z因子
  4. pre_gain = (Ts^2 + Ts + 1) / (Ts^2 + 2*Ts + 1); % 计算预矫正增益
  5. pre_sys = pre_gain * sys; % 对系统进行预矫正
  6. discrete_sys = (pre_sys*z) / (Ts^2 + 2*Ts + 1); % 进行双线性变换
  7. end

综上所述,差分法简单直观,但忽略了系统在采样点之间的动态特性;双线性法考虑了系统在采样点之间的动态特性,但可能导致系统极点偏移和不稳定;预矫正双线性法通过合理的预矫正矩阵选择,可以进一步优化离散化后的系统性能。在实际应用中,我们可以根据系统的特性和精度要求选择合适的离散化方法。