最近思考关于传递函数的离散化问题时,产生了一个误区,在这里记录一下。
当时想到s域到z域的映射时的一个关系式为
(1)
z
=
e
s
T
z=e^{sT} \tag 1
z=esT(1)
于是就想将连续传递函数离散化时为什么不直接反变换
(2)
s
=
l
n
(
z
)
T
s=\frac{ln(z)}{T}\tag 2
s=Tln(z)(2)
想了很久才弄出错在哪了。s域和z域之间的映射关系是对同一个离散信号而言的,不能将连续信号的s变换和离散的z变换联系到一起。例如有
(3)
G
(
s
)
=
1
s
+
1
G_{(s)}=\frac{1}{s+1}\tag 3
G(s)=s+11(3)
对应的离散系统 (将单位冲击响应进行采样之后的离散信号) z变换为
(4)
G
(
z
)
=
1
1
+
e
−
T
z
−
1
G_{(z)}=\frac{1}{1+e^{-T}z^{-1}}\tag 4
G(z)=1+e−Tz−11(4)
将
z
=
e
s
T
z=e^{sT}
z=esT代入式
(
4
)
(4)
(4)得到
(5)
G
(
z
)
=
1
1
+
e
−
T
e
−
s
T
G_{(z)}=\frac{1}{1+e^{-T}e^{-sT}}\tag 5
G(z)=1+e−Te−sT1(5)
式
(
5
)
(5)
(5)就是离散系统的拉式变换,将
s
=
l
n
(
z
)
T
s=\frac{ln(z)}{T}
s=Tln(z) 代回就可得到离散系统的z变换,而将其代入连续系统传递函数式
(
3
)
(3)
(3)中没有意义。
上面采用的离散变换是所谓的直接变换,实际上是利用单位冲击响应不变的方法进行变换。是利用对时域的单位冲击响应信号采样的原理得到的,需要注意的是只能保证单位冲击响应不变,不能保证增益(单位阶跃响应)不变。而在频域的影响在下面根据自己的理解形象的梳理一下:
如果利用单位冲击响应不变对一个连续传递函数进行离散,在连续传递函数的s域中相当于将s域分为横向的条带(条带宽度根据采样周期而定),然后原s域的值按条带依次移动混叠,最后得到离散系统的s域,即每个条带的值重复。由于极点的值为无穷,所以混叠之后极点仍然存在;但零点的值为零,混叠之后不一定为零,因此不能保证零点仍然存在。而s域的虚轴即为频率响应,同样混叠。然后进行式(1)的变换,将离散系统的s域的每一个条带都映射到z域的整个平面(s左半平面->z单位圆内)。
除了利用保持时域信号采样不变的方法来对连续传递函数进行离散化,还可以直接在s域(频域)上进行映射到z域。例如双线性变换法的过程可以形象的理解成下面过程:首先有一个连续传递函数的s域,然后将整个s域非线性压缩到一个横向条带中,然后这个条带的值复制到每个条带中,每个条带值都相同,然后都映射到z域上。
总而言之,根据自己的理解。连续传递函数的离散化问题在s域上可以看做是如何将原来s域变成按横向条带重复的s域的问题,而z域只是对按横向条带重复的s域的一个映射,作用仅仅是简化离散后重复的s域。
附:
连续函数的离散化方法有许多,下面用Matlab中c2d()函数的参数选项来介绍:
'impluse':单位冲击响应不变法,即直接z变换
'zoh' :加零阶保持器后进行z变换(默认选项)
'foh' :加一阶保持器后进行z变换
'tustin' :双线性变换法
'matched':保持直流增益不变,同时传递函数的零极点按式(2)的关系映射不变
其他方法还有后向差分,前向差分,高阶差分,这些方法c2d()函数并没有。
(以上内容均为自己思考所得,如有错误和疏漏,感谢大家指正)