传递函数转化为差分方程

在嵌入式中实现控制器

在控制系统的设计中,我们所设计得到的控制器和滤波器通常都是以s域传递函数的形式给出的,要想在嵌入式系统中实现上述的控制器和滤波器就必须进行传递函数的离散化;下面简单介绍几种由复频域到离散域的转换方法:

1.一阶向前差分法:

s = z − 1 T s=\frac{z-1}{T} s=Tz1

将传递函数中的s使用上式进行替换即可,接下来是推导过程:

已知微分方程 y ′ = u ( t ) \boldsymbol{y}^{\prime}=\boldsymbol{u}(\boldsymbol{t}) y=u(t) ,初值为0,离散步长 h = T h=T h=T,利用欧拉数值积分公式,则有:

y n = y n − 1 + T u ( t n − 1 ) \boldsymbol{y}_{n}=\boldsymbol{y}_{n-1}+\boldsymbol{T} \boldsymbol{u}\left(\boldsymbol{t}_{n-1}\right) yn=yn1+Tu(tn1)

两边同时取 Z Z Z变换可得:
Y ( z ) = z − 1 Y ( z ) + T z − 1 U ( z ) \boldsymbol{Y}(z)=z^{-1}\boldsymbol{Y}(z)+\boldsymbol{T}z^{-1} \boldsymbol{U}(z) Y(z)=z1Y(z)+Tz1U(z)
则:
G ( z ) = Y ( z ) U ( z ) = T z − 1 G(z)=\frac{Y(z)}{U(z)}=\frac{T}{z-1} G(z)=U(z)Y(z)=z1T
对原式两端同时取拉普拉斯变换,可得:
G ( s ) = Y ( s ) U ( s ) = 1 s G(s)=\frac{Y(s)}{U(s)}=\frac{1}{s} G(s)=U(s)Y(s)=s1
比较上述两式,则有:
s = z − 1 T s=\frac{z-1}{T} s=Tz1

或者:
根据离散域中z的定义:
z = e s T z=e^{s T} z=esT
上式泰勒展开:
e x = 1 + x + 1 2 ! x 2 + 1 3 ! x 3 + 1 4 ! x 4 + 1 5 ! x 5 + 1 6 ! x 6 + ⋯ e^{x}=1+x+\frac{1}{2 !} x^{2}+\frac{1}{3 !} x^{3}+\frac{1}{4 !} x^{4}+\frac{1}{5 !} x^{5}+\frac{1}{6 !} x^{6}+\cdots ex=1+x+2!1x2+3!1x3+4!1x4+5!1x5+6!1x6+
略去高阶项:
1 + s T = z 1+s T=z 1+sT=z
可得:
s = z − 1 T s=\frac{z-1}{T} s=Tz1

2.一阶向后差分法

或者:

已知微分方程 y ′ = u ( t ) \boldsymbol{y}^{\prime}=\boldsymbol{u}(\boldsymbol{t}) y=u(t) ,初值为0,离散步长 h = T h=T h=T,利用欧拉数值积分公式,则有:

y n = y n − 1 + T u ( t n ) \boldsymbol{y}_{n}=\boldsymbol{y}_{n-1}+\boldsymbol{T} \boldsymbol{u}\left(\boldsymbol{t}_{n}\right) yn=yn1+Tu(tn)

两边同时取 Z Z Z变换可得:
Y ( z ) = z − 1 Y ( z ) + T U ( z ) \boldsymbol{Y}(z)=z^{-1}\boldsymbol{Y}(z)+\boldsymbol{T} \boldsymbol{U}(z) Y(z)=z1Y(z)+TU(z)
则:
G ( z ) = Y ( z ) U ( z ) = T 1 − z − 1 G(z)=\frac{Y(z)}{U(z)}=\frac{T}{1-z^{-1}} G(z)=U(z)Y(z)=1z1T
对原式两端同时取拉普拉斯变换,可得:
G ( s ) = Y ( s ) U ( s ) = 1 s G(s)=\frac{Y(s)}{U(s)}=\frac{1}{s} G(s)=U(s)Y(s)=s1
比较上述两式,则有:
s = 1 − z − 1 T s=\frac{1-z^{-1}}{T} s=T1z1

3.双线性变换法

一阶向前、向后差分法的依据是积分的矩形法则,有时效果并不好,故出现了依据积分的梯形法则的双线性变换法(又称塔斯汀法);
s = 2 T z − 1 z + 1 s=\frac{2}{T} \frac{z-1}{z+1} s=T2z+1z1

推导过程如下:

