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
为什么会出现这种差异?
您混淆了两个不同的概念:
- 连续 阶跃函数 u(t) 的拉普拉斯变换为
1/s
。
- 离散阶跃函数的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)。我忽略了原因。
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
为什么会出现这种差异?
您混淆了两个不同的概念:
- 连续 阶跃函数 u(t) 的拉普拉斯变换为
1/s
。 - 离散阶跃函数的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)。我忽略了原因。