我是靠谱客的博主 无私外套,最近开发中收集的这篇文章主要介绍连续系统如何离散化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最常见的两种方法就是欧拉法和塔斯汀法(Tustin's method,也叫bilinear transformation)。
欧拉法即为:
s=frac{z-1}{t}
将传递函数中的s用这个替换即可。
这是因为s在拉普拉斯变换里面是微分,而
dot{x} approx (x(k+1)-x(k))/t
而z变换里面的z运算符即为:
zx(k)=x(k+1)
微分关系即变为:
dot{x} approx (zx(k)-x(k))/t=x(k)(z-1)/t

但是欧拉法用的是积分的矩形法则,效果有时并不好。所以又提出了根据梯形法则的塔斯汀法:
s=frac{2}{t}frac{z-1}{z+1}
将C(s)里面的s都替换掉,变成z和C(z)就行了。

可以再matlab里面用c2d函数进行运算:
[numZ denZ]=c2d(num,den,'tustin')%bilinear method
欧拉法在matlab里面貌似已经是不支持了。

再说下z域里怎么写成差分方程。如果我们有控制器:
c(z)=frac{y(z)}{u(z)}=frac{a_{m}z^{m}+a_{m-1}z^{m-1}....+a_{1}z^{1}+b_{0}}{b_{n}z^{n}+b_{n-1}z^{n-1}....+b_{1}z^{1}+b_{0}}
且n≥m,
将分式转换:
y(z)(a_{n}z^{n}+a_{n-1}z^{n-1}....+a_{1}z^{1}+a_{0})=u(z)(b_{m}z^{m}+b_{m-1}z^{m-1}....+b_{1}z^{1}+b_{0})
两边同除以z^n
y(z)(a_{n}+a_{-1}z^{-1}....+a_{1}z^{1-n}+a_{0}z^{-n})=u(z)(b_{m}z^{m-n}+b_{m-1-n}z^{m-1-n}....+b_{1}z^{1-n}+b_{0}z^{-n})
注意
z^{-n}x(k)=x(k-n)
让Y(z)=Y(k),U(z)=U(k)
a_{n}y(k)+a_{-1}y(k-1)....+a_{1}y(k+1-n)+a_{0}y(k-n)\=b_{m}u(k+m-n)+b_{m-1-n}u(k+m-n-1)....+b_{1}u(k+1-n)+b_{0}u(k-n)
那么就能得到k时刻Y的值了。
begin{split}
&y(k)=frac{1}{a_{n}}
((-a_{-1}y(k-1)....-a_{1}y(k+1-n)-a_{0}y(k-n)\
&+b_{m}u(k+m-n)+b_{m-1-n}u(k+m-n-1)....+b_{1}u(k+1-n)+b_{0}u(k-n))\
end{split}

举个例子:
c(z)=frac{y(z)}{u(z)}=frac{2z-1}{z^2+z+1}
分式上下均除以z的平方:
c(z)=frac{y(z)}{u(z)}=frac{2z^{-1}-z^{-2}}{1+z^{-1}+z^{-2}}
进一步整理:
y(k)(1+z^{-1}+z^{-2})=u(k)(2z^{-1}-z^{-2})
再把左边的部分项挪过来:
y(k)=2u(k-1)-u(k-2)-y(k-1)-y(k-2)
这样就知道k时刻控制器的输出是多少了,能在程序里面进行实现了。

最后

以上就是无私外套为你收集整理的连续系统如何离散化的全部内容,希望文章能够帮你解决连续系统如何离散化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部