假设: y ′ = u ( t ) y^{\prime}=u(t) y=u(t)
利用梯形的数值积分形式:
y n + 1 = y n + T 2 [ u ( t n ) + u ( t n + 1 ) ] y_{n+1}=y_{n}+\frac{T}{2}\left[u\left(t_{n}\right)+u\left(t_{n+1}\right)\right] yn+1=yn+2T[u(tn)+u(tn+1)]
两边取z变换,可得:
z Y ( z ) = Y ( z ) + T 2 [ U ( z ) + z U ( z ) ] z \boldsymbol{Y}(z)=\boldsymbol{Y}(z)+\frac{\boldsymbol{T}}{2}[\boldsymbol{U}(z)+z \boldsymbol{U}(z)] zY(z)=Y(z)+2T[U(z)+zU(z)]
则有:
G ( z ) = Y ( z ) U ( z ) = T 2 z + 1 z − 1 G(z)=\frac{Y(z)}{U(z)}=\frac{T}{2} \frac{z+1}{z-1} G(z)=U(z)Y(z)=2Tz1z+1
同理可得:
s = 2 T z − 1 z + 1 s=\frac{2}{T} \frac{z-1}{z+1} s=T2z+1z1

或者:
z = e s T = e s T / 2 e − s T / 2 ≈ 1 + s T / 2 1 − s T / 2 z=e^{s T}=\frac{e^{s T / 2}}{e^{-s T / 2}} \approx \frac{1+s T / 2}{1-s T / 2} z=esT=esT/2esT/21sT/21+sT/2
可得:
s = 2 T z − 1 z + 1 s=\frac{2}{T} \frac{z-1}{z+1} s=T2z+1z1

至此,将传递函数中的s全部替换,得到传递函数的离散域表示(即差分方程);我们也可以使用matlab中的c2d函数来对传递函数进行离散化;调用格式如下:

[numZ denZ]=c2d(num,den,‘tustin’)%bilinear method

注意:得到的差分方程的表示如下,n必须大于等于m(因为未来时刻的信息无法获知)

Y ( z ) U ( z ) = a 1 + a 2 z − 1 + a 3 z − 2 + ⋯ + a m z − ( m − 1 ) b 1 + b 2 z − 1 + b 3 z − 2 + ⋯ + b n z − ( n − 1 ) \frac{Y(z)}{U(z)}=\frac{a_{1}+a_{2} z^{-1}+a_{3} z^{-2}+\cdots+a_{m} z^{-(m-1)}}{b_{1}+b_{2} z^{-1}+b_{3} z^{-2}+\cdots+b_{n} z^{-(n-1)}} U(z)Y(z)=b1+b2z1+b3z2++bnz(n1)a1+a2z1+a3z2++amz(m1)

与s域传递函数类似,z呈降幂排列,但是首相幂为0,无正幂项;
式中:
z − n x ( z ) = x ( t − n ) z^{-n} x(z)=x(t-n) znx(z)=x(tn)
表示前n个采样时刻的信号值。
当从连续域到离散域的离散效果不好时,有如下改进的方法:
1.选取更适合的离散化方法;
2.提高采样频率;
3.修正连续域设计,如增加稳定裕度指标等。

参考文献:

从传递函数向z函数的转换

  • 23
    点赞
  • 226
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
将MATLAB中离散系统的传递函数转化差分方程的方法如下: 1. 首先,将传递函数表示为z变换形式。在MATLAB中,可以使用`tf`函数创建离散系统的传递函数对象。例如,假设传递函数为H(z),可以使用如下代码创建传递函数对象: `H = tf([b0, b1, b2], [1, a1, a2], Ts)` 其中,`[b0, b1, b2]`是传递函数的分子多项式系数,`[1, a1, a2]`是传递函数的分母多项式系数,`Ts`是采样时间。 2. 使用`c2d`函数将传递函数对象转化差分方程形式。`c2d`函数允许将连续系统或离散系统转化差分方程。例如,使用如下代码将传递函数对象H转化差分方程: `[num, denom] = tfdata(H, 'v')` `numD = num * Ts` `denomD = denom * Ts` `[A, B, C, D] = tf2ss(numD, denomD)` `sysD = ss(A, B, C, D, Ts)` 上述代码中,`tfdata`函数用于提取传递函数的分子和分母多项式系数,`* Ts`用于将传递函数离散化,`tf2ss`函数用于将离散系统转化为状态空间形式,最后使用`ss`函数创建相应的离散系统对象。 3. 最后,差分方程形式的传递函数可以通过离散状态空间模型sysD中的状态方程表示。一般形式如下: `x(k+1) = A * x(k) + B * u(k)` `y(k) = C * x(k) + D * u(k)` 其中,`x(k)`表示系统的状态向量,`u(k)`表示系统的输入向量,`y(k)`表示系统的输出向量,`A`、`B`、`C`、`D`分别为状态空间模型的矩阵。 在MATLAB中,可以进一步提取差分方程的系数以及状态变量对应的初始条件,并使用这些信息进行进一步的分析和设计。 通过上述步骤,我们可以将MATLAB中的离散系统传递函数转化差分方程,从而方便进行系统分析和控制设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值