传递函数的离散化(二)—— C实现

    传递函数要编程实现,就必须先进行离散化。前面我们介绍了一阶传函的离散化,其过程比较简单。那么对于二阶及二阶以上的传递函数怎么离散化呢?我们可以把传函转化为状态方程,这样就可以变成多个一阶的传递函数,然后再进行离散化。

一:传递函数离散化的步骤

1.传函转化为状态方程
2. 状态方程离散化

1.1 传函转化为状态方程

这里我们举一个简单的例子,把下面的传函转化为状态方程的形式:
G ( s ) = 2 s + 1 s 2 + 7 s + 9 G_{(s)}=\frac{2s+1}{s^{2}+7s+9} G(s)=s2+7s+92s+1
这里我们借助matlab工具求解,代码如下:

>> num=[2 1];
>> den=[1 7 9];
>> sys=tf(num,den)

sys =
 
     2 s + 1
  -------------
  s^2 + 7 s + 9
 
Continuous-time transfer function.

>> [A B C D]=tf2ss(num,den)

A =

    -7    -9
     1     0


B =

     1
     0


C =

     2     1


D =

     0

>> 

所以状态方程为:
[ x 2 ˙ x 1 ˙ ] = [ − 7 − 9 1 0 ] [ x 2 x 1 ] + [ 1 0 ] u   y = [ 2 1 ] [ x 2 x 1 ] \begin{bmatrix} \dot{x_{2}}\\ \dot{x_{1}} \end{bmatrix}=\begin{bmatrix} -7 & -9\\ 1 &0 \end{bmatrix}\begin{bmatrix} x_{2}\\ x_{1} \end{bmatrix}+\begin{bmatrix} 1\\ 0 \end{bmatrix}u \\ \ \\y=\begin{bmatrix} 2 & 1\end{bmatrix}\begin{bmatrix} x_{2}\\ x_{1}\end{bmatrix} [x2˙x1˙]=[7190][x2x1]+[10]u y=[21][x2x1]
化简下:
x 2 ˙ = − 7 x 2 − 9 x 1 + u x 1 ˙ = x 2 y = x 1 + 2 x 2 \dot{x_{2}}=-7x_{2}-9x_{1}+u \\\dot{x_{1}}=x_{2} \\y=x_{1}+2x_{2} x2˙=7x29x1+ux1˙=x2y=x1+2x2

1.2 状态方程离散化

我们把上面的状态方程离散化,写出matlab function模块仿真下,代码如下:

function y = fcn(u,Ts)

persistent x1 x2;
if isempty(x1)
    x1=0;
end
if isempty(x2)
    x2=0;
end

x1 = x1 + Ts*x2;
x2 = x2 + Ts*(-9*x1-7*x2+u);
y = x1+2*x2;

end

二:传递函数离散化的仿真验证

我们把上面例子中的传递函数,状态方程和离散化的代码进行仿真验证下查看其阶跃响应:
在这里插入图片描述
三种方式的阶跃响应结果完全重合如下:
在这里插入图片描述
参考模型:https://download.csdn.net/download/wanrenqi/84389722

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值