Matlab c2d 函数给出与 Z 变换表不同的输出

Matlab c2d function gives different output than Z-transform tables

c2d 用于将模型从连续时间转换为离散时间。官方文档指出:

sysd = c2d(sysc,Ts) discretizes the continuous-time dynamic system model sysc using zero-order hold on the inputs and a sample time of Ts.

为什么当我这样做时:

>> s = tf('s')
>> c2d(1/s, 1)

我得到:

ans =

    1
  -----
  z - 1

Sample time: 1 seconds
Discrete-time transfer function.

但是根据 Z 变换 tables 1/s 的 z 变换是

ans =

    z
  -----
  z - 1

为什么会出现这种差异?

您混淆了两个不同的概念:

  1. 连续 阶跃函数 u(t) 的拉普拉斯变换为 1/s
  2. 离散阶跃函数的z变换,u(n)为z / (z-1)

请注意,连续阶跃函数 u(t) 与离散阶跃函数 u(n) 不同。后者仅在时间实例 t = n*T 通过采样定义。

由于拉普拉斯域是针对连续信号的,而z域是针对离散信号的,因此两者之间没有一对一或精确的转换。只有近似转换来说明采样操作对连续信号的影响。这就是为什么 c2d 命令必须使用各种近似方法,零阶保持 (zoh) 是默认方法。

脉冲不变近似方法将给出您正在寻找的结果,因为它已优化为 "produce a discrete-time model with the same impulse response as the continuous time system"。

>> s = tf('s');
>> T = 1;
>> c2d(1/s, T, 'impulse')

ans =
    z
  -----
  z - 1

有关详细信息,请参阅 relevant documentation

c2d(1/s, T, 'impulse') 仅给出 T=1 的正确答案。对于 1 以外的 T,结果为 T*z/(z-1)。我忽略了原因。