c2d 用于将模型从连续时间转换为离散时间。官方文件指出:
sysd = c2d(sysc,Ts( 使用输入零阶保持和 Ts 的采样时间离散连续时间动态系统模型 sysc。
为什么当我这样做时:
>> s = tf('s')
>> c2d(1/s, 1)
我得到:
ans =
1
-----
z - 1
Sample time: 1 seconds
Discrete-time transfer function.
但根据 Z 变换表,1/s
的 z 变换是
ans =
z
-----
z - 1
为什么会有这种差异?
你混淆了两个不同的概念:
-
连续步长函数 u(t( 的拉普拉斯变换为
1/s
。 -
离散阶跃函数 u(n( 的 z 变换为
z / (z-1)
。
请注意,连续步进函数 u(t( 与离散步进函数 u(n( 不同。后者仅在实例 t = n*T 通过采样时定义。
由于拉普拉斯域用于连续信号,z域用于离散信号,因此两者之间没有1对1或精确的转换。只有近似的转换来解释采样作用对连续信号的影响。这就是为什么c2d
命令必须使用各种近似方法,零阶保持(zoh(是默认方法。
脉冲不变近似方法将给出您正在寻找的结果,因为它经过优化以"生成与连续时间系统具有相同脉冲响应的离散时间模型"。
>> s = tf('s');
>> T = 1;
>> c2d(1/s, T, 'impulse')
ans =
z
-----
z - 1
有关更多详细信息,请参阅相关文档。
c2d(1/s, T, 'impulse'( 只给出了 T=1 的正确答案。对于 T 而不是 1,结果为 T*z/(z-1(。我忽略了原因